Gestion des certificats

Comment fonctionnent les certificats HTTPS automatiques

Siovos fournit des certificats HTTPS automatiques pour tous vos services via une autorité de certification privée. Voici comment ça fonctionne.

La chaîne de certificats#

Trois composants travaillent ensemble pour fournir une gestion transparente des certificats :

Certificate chain

Step CA - Votre autorité de certification privée. Émet des certificats de confiance pour tout domaine *.internal (ou votre suffixe configuré).

cert-manager - Opérateur Kubernetes qui automatise les demandes de certificats. Surveille les ressources Ingress et les CRDs Certificate, puis demande des certificats à Step CA.

Reflector - Copie les secrets de certificats entre namespaces. Permet à un certificat émis dans un namespace d'être utilisé par des services dans d'autres namespaces.

Comment ça fonctionne#

  1. Vous créez un Ingress avec une section TLS
  2. cert-manager détecte l'Ingress et crée une demande de Certificate
  3. cert-manager contacte Step CA pour émettre le certificat
  4. Le certificat est stocké comme Secret Kubernetes
  5. Traefik utilise le secret pour servir en HTTPS
  6. Reflector copie le secret vers d'autres namespaces si configuré

Demander un certificat#

Via Ingress (Recommandé)#

Ajoutez l'annotation cert-manager à votre Ingress :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app
  annotations:
    cert-manager.io/cluster-issuer: step-ca-issuer
spec:
  ingressClassName: traefik
  tls:
    - hosts:
        - my-app.internal
      secretName: my-app-tls
  rules:
    - host: my-app.internal
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-app
                port:
                  number: 80

cert-manager va automatiquement :

  1. Créer une ressource Certificate
  2. Demander un certificat à Step CA
  3. Le stocker dans le secret my-app-tls

Via ressource Certificate (Manuel)#

Pour plus de contrôle, créez une ressource Certificate directement :

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-app-cert
  namespace: my-namespace
spec:
  secretName: my-app-tls
  duration: 720h # 30 jours
  renewBefore: 168h # 7 jours
  issuerRef:
    name: step-ca-issuer
    kind: ClusterIssuer
  dnsNames:
    - my-app.internal
    - api.my-app.internal

Renouvellement des certificats#

Les certificats sont automatiquement renouvelés avant expiration. Par défaut :

  • Durée du certificat : 30 jours
  • Renouvellement : automatique avant expiration

Vous pouvez vérifier le statut des certificats :

kubectl get certificates -A
kubectl describe certificate my-app-cert -n my-namespace

Partager des certificats entre namespaces#

Utilisez les annotations Reflector pour copier un secret de certificat vers d'autres namespaces :

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: shared-cert
  namespace: cert-manager
spec:
  secretName: shared-tls
  secretTemplate:
    annotations:
      reflector.v1.k8s.emberstack.com/reflection-allowed: "true"
      reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "app1,app2,app3"
      reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true"
  issuerRef:
    name: step-ca-issuer
    kind: ClusterIssuer
  dnsNames:
    - "*.internal"

Le secret sera automatiquement copié dans les namespaces app1, app2 et app3.

Certificats wildcard#

Pour plusieurs sous-domaines, utilisez un certificat wildcard :

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: wildcard-cert
spec:
  secretName: wildcard-tls
  issuerRef:
    name: step-ca-issuer
    kind: ClusterIssuer
  dnsNames:
    - "*.internal"
    - "internal"

Les certificats wildcard couvrent *.internal mais pas internal lui-même. Incluez les deux si nécessaire.

Faire confiance aux certificats#

Les certificats émis par Step CA ne sont de confiance que sur les machines qui ont le certificat racine CA installé. Voir Installation du certificat pour les instructions.

Vérifier le statut des certificats#

Voir tous les certificats :

kubectl get certificates -A

Vérifier un certificat spécifique :

kubectl describe certificate my-app-cert -n my-namespace

Voir le secret actuel :

kubectl get secret my-app-tls -n my-namespace -o yaml

Dépannage#

Certificat non émis#

  1. Vérifiez les logs de cert-manager :

    kubectl logs -n cert-manager deployment/cert-manager
  2. Vérifiez le statut du Certificate :

    kubectl describe certificate my-app-cert
  3. Cherchez les ressources CertificateRequest :

    kubectl get certificaterequests -A

Certificat affiche "Not Ready"#

Causes courantes :

  • Step CA n'est pas en cours d'exécution
  • Le ClusterIssuer est mal configuré
  • Le nom DNS n'est pas autorisé par la politique de l'issuer

Secret non copié par Reflector#

  1. Vérifiez que les annotations Reflector sont correctes
  2. Vérifiez les logs de Reflector :
    kubectl logs -n reflector deployment/reflector

Prochaines étapes#

Cette page vous a-t-elle été utile ?