Tutoriel : Personnaliser votre configuration CoreDNS
En plus de la configuration CoreDNS par défaut, vous pouvez également personnaliser le comportement DNS de votre cluster en créant une ConfigMap coredns-custom dans le namespace kube-system.
Cette ConfigMap peut contenir plusieurs fichiers de configuration :
-
Les fichiers portant l’extension
.includesont intégrés au bloc serveur par défaut.:53. -
Les fichiers portant l’extension
.servercréent des blocs serveur DNS supplémentaires.
|
Chaque nom de fichier dans la ConfigMap doit être unique. |
Les exemples suivants montrent comment utiliser ces fichiers de configuration pour étendre les fonctionnalités de CoreDNS au sein de votre cluster.
Activer le logging sur le serveur CoreDNS
Avant de commencer :
|
Vous pouvez activer le logging (ou journalisation) des requêtes DNS sur le serveur CoreDNS par défaut en créant un fichier de configuration .include.
-
Créez une ConfigMap nommée
coredns-customcontenant une configuration.include:Exemple de requête: CUSTOM_DNS_FILE.yamlapiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: log.include: | logVous pouvez vérifier les modifications qui seront appliquées à votre cluster en exécutant la commande suivante :
Exemple de requête$ kubectl diff -f ~/path/to/CUSTOM_DNS_FILE.yaml -
Appliquez la configuration à votre cluster avec la commande suivante :
Exemple de requête$ kubectl apply -f ~/path/to/CUSTOM_DNS_FILE.yamlL’activation du logging peut avoir un impact sur les performances des clusters de production si CoreDNS traite un grand nombre de requêtes DNS.
-
Redémarrez le déploiement CoreDNS pour appliquer la nouvelle configuration :
Exemple de requête$ kubectl rollout restart deployment -n kube-system corednsExemple de résultatdeployment.apps/coredns restarted -
Vous pouvez vérifier que le logging fonctionne en démarrant un pod de débogage :
Exemple de requête$ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstoolsExemple de résultatIf you don't see a command prompt, try pressing enter. dnstools# host kubernetes kubernetes.default.svc.cluster.local has address 192.0.2.10 dnstools# E0224 14:01:26.474242 37983 v2.go:104] write on closed stream 0 pod "dnstools" deletedLa commande
kubectl runcrée un pod temporaire nommédnstoolsà l’aide de l’imageinfoblox/dnstoolset y associe un terminal interactif (-it). Une fois le pod démarré, vous êtes connecté au shell à l’intérieur du conteneur : cela est indiqué par l’invitednstools#. Depuis ce shell, vous pouvez exécuter des outils DNS tels quehostpour tester la résolution DNS au sein du cluster. Lorsque vous quittez le shell, le pod est automatiquement supprimé car l’option--rma été utilisée. -
Depuis l’intérieur du pod, lancez une requête DNS pour générer une entrée de log :
Exemple de requête$ dnstools# host kubernetesExemple de résultatkubernetes.default.svc.cluster.local has address 10.92.0.4Pour quitter le conteneur, appuyez sur
Ctrl+Dou tapezexitpuis appuyez sur Entrée. -
Vous pouvez consulter les logs des pods CoreDNS dans un autre terminal pour vérifier que les requêtes DNS sont bien enregistrées :
Exemple de requête$ kubectl logs -f -n kube-system -l k8s-app=corednsExemple de résultatmaxprocs: Updating GOMAXPROCS=1: using minimum allowed GOMAXPROCS [WARNING] No files matching import glob pattern: /custom/*.server .:53 [WARNING] No files matching import glob pattern: /custom/*.server [INFO] plugin/reload: Running configuration SHA512 = cbad7685960d3c9a274156888705ab6a3ecb9b6c1ef0a81930448b0259d443d061c3bcbf8c72e95937899ff6346e44900ca98b9a82f7540ed8f1c482d74a695a CoreDNS-1.14.1 linux/amd64, go1.25.6, 80527fd [INFO] 127.0.0.1:33245 - 40321 "HINFO IN 1556348392293465600.6124538704085000125. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.002928639s [WARNING] No files matching import glob pattern: /custom/*.server [INFO] 10.91.2.213:57441 - 57970 "A IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd 106 0.000139929s [INFO] 10.91.2.213:48137 - 49709 "AAAA IN kubernetes.default.svc.cluster.local. udp 54 false 512" NOERROR qr,aa,rd 147 0.000080541s [WARNING] No files matching import glob pattern: /custom/*.server [WARNING] No files matching import glob pattern: /custom/*.server
Ajouter un domaine personnalisé avec une IP statique
Avant de commencer :
|
Vous pouvez configurer CoreDNS pour qu’il résolve un domaine personnalisé vers une IP statique pour toutes les charges de travail de votre cluster. Dans cet exemple, nous créerons une zone DNS example.local en ajoutant un fichier de configuration .server nommé example-domain.server.
-
Créez une ConfigMap nommée
coredns-customcontenant une configuration.server:Exemple de requête: CUSTOM_DNS_FILE.yamlapiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: log.include: | log example-domain.server: |- # Define a custom DNS zone example.local. { errors forward . /etc/resolv.conf hosts { 192.0.2.10 app.example.local. 192.0.2.11 db.example.local. 192.0.2.12 chat.example.local. fallthrough } }Vous pouvez vérifier les modifications qui seront appliquées à votre cluster en exécutant la commande suivante :
Exemple de requête$ kubectl diff -f ~/path/to/CUSTOM_DNS_FILE.yaml -
Appliquez la configuration à votre cluster avec la commande suivante :
Exemple de requête$ kubectl apply -f CUSTOM_DNS_FILE.yamlExemple de résultatconfigmap/coredns-custom configured -
Redémarrez le déploiement CoreDNS pour appliquer la nouvelle configuration :
Exemple de requête$ kubectl rollout restart deployment -n kube-system corednsExemple de résultatdeployment.apps/coredns restarted -
Vous pouvez vérifier que la nouvelle zone DNS a bien été chargée en consultant les logs de CoreDNS :
Exemple de requête$ kubectl logs -n kube-system -l k8s-app=corednsVous devriez voir la nouvelle zone apparaître dans les logs de démarrage :
Exemple partiel de résultat.:53 example.local.:53 -
Vous pouvez tester la nouvelle résolution de domaine en lançant un pod de débogage :
Exemple de requête$ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstoolsExemple de résultatIf you don't see a command prompt, try pressing enter. dnstools# host kubernetes kubernetes.default.svc.cluster.local has address 192.0.2.10 dnstools# host db.mydom.io db.mydom.io has address 198.51.100.25 dnstools# host myapp.mydom.io myapp.mydom.io has address 203.0.113.45 dnstools# host chat.mydom.io chat.mydom.io has address 192.0.2.78 dnstools#La commande
kubectl runcrée un pod temporaire nommédnstoolsà l’aide de l’imageinfoblox/dnstoolset y associe un terminal interactif (-it). Une fois le pod démarré, vous êtes connecté au shell à l’intérieur du conteneur : cela est indiqué par l’invitednstools#. Depuis ce shell, vous pouvez exécuter des outils DNS tels quehostpour tester la résolution DNS au sein du cluster. Lorsque vous quittez le shell, le pod est automatiquement supprimé car l’option--rma été utilisée. -
Depuis l’intérieur du pod, lancez une requête DNS pour générer une entrée de log :
Exemple de requête$ dnstools# host db.example.localExemple de requête$ dnstools# host app.example.localExemple de requête$ dnstools# host chat.example.localExemple de résultatdb.example.local has address 192.0.2.11 app.example.local has address 192.0.2.10 chat.example.local has address 192.0.2.12-
Pour quitter le conteneur, appuyez sur
Ctrl+Dou tapezexitpuis appuyez sur Entrée. -
Vous pouvez également consulter ces requêtes DNS dans les logs de CoreDNS :
Exemple de requête$ kubectl logs -n kube-system -l k8s-app=coredns -
Supprimer votre configuration personnalisée de CoreDNS
Vous pouvez supprimer votre configuration personnalisée de CoreDNS en supprimant la ConfigMap coredns-custom et en redémarrant CoreDNS :
-
Supprimez la ConfigMap
coredns-customdu namespacekube-system:Exemple de requête$ kubectl delete configmap -n kube-system coredns-customExemple de résultatconfigmap "coredns-custom" deleted -
Redémarrez le déploiement CoreDNS pour appliquer la modification :
Exemple de requête$ kubectl rollout restart deployment -n kube-system corednsExemple de résultatdeployment.apps/coredns restarted -
Vérifiez que la configuration personnalisée a bien été supprimée en consultant les logs de CoreDNS :
Exemple de requête$ kubectl logs -n kube-system -l k8s-app=corednsExemple partiel de résultat[WARNING] No files matching import glob pattern: /custom/.include [WARNING] No files matching import glob pattern: /custom/.server .:53Ces avertissements indiquent qu’aucun fichier de configuration personnalisé n’est chargé, confirmant ainsi que la personnalisation a bien été supprimée.
Pages connexes