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 .include sont intégrés au bloc serveur par défaut .:53.

  • Les fichiers portant l’extension .server cré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 :

  • Assurez-vous que votre cluster :

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.

  1. Créez une ConfigMap nommée coredns-custom contenant une configuration .include :

    Exemple de requête: CUSTOM_DNS_FILE.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coredns-custom
      namespace: kube-system
    data:
      log.include: |
        log

    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
  2. Appliquez la configuration à votre cluster avec la commande suivante :

    Exemple de requête
    $ kubectl apply -f ~/path/to/CUSTOM_DNS_FILE.yaml

    L’activation du logging peut avoir un impact sur les performances des clusters de production si CoreDNS traite un grand nombre de requêtes DNS.

  3. Redémarrez le déploiement CoreDNS pour appliquer la nouvelle configuration :

    Exemple de requête
    $ kubectl rollout restart deployment -n kube-system coredns
    Exemple de résultat
    deployment.apps/coredns restarted
  4. 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 dnstools
    Exemple de résultat
    If 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" deleted

    La commande kubectl run crée un pod temporaire nommé dnstools à l’aide de l’image infoblox/dnstools et 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’invite dnstools#. Depuis ce shell, vous pouvez exécuter des outils DNS tels que host pour tester la résolution DNS au sein du cluster. Lorsque vous quittez le shell, le pod est automatiquement supprimé car l’option --rm a été utilisée.

  5. 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 kubernetes
    Exemple de résultat
    kubernetes.default.svc.cluster.local has address 10.92.0.4

    Pour quitter le conteneur, appuyez sur Ctrl+D ou tapez exit puis appuyez sur Entrée.

  6. 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=coredns
    Exemple de résultat
    maxprocs: 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 :

  • Assurez-vous que votre cluster :

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.

  1. Créez une ConfigMap nommée coredns-custom contenant une configuration .server :

    Exemple de requête: CUSTOM_DNS_FILE.yaml
    apiVersion: 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
  2. Appliquez la configuration à votre cluster avec la commande suivante :

    Exemple de requête
    $ kubectl apply -f CUSTOM_DNS_FILE.yaml
    Exemple de résultat
    configmap/coredns-custom configured
  3. Redémarrez le déploiement CoreDNS pour appliquer la nouvelle configuration :

    Exemple de requête
    $ kubectl rollout restart deployment -n kube-system coredns
    Exemple de résultat
    deployment.apps/coredns restarted
  4. 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=coredns

    Vous devriez voir la nouvelle zone apparaître dans les logs de démarrage :

    Exemple partiel de résultat
    .:53
    example.local.:53
  5. 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 dnstools
    Exemple de résultat
    If 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 run crée un pod temporaire nommé dnstools à l’aide de l’image infoblox/dnstools et 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’invite dnstools#. Depuis ce shell, vous pouvez exécuter des outils DNS tels que host pour tester la résolution DNS au sein du cluster. Lorsque vous quittez le shell, le pod est automatiquement supprimé car l’option --rm a été utilisée.

  6. 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.local
    Exemple de requête
    $ dnstools# host app.example.local
    Exemple de requête
    $ dnstools# host chat.example.local
    Exemple de résultat
    db.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+D ou tapez exit puis 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 :

  1. Supprimez la ConfigMap coredns-custom du namespace kube-system :

    Exemple de requête
    $ kubectl delete configmap -n kube-system coredns-custom
    Exemple de résultat
    configmap "coredns-custom" deleted
  2. Redémarrez le déploiement CoreDNS pour appliquer la modification :

    Exemple de requête
    $ kubectl rollout restart deployment -n kube-system coredns
    Exemple de résultat
    deployment.apps/coredns restarted
  3. 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=coredns
    Exemple partiel de résultat
    [WARNING] No files matching import glob pattern: /custom/.include
    [WARNING] No files matching import glob pattern: /custom/.server
    .:53

    Ces avertissements indiquent qu’aucun fichier de configuration personnalisé n’est chargé, confirmant ainsi que la personnalisation a bien été supprimée.

Pages connexes