4.5 KiB
4.5 KiB
Certificat Wildcard avec DNS-01 Challenge
Vue d'ensemble
Le certificat wildcard *.dev.gkdomaine.fr permet de couvrir tous les sous-domaines de l'environnement DEV avec un seul certificat Let's Encrypt.
Configuration
1. ClusterIssuer DNS-01
Le ClusterIssuer letsencrypt-dns01-prod utilise le DNS-01 challenge pour valider le domaine via DNS au lieu de HTTP.
Important : Vous devez configurer votre fournisseur DNS dans cluster-issuer-letsencrypt-dns01.yaml.
2. Certificat Wildcard
Le certificat wildcard-dev-tls couvre :
*.dev.gkdomaine.fr(tous les sous-domaines)dev.gkdomaine.fr(le domaine racine)
Configuration du Fournisseur DNS
Cloudflare (Recommandé)
-
Créez un token API dans Cloudflare :
- Allez dans "My Profile" > "API Tokens"
- Créez un token avec les permissions : Zone DNS:Edit, Zone:Read
-
Créez le Secret Kubernetes :
kubectl create secret generic cloudflare-api-key \
--from-literal=api-key=VOTRE_TOKEN_CLOUDFLARE \
-n certificates-ops
- Décommentez la section Cloudflare dans
cluster-issuer-letsencrypt-dns01.yaml:
solvers:
- dns01:
cloudflare:
email: gkpoubelle78@gmail.com
apiKeySecretRef:
name: cloudflare-api-key
key: api-key
Route53 (AWS)
- Créez un utilisateur IAM avec les permissions Route53
- Configurez les credentials AWS (via IAM Role ou Secret)
- Décommentez la section Route53 dans le ClusterIssuer
OVH
- Créez une application API dans OVH
- Créez un Secret avec les credentials :
kubectl create secret generic ovh-credentials \
--from-literal=application-secret=VOTRE_SECRET \
-n certificates-ops
- Décommentez la section OVH dans le ClusterIssuer
Autres Fournisseurs
Consultez la documentation cert-manager pour votre fournisseur DNS.
Utilisation du Certificat Wildcard
Pour une nouvelle application
Au lieu de créer un certificat spécifique, utilisez directement le secret wildcard-dev-tls dans votre Ingress :
ingress:
enabled: true
className: traefik
host: monapp.dev.gkdomaine.fr
tls:
enabled: true
secretName: wildcard-dev-tls # Utilise le certificat wildcard
Migration des certificats existants
Les applications existantes peuvent être migrées pour utiliser le certificat wildcard :
- Supprimez le certificat spécifique (ex:
homarr-dev-tls) - Mettez à jour l'Ingress pour utiliser
wildcard-dev-tls - Le secret sera synchronisé automatiquement vers le cluster DEV
Avantages
- ✅ Un seul certificat pour tous les sous-domaines DEV
- ✅ Certificat Let's Encrypt valide (pas d'avertissement navigateur)
- ✅ Renouvellement automatique par cert-manager
- ✅ Fonctionne pour les serveurs internes (validation via DNS uniquement)
Inconvénients
- ⚠️ Nécessite un fournisseur DNS compatible avec DNS-01
- ⚠️ Nécessite des credentials API pour votre DNS
- ⚠️ Si le certificat est compromis, tous les sous-domaines le sont aussi
Vérification
# Vérifier le ClusterIssuer
kubectl get clusterissuer letsencrypt-dns01-prod
# Vérifier le certificat wildcard
kubectl get certificate wildcard-dev-tls -n certificates-ops
# Vérifier le secret TLS généré
kubectl get secret wildcard-dev-tls -n certificates-ops
# Voir les détails du certificat
kubectl describe certificate wildcard-dev-tls -n certificates-ops
# Vérifier les challenges DNS
kubectl get challenges -n certificates-ops
Troubleshooting
Le certificat ne se génère pas
- Vérifiez que le ClusterIssuer est configuré correctement :
kubectl describe clusterissuer letsencrypt-dns01-prod
- Vérifiez que le Secret DNS existe :
kubectl get secret cloudflare-api-key -n certificates-ops
- Vérifiez les logs de cert-manager :
kubectl logs -n cert-manager -l app.kubernetes.io/name=cert-manager
Le challenge DNS échoue
- Vérifiez que le domaine est résolvable publiquement :
dig _acme-challenge.dev.gkdomaine.fr TXT
- Vérifiez que les permissions API sont correctes
- Vérifiez les logs des challenges :
kubectl describe challenge -n certificates-ops
Notes Importantes
- Le domaine
dev.gkdomaine.frdoit être résolvable publiquement via DNS - Les serveurs peuvent rester internes (pas besoin d'accès HTTP depuis Internet)
- Le certificat wildcard couvre tous les sous-domaines de
dev.gkdomaine.fr - Le secret
wildcard-dev-tlssera synchronisé automatiquement vers le cluster DEV