SSL avec Docker et Kubernetes

Certificats SSL dans les environnements containerises.

La gestion des certificats SSL dans les environnements containers presente des defis uniques. Les containers sont ephemeres, les deploiements frequents, et l'automatisation est essentielle.

Ce guide couvre les strategies pour Docker et Kubernetes, des approches simples aux solutions enterprise avec cert-manager.

Que vous utilisiez Traefik, nginx-ingress, ou un autre ingress controller, vous trouverez les bonnes pratiques pour votre infrastructure.

Defis des Containers

Pourquoi SSL est different avec les containers :

  • Ephemere : les containers peuvent etre recrees a tout moment, les secrets doivent persister.
  • Scalabilite : plusieurs replicas partagent le meme certificat.
  • Automatisation : le renouvellement doit etre automatique sans redemarrage.
  • Securite : les cles privees doivent etre stockees de maniere securisee.

Solutions Disponibles

Les principales approches pour SSL en containers :

  • Ingress Controller : centralise SSL au niveau de l'ingress (Traefik, nginx-ingress).
  • cert-manager : operateur Kubernetes pour la gestion automatique des certificats.
  • Sidecar : proxy sidecar qui gere TLS (Envoy, Linkerd).
  • Secrets mounts : montez les certificats comme volumes depuis les secrets.

Mise en Place

Etapes pour SSL en Kubernetes avec cert-manager :

  1. Installer cert-manager : deployez cert-manager dans votre cluster.
  2. Configurer l'Issuer : creez un ClusterIssuer pour Let's Encrypt.
  3. Annoter l'Ingress : ajoutez les annotations pour la creation automatique du certificat.
  4. Verifier : controlez que le certificat est emis et renouvele.

Exemples de Configuration

cert-manager avec Let's Encrypt :

# ClusterIssuer Let's Encrypt
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: nginx

# Ingress avec TLS automatique
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts: [example.com]
    secretName: example-tls

cert-manager cree et renouvelle automatiquement le certificat dans le secret specifie.

Bonnes Pratiques

Conseils pour SSL en containers :

  • Utilisez cert-manager : c'est la solution standard pour Kubernetes.
  • Centralisez SSL a l'ingress : evitez de gerer SSL dans chaque container.
  • Moniteur externe : surveillez vos certificats depuis l'exterieur avec MoniTao.
  • Testez le renouvellement : simulez l'expiration pour verifier que le renouvellement fonctionne.

Checklist SSL Containers

  • cert-manager deploye
  • Issuer/ClusterIssuer configure
  • Ingress annote
  • Certificat emis avec succes
  • Renouvellement automatique teste
  • Monitoring externe configure

Questions Frequentes

cert-manager ou Traefik built-in ?

cert-manager est plus flexible et fonctionne avec n'importe quel ingress. Traefik built-in est plus simple pour Traefik seul.

Comment debugger cert-manager ?

kubectl describe certificate et kubectl logs du pod cert-manager.

Wildcard en Kubernetes ?

Utilisez DNS01 challenge avec cert-manager. Configurez votre provider DNS.

Puis-je utiliser mes propres certificats ?

Oui, creez un Secret contenant tls.crt et tls.key, referencez-le dans l'ingress.

mTLS entre services ?

Utilisez un service mesh comme Istio ou Linkerd pour le mTLS automatique.

Comment surveiller l'expiration ?

MoniTao surveille vos endpoints HTTPS et vous alerte avant expiration du certificat.

SSL Automatise en Containers

Les environnements containerises necessitent une approche automatisee pour SSL. cert-manager et les ingress controllers modernes rendent cela simple.

Surveillez toujours vos certificats depuis l'exterieur avec MoniTao pour detecter les problemes avant vos utilisateurs.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.