Gestion des URLs
Estimated time to read: 3 minutes
Avant d'installer external-dns, il est nécessaire de créer un ServiceAccount afin de lui donner accès aux différents namespaces pour détecter les nouveaux endpoints à gérer:
ServiceAccount créé
Configuration de external-dns pour CloudFlare
Vous aurez besoin de 2 infos : la clé d'API et le user email référencé par Cloudfare. Ces 2 infos sont stockés dans des variables d'environnement API_KEY & API_MAIL
Elles sont déjà configurées
On est sympa, c'est déjà fait grâce au script exécuté au début du workshop. Si vous avez changer de terminal, 🔐il faut refaire.
Gestion du secret pour accéder à l'API Cloudflare
Il est nécessaire de créer un secret pour stocker l'API key d'accès à Cloudflare et un autre pour le compte de connexion
kubectl -n external-dns create secret generic cloudflare-api-token --from-literal=api-key=$API_KEY
kubectl -n external-dns create secret generic cloudflare-user-mail --from-literal=user-mail=$API_MAIL
On peut vérifier que les secrets sont bien créés et disponibles
Secrets créés
Installation d'external-dns
Pour déployer external-dns, il suffit de créer un Deployment installant l'image officielle d'external-dns
Pour comprendre le manifest:
Documentation officielle Cloudflare
La documentation officielle pour Cloudflare est dispo
external-dns is Running
Vérifier les logs
On peut aussi vérifier que la connexion à Cloudflare est bien ok
External DNS en action
On peut voir dans les logs qu'external-dns a déjà automatiquement détecté notre Ingress précédent:
kubectl logs -f $(kubectl get po -n external-dns | grep external-dns-cloudflare | cut -d' ' -f1) -n external-dns
...
time="2023-12-20T08:52:44Z" level=info msg="Changing record." action=CREATE record=new-deployment.mvt.grunty.uk ttl=1 type=A zone=be73d3e4c087b970da9bb670130a11fc
time="2023-12-20T08:52:45Z" level=info msg="Changing record." action=CREATE record=new-deployment.mvt.grunty.uk ttl=1 type=TXT zone=be73d3e4c087b970da9bb670130a11fc
time="2023-12-20T08:52:45Z" level=info msg="Changing record." action=CREATE record=a-new-deployment.mvt.grunty.uk ttl=1 type=TXT zone=be73d3e4c087b970da9bb670130a11fc
...
On peut vérifier que notre nom de domaine est bien reconnu
DNS est configuré avec notre IP publique
- 🛜 l'IP sera différente
On a changé l'image Docker entre temps
Ne vous étonnez pas si vous ne voyez plus le magnifique cinéma ASCII du départ.
On a changé l'image Docker pour que ce que l'on affiche soit lisible lorsque l'on fait un cUrl
On peut aussi valider que le navigateur reconnait notre URL en visitant http://new-deployment.{votre_trigramme}.grunty.uk/
ou via un cURL comme à l'étape précédente
Server address: 10.2.1.6:80
Server name: new-deployment-5998d8dbcc-kdbrk
Date: 20/Dec/2023:09:45:13 +0000
URI: /
Request ID: 82d85003846eed6c62744103d7ac2bda
C'est beaucoup plus pratique !! 🥳
Mais ... ce n'est pas très sécurisé le HTTP, le chef de brigade de la sécurité nous rappelle à l'ordre 🫣
Si on ajoute quelques mL de sécurité avec des certificats pour notre HTTPs ➡️