bg-tutorials

Comment installer un certificat SSL ACME dans Kubernetes ?

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.

Installer ACME SSL sur Kubernetes

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é).
  • kubectl est 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

Image détaillée d'un dragon en vol
Rédigé par

Rédacteur de contenu expérimenté spécialisé dans les certificats SSL. Transformer des sujets complexes liés à la cybersécurité en un contenu clair et attrayant. Contribuer à l'amélioration de la sécurité numérique par des récits percutants.