Scrydon

TLS

Prérequis de certificats TLS pour l'ingress Scrydon

Tous les services doivent être servis via HTTPS. Pour un nom d'hôte public qui atteint directement Traefik, nous recommandons cert-manager avec Let's Encrypt pour le provisionnement automatique des certificats.

Si votre nom d'hôte est strictement privé (app.internal, something.local ou une autre zone non déléguée dans le DNS public), Let's Encrypt ne peut pas émettre de certificat pour lui. Utilisez une CA ACME interne comme step-ca, ou apportez votre propre certificat d'entreprise. Si TLS se termine sur un équilibreur de charge en amont, suivez Déchargement TLS. Consultez Certificats TLS pour le guide de décision complet.

1. Installer cert-manager

# Install cert-manager (if not already present)
helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager \
  --namespace cert-manager --create-namespace \
  --set crds.enabled=true

2. Créer un ClusterIssuer

Le chart ne crée pas l'issuer pour vous. Quand ingress.tls.enabled: true (par défaut), le chart annote son Ingress avec cert-manager.io/cluster-issuer: letsencrypt-prod, mais vous devez créer un ClusterIssuer avec exactement ce nom. Sans cela, le certificat reste bloqué (READY=False, "Issuing certificate as Secret does not exist") et aucun challenge ACME n'est tenté.

# clusterissuer-letsencrypt-prod.yaml — apply once, after cert-manager is running
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod          # MUST match ingress.tls.clusterIssuer (chart default)
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@yourdomain.com   # a real address — Let's Encrypt emails expiry notices here
    privateKeySecretRef:
      name: letsencrypt-prod-account-key   # cert-manager CREATES this Secret; do not pre-create it
    solvers:
      - http01:
          ingress:
            class: traefik        # must match your ingress controller class
kubectl apply -f clusterissuer-letsencrypt-prod.yaml
kubectl get clusterissuer letsencrypt-prod   # wait for READY=True

privateKeySecretRef.name n'est pas un secret que vous fournissez. cert-manager génère une clé de compte ACME lors de la première réconciliation et la stocke sous ce nom dans le namespace cert-manager. La seule valeur que vous devez fournir est un vrai email.

Pointez le DNS vers l'IP LoadBalancer de Traefik avant de créer un issuer de production. Let's Encrypt valide via HTTP-01 en récupérant http://<your-host>/.well-known/acme-challenge/..., donc le nom d'hôte doit résoudre publiquement vers l'IP d'ingress et le port 80 doit être joignable. Émettre en production avec un DNS incorrect peut déclencher la limite de "5 validations échouées par nom d'hôte par heure". Réduisez le risque avec le serveur staging (https://acme-staging-v02.api.letsencrypt.org/directory, issuer letsencrypt-staging, et ingress.tls.clusterIssuer: letsencrypt-staging), confirmez l'émission, puis passez en production.

Si vous utilisez un autre nom d'issuer, définissez-le dans vos valeurs :

ingress:
  tls:
    enabled: true
    clusterIssuer: my-issuer   # defaults to letsencrypt-prod

3. Vérifier l'émission

kubectl get clusterissuer                  # No resources found here = the cause; go back to step 2
kubectl get certificate -A                 # the chart's cert flips to READY=True
kubectl describe challenge -A              # if stuck: shows the HTTP-01 / DNS error

Vous pouvez aussi fournir vos propres certificats comme Secrets TLS Kubernetes, utiliser un issuer ACME interne ou terminer TLS sur un équilibreur de charge devant le cluster. Voir Certificats TLS et Déchargement TLS.

Sur cette page

Sur cette page