Aller au contenu principal

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