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=true2. 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 classkubectl apply -f clusterissuer-letsencrypt-prod.yaml
kubectl get clusterissuer letsencrypt-prod # wait for READY=True
privateKeySecretRef.namen'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 namespacecert-manager. La seule valeur que vous devez fournir est un vrai
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, issuerletsencrypt-staging, etingress.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-prod3. 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 errorVous 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.