Créer un certificat Let's Encrypt avec un challenge DNS dans Kubernetes avec cert-manager
Afin de créer un certificat, le protocole ACME propose de vérifier votre domaine par l'échange d'une information secrète.
Par défaut, cet échange est fait par HTTP, mais il peut être fait par DNS, et DNS est imposé pour la création d'un certificat wildcard (certificat pour tous les sous domaines d'un domaine) ou pour créer un certificat pour un nom de domaine qui ne sera pas publié sur internet.
Pour utiliser le challenge DNS entre Let's Encrypt et les serveurs DNS de LeBureau.coop, vous devez obtenir une clef TSIG en la demandant à notre support.
Vous devrez commencer par définir le contenu de la clef dans un fichier tenu secret, que nous nommerons secret.yaml par souci de clarté :
apiVersion: v1
kind: Secret
metadata:
name: example-com-tsig-key
namespace: cert-manager
type: Opaque
stringData:
secret: 4q4wM/2I180UXoMyN4INVhJNi8V9BCV+jMw2mXgZw/CSuxUT8C7NKKFs AmKd7ak51vWKgSl12ib86oQRPkpDjg==
Ensuite, il faut configurer cert-manager dans le fichier issuers.yaml :
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: <email_du_compte_lets_encrypt>
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- selector:
dnsZones:
- example.com
dns01:
rfc2136:
# nameserver: 45.13.107.8:53
nameserver: 78.196.218.87:53
tsigKeyName: lebureau_coop_example_com.
tsigAlgorithm: HMACSHA512
tsigSecretSecretRef:
name: example-com-tsig-key
key: secret
- http01:
ingress:
ingressClassName: traefik
Pour terminer, il faut appliquer cette configuration avec kubectl apply -f issuers.yaml