Configuration des Add-on
Controleur d'ingress : nginx
Lorsque des éléments s'exécutent à l'intérieur d'un cluster Kubernetes, vous ne pouvez pas simplement le contacter de l'extérieur. Il existe de nombreuses façons de procéder, comme pour tout le reste dans Kubernetes. Pour la plupart, cela est géré par un contrôleur d'entrée. Nous utilisons Nginx ingress controler
Configuration
Configuration effectué dans le fichier values.yaml
Installation
Se possitionner dans le repos git de l'add-ons, puis executer les commandes suivantes:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
k helm3 upgrade --install ingress-nginx ingress-nginx/ingress-nginx -f values.yaml -n ingress-nginx --version 4.7.1
Stockage
Configuration
Nous avons installé le hostpathplug-in afin de pouvoir mettre des volumes persistants à la disposition des pods. Mais nous n'avons pas vraiment de contrôle sur l'emplacement des répertoires contenant chaque volume. Nous pouvons contrôler cela en créant un storageClass qui le spécifie, puis definir cela comme storageClass par defaut lors de la création de pods.
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: disk-hostpath
provisioner: microk8s.io/hostpath
reclaimPolicy: Delete
parameters:
pvDir: /opt/k8s-storage
volumeBindingMode: WaitForFirstConsumer
Cela créera un storageClass appelé disk-hostpath et tous les volumes créés par les pods seront dans le repertoir /opt/k8s-storage
Certificat lets'encrypt : Cert-manager
Nous avons installé cert-manager plus tôt, mais nous devons le configurer. Nous utiliserons des certificats letsencrypt , ce qui signifie que nous aurons besoin d'un moyen de répondre aux défis ACME utilisés pour authentifier notre propriété du domain et enregistrement DNS. cert-manager démarrera automatiquement un pod nginx et mappera la bonne entrée pour que cela fonctionne.
Configuration
Lets'encrypt production
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
# You must replace this email address with your own.
# Let's Encrypt will use this to contact you about expiring
# certificates, and issues related to your account.
email: 'eddy.noukap@terinnova.com'
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
# Secret resource that will be used to store the account's private key.
name: letsencrypt-account-key
# Add a single challenge solver, HTTP01 using nginx
solvers:
- http01:
ingress:
class: nginx
Lets'encrypt staging
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
email: 'eddy.noukap@terinnova.com'
privateKeySecretRef:
name: letsencrypt-staging
server: https://acme-staging-v02.api.letsencrypt.org/directory
solvers:
- http01:
ingress:
class: nginx
Installation
k apply -f letsencrypt-staging.yaml
k apply -f letsencrypt.yaml
...verification de l'état
k describe ClusterIssuer
Name: letsencrypt-staging
Namespace:
Labels: <none>
Annotations: <none>
API Version: cert-manager.io/v1
Kind: ClusterIssuer
Metadata:
Creation Timestamp: 2023-07-19T02:01:22Z
Generation: 1
Resource Version: 14064
UID: 32c4830f-b3d3-4ef0-b1cd-dd4bfa1f6ea1
Spec:
Acme:
Email: eddy.noukap@terinnova.com
Preferred Chain:
Private Key Secret Ref:
Name: letsencrypt-staging
Server: https://acme-staging-v02.api.letsencrypt.org/directory
Solvers:
http01:
Ingress:
Class: nginx
Status:
Acme:
Last Registered Email: eddy.noukap@terinnova.com
Uri: https://acme-staging-v02.api.letsencrypt.org/acme/acct/111467224
Conditions:
Last Transition Time: 2023-07-19T02:01:24Z
Message: The ACME account was registered with the ACME server
Observed Generation: 1
Reason: ACMEAccountRegistered
Status: True
Type: Ready
Events: <none>
Exemple de configuration d'ingress
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
namespace: tst
labels:
app: nginx
annotations:
cert-manager.io/cluster-issuer: letsencrypt # Le nom du cluster issuer du certificat
ingress.kubernetes.io/force-ssl-redirect: 'true'
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: 'true'
spec:
tls:
- hosts:
- nginx-tst.dr-fanel.com
secretName: letsencrypt-prod # Le nom du secret dans lequel le certificat sera généré
rules:
- host: nginx-tst.dr-fanel.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80