Lab 8.3 - TLS/SSL avec Cert-Manager
Objectifs du Lab
À la fin de ce lab, vous serez capable de:
- Installer cert-manager dans le cluster.
- Configurer un ClusterIssuer pour Let's Encrypt.
- Créer un certificat TLS pour un Ingress.
- Configurer HTTPS avec Ingress.
- Tester l'accès HTTPS sécurisé.
Durée Estimée
60-75 minutes
Prérequis
- kubectl installé et configuré.
- Cluster Kubernetes avec Ingress Controller.
- Domaine accessible publiquement (ou utilisation de certificats auto-signés pour le test local).
Partie 1: Installation de cert-manager
cert-manager est un opérateur Kubernetes qui automatise la gestion des certificats TLS.
Étape 1.1: Installer cert-manager
Installez cert-manager:
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
Attendez que cert-manager soit prêt:
kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=90s
Vérifiez l'installation:
kubectl get pods -n cert-manager
Partie 2: Configuration d'un ClusterIssuer
Un ClusterIssuer définit comment cert-manager obtient les certificats (Let's Encrypt, auto-signé, etc.).
Étape 2.1: ClusterIssuer pour Let's Encrypt (Production)
Pour un domaine public, créez clusterissuer-letsencrypt.yaml:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com # Remplacez par votre email
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
Note: Pour Let's Encrypt, vous devez avoir un domaine public et un Ingress accessible depuis Internet.
Étape 2.2: ClusterIssuer Auto-signé (Test Local)
Pour un cluster local, utilisez un certificat auto-signé:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
spec:
selfSigned: {}
Appliquez le ClusterIssuer auto-signé:
kubectl apply -f clusterissuer-selfsigned.yaml
Vérifiez:
kubectl get clusterissuer
Partie 3: Création d'un Certificat
Étape 3.1: Créer un Certificat
Créez certificate-example.yaml:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app-tls-cert
spec:
secretName: app-tls-secret # Nom du Secret où le certificat sera stocké
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app.local # Nom d'hôte pour le certificat
Appliquez le certificat:
kubectl apply -f certificate-example.yaml
Vérifiez le statut:
kubectl get certificate
kubectl describe certificate app-tls-cert
Attendez que le certificat soit prêt:
kubectl wait --for=condition=ready certificate app-tls-cert --timeout=60s
Vérifiez que le Secret a été créé:
kubectl get secret app-tls-secret
Partie 4: Configuration de l'Ingress avec TLS
Étape 4.1: Créer un Ingress avec TLS
Créez ingress-tls.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer # Annotation pour cert-manager
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret # Référence au Secret du certificat
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
Note: Si vous utilisez l'annotation cert-manager.io/cluster-issuer, cert-manager créera automatiquement le certificat. Sinon, référencez le Secret créé manuellement.
Appliquez l'Ingress:
kubectl apply -f ingress-tls.yaml
Partie 5: Test de l'Accès HTTPS
Étape 5.1: Configurer le Hostname
Assurez-vous que app.local pointe vers l'IP de l'Ingress Controller dans /etc/hosts.
Étape 5.2: Tester HTTPS
Testez l'accès HTTPS:
# Ignorer la vérification du certificat auto-signé
curl -k https://app.local
Ou dans le navigateur, acceptez le certificat auto-signé (vous verrez un avertissement de sécurité, c'est normal pour un certificat auto-signé).
Partie 6: Certificat Automatique avec Annotation
Vous pouvez aussi laisser cert-manager créer le certificat automatiquement via l'annotation dans l'Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress-auto-tls
annotations:
cert-manager.io/cluster-issuer: selfsigned-issuer
spec:
ingressClassName: nginx
tls:
- hosts:
- app.local
secretName: app-tls-secret-auto
rules:
- host: app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
Cert-manager créera automatiquement le certificat et le Secret.
Partie 7: Nettoyage
Supprimez les ressources:
kubectl delete ingress app-ingress-tls
kubectl delete certificate app-tls-cert
kubectl delete clusterissuer selfsigned-issuer
kubectl delete secret app-tls-secret
Pour désinstaller cert-manager:
kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml
Résumé du Lab
Dans ce lab, vous avez installé cert-manager, configuré un ClusterIssuer (auto-signé pour le test local), créé un certificat TLS, et configuré un Ingress avec HTTPS. Vous avez appris à automatiser la gestion des certificats TLS dans Kubernetes.
Prochaines Étapes
Le dernier lab de ce module vous montrera comment configurer plusieurs domaines et virtual hosts avec Ingress.
Lab 8.4: Multi-domaines et Virtual Hosts
Lab créé le: Décembre 2024