L’installation d’un certificat SSL ACME dans Kubernetes est désormais un processus standardisé et flexible grâce à des outils matures comme cert-manager et à une large prise en charge par les autorités de certification commerciales. Que vous exécutiez des charges de travail de production derrière NGINX Ingress, Traefik ou une autre passerelle, vous pouvez automatiser le HTTPS sécurisé avec un contrôle total.

Ce guide vous montrera comment installer un certificat SSL ACME dans Kubernetes à l’aide de cert-manager. Nous couvrirons l’installation, la configuration d’un émetteur avec External Account Binding (EAB), et l’émission de certificats pour protéger vos services d’entrée.
Ce dont vous aurez besoin
Avant de vous lancer, assurez-vous que
- Vous disposez d’un cluster Kubernetes fonctionnel (v1.23+ recommandé).
kubectlest configuré et fonctionne- Vous avez accès à votre contrôleur d’entrée (par exemple, NGINX, Traefik).
- Votre domaine pointe vers l’IP publique de votre contrôleur d’entrée.
- Vous disposez des informations d’identification EAB de votre autorité de certification compatible avec ACME :
- URL de l’annuaire ACME (par exemple https://acme.example.com/v2/DV)
- Identifiant clé de l’EAB (KID)
- EAB Clé HMAC
Remarque: https://acme.example.com/v2/DV est utilisé tout au long de ce guide pour remplacer l’URL du répertoire ACME. Remplacez-la par l’adresse réelle de votre autorité de certification.
Étape 1 – Installation de cert-manager
cert-manager est le client ACME natif de Kubernetes le plus utilisé. Il fonctionne comme un contrôleur qui gère l’émission et le renouvellement des certificats.
Installer via Helm (de préférence pour la production) :
kubectl create namespace cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v1.14.4 \
--set installCRDs=true
Attendez quelques secondes et confirmez que tous les pods fonctionnent :
kubectl get pods -n cert-manager
Vous devriez voir trois pods : cert-manager, cert-manager-webhook, et cert-manager-cainjector.
Étape 2 – Créer un secret Kubernetes pour les informations d’identification EAB
Créez un secret Kubernetes pour stocker votre clé EAB en toute sécurité :
kubectl create secret generic acme-eab-secret \
--namespace cert-manager \
--from-literal=eab-kid="YOUR_EAB_KID" \
--from-literal=eab-hmac-key="YOUR_EAB_HMAC_KEY"
Remplacez-les par vos références réelles. Évitez les espaces blancs de type copier-coller.
Étape 3 – Définir un ClusterIssuer ou un Issuer
Créez maintenant une ressource ClusterIssuer (pour tous les espaces de noms) ou Issuer (un seul espace de noms) qui connecte cert-manager à votre ACME CA à l’aide des informations d’identification EAB.
Voici un exemple de ClusterIssuer YAML :
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: acme-issuer
spec:
acme:
server: https://your.acme-server.com/v2/DV
email: [email protected]
privateKeySecretRef:
name: acme-private-key
externalAccountBinding:
keyID: YOUR_EAB_KID
keySecretRef:
name: acme-eab-secret
key: eab-hmac-key
solvers:
- http01:
ingress:
class: nginx
Appliquez-le :
kubectl apply -f clusterissuer.yaml
Remplacez ingress.class : nginx par traefik, nginx-internal, ou toute autre classe d’ingress. Vous pouvez trouver cela dans la documentation de votre contrôleur ingress.
Étape 4 – Créer une ressource de certificat
Une fois que votre ClusterIssuer est prêt, créez une ressource Certificat qui indique à cert-manager le domaine à sécuriser. Voici un exemple :
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: my-ssl-cert
namespace: default
spec:
secretName: my-ssl-cert-tls
issuerRef:
name: acme-issuer
kind: ClusterIssuer
commonName: yourdomain.com
dnsNames:
- yourdomain.com
- www.yourdomain.com
Appliquez-le :
kubectl apply -f certificate.yaml
cert-manager utilisera l’émetteur, résoudra le défi via ingress, et stockera le certificat émis en tant que secret TLS Kubernetes.
Étape 5 – Référencement du certificat dans votre Ingress
Mettez à jour votre règle d’entrée pour utiliser le certificat généré :
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
annotations:
cert-manager.io/cluster-issuer: acme-issuer
spec:
tls:
- hosts:
- yourdomain.com
- www.yourdomain.com
secretName: my-ssl-cert-tls
rules:
- host: yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: your-service
port:
number: 80
Appliquez-le :
kubectl apply -f ingress.yaml
Une fois que cert-manager aura détecté l’annotation, il commencera à résoudre le défi ACME et délivrera votre certificat.
Étape 6 – Vérification du certificat et du renouvellement automatique
Pour vérifier que tout fonctionne :
kubectl describe certificate my-ssl-cert
Recherchez le certificat délivré avec succès.
Pour vérifier la configuration du renouvellement, exécutez :
kubectl get certificaterequests
cert-manager gère le renouvellement automatiquement environ 30 jours avant l’expiration. Vous pouvez simuler un renouvellement comme suit :
kubectl cert-manager renew my-ssl-cert
Questions courantes
La configuration d’ACME SSL dans Kubernetes peut sembler un peu abstraite, en particulier lorsque vous jonglez avec les contrôleurs d’entrée, les Secrets et les enregistrements DNS. Ci-dessous, nous répondons à quelques questions courantes auxquelles les développeurs sont confrontés lors de l’installation de certificats ACME dans un environnement Kubernetes, que vous utilisiez cert-manager ou une configuration alternative.
Puis-je utiliser DNS-01 au lieu de HTTP-01 ?
Oui, cert-manager supporte la validation DNS avec des fournisseurs comme Cloudflare, AWS, et Google Cloud DNS. Utilisez-le si vous n’exposez pas le port 80.
cert-manager est-il prêt pour la production ?
Absolument. Il alimente le SSL pour les grands clusters Kubernetes dans les entreprises et les clouds publics.
Puis-je utiliser un certificat wildcard avec ACME dans Kubernetes ?
Oui, mais les certificats wildcard nécessitent une validation DNS-01, ce qui implique la mise à jour des enregistrements DNS au lieu d’utiliser des défis HTTP. Confirmez que votre fournisseur DNS prend en charge l’automatisation (via l’API) et configurez le solveur dns01 en conséquence dans votre configuration de cert-manager.
Dernières paroles
Vous savez maintenant comment installer un certificat SSL ACME dans Kubernetes à l’aide de cert-manager et d’une autorité de certification compatible avec ACME. Cette configuration est entièrement automatisée et évolutive pour les environnements Kubernetes modernes. Vous bénéficiez d’un HTTPS sécurisé, d’un renouvellement automatique et d’une intégration transparente avec Ingress, le tout sans quitter votre cluster.
Economisez 10% sur les certificats SSL en commandant aujourd’hui!
Émission rapide, cryptage puissant, confiance de 99,99 % du navigateur, assistance dédiée et garantie de remboursement de 25 jours. Code de coupon: SAVE10

