Tous les produits
Search
Centre de documentation

Container Compute Service:Configurer des paramètres personnalisés pour CoreDNS managé

Dernière mise à jour :Aug 12, 2026

CoreDNS managé assure la résolution DNS des pods de votre cluster. Par défaut, il résout les services internes du cluster et transfère toutes les autres requêtes vers Alibaba Cloud DNS PrivateZone. Pour router les requêtes de domaines externes vers un serveur DNS amont spécifique ou associer des noms de domaine à des adresses IP statiques, définissez une ressource personnalisée (CR) CustomDNSConfig.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

Fonctionnement

CustomDNSConfig est une définition de ressource personnalisée (CRD) Kubernetes qui permet de configurer le comportement DNS par zone sans modifier directement le Corefile de CoreDNS. Lorsque vous appliquez une CR CustomDNSConfig, le contrôleur CoreDNS managé la lit, génère la configuration Corefile correspondante et recharge automatiquement CoreDNS.

Cette CR prend en charge deux options de configuration par zone :

  • forward : route les requêtes DNS d'une zone vers un ou plusieurs serveurs DNS amont.

  • hosts : associe des noms de domaine à des adresses IP statiques au sein d'une zone.

L'exemple suivant présente la structure complète de la CR :

apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
  name: default
  namespace: default
spec:
  zones:
  - name: example.com
    forward:
      protocolStrategy: ""
      transportConfig: {}
      upstreams:
      - xxx.xxx.xxx.xxx     # IP address
      - xxx.xxx.xxx.xxx:53  # IP:port
    hosts:
    - hostName: "a.example.com"
      ipAddress: xxx.xxx.xxx.xxx

Contraintes principales

Champ Valeur par défaut Contraintes
spec.zones[].name "." (zone par défaut) Nom de domaine entièrement qualifié (FQDN) obligatoire
spec.zones[].forward.protocolStrategy "" (UDP) Définir sur tcp pour utiliser TCP
spec.zones[].forward.transportConfig {} Lecture seule ; non modifiable
spec.zones[].forward.upstreams Bascule vers Alibaba Cloud DNS PrivateZone Format IP ou IP:port, IPv4 uniquement, jusqu'à 15 adresses par zone
spec.zones[].hosts[].hostName — Respect des spécifications de nommage DNS obligatoire
spec.zones[].hosts[].ipAddress — Adresse IPv4 valide obligatoire

Une seule CR par cluster : CustomDNSConfig n'est pas limitée à un namespace. Une seule CR est prise en charge par cluster et elle doit être nommée default. Il s'agit d'une contrainte de conception du contrôleur CoreDNS managé : les CR portant tout autre nom sont rejetées avec le statut NotSupported. Consultez la section Dépannage pour plus de détails.

Ajouter des zones DNS personnalisées

Cette méthode permet de router les requêtes pour des domaines spécifiques vers des serveurs DNS amont dédiés ou d'ajouter des entrées d'hôtes statiques.

  1. Créez un fichier nommé default.yaml avec le contenu suivant :

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: example.com
        forward:
          upstreams:
          - 100.100.2.136  # Upstream DNS servers for example.com
          - 100.100.2.138
      - name: foo.com
        hosts:
        - hostName: "a.foo.com"  # Static IP mappings for foo.com
          ipAddress: 192.168.0.251
        - hostName: "b.foo.com"
          ipAddress: 192.168.0.252

    Cette configuration définit deux zones :

    • example.com : les requêtes sont transférées vers 100.100.2.136 et 100.100.2.138.

      Note: 100.100.2.136 et 100.100.2.138 sont les adresses par défaut du service de résolution DNS interne. Pour plus d'informations, consultez Endpoints .
    • foo.com : a.foo.com est résolu en 192.168.0.251 et b.foo.com en 192.168.0.252.

  2. Appliquez la CR :

    kubectl apply -f default.yaml
  3. Vérifiez la génération du Corefile :

    kubectl get customdnsconfig default -o yaml | grep corefile -A 35 -B 1

    La sortie devrait ressembler à ceci :

     status:
      corefile: |
        example.com:53 {
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
        foo.com:53 {
            prometheus :9153
            hosts {
              192.168.0.251    a.foo.com
              192.168.0.252    b.foo.com
              fallthrough
            }
            forward .  /etc/resolv.conf {
              policy random
              prefer_udp
            }
    ...
        }
    ...
    --
      corefileHash: 41f7be21cf3022c305091665ed33b1e5
      lastTransitionTime: "2024-09-13T09:07:37Z"
      phase: GenerateSuccess

    Le statut phase: GenerateSuccess confirme le traitement de la CR et la mise à jour du Corefile.

Modifier la zone par défaut

Pour remplacer les serveurs DNS amont utilisés pour toutes les requêtes du cluster (zone "."), configurez une zone nommée ".".

  1. Créez un fichier nommé default.yaml avec le contenu suivant :

    apiVersion: networking.alibabacloud.com/v1beta1
    kind: CustomDNSConfig
    metadata:
      name: default
    spec:
      zones:
      - name: .
        forward:
          upstreams:
          - 100.100.2.136  # Custom upstream DNS servers for the default zone
          - 100.100.2.138
  2. Appliquez la CR :

    kubectl apply -f default.yaml
  3. Vérifiez la génération du Corefile :

    kubectl get customdnsconfig default -o yaml | grep corefile -A 35 -B 1

    La sortie devrait ressembler à ceci :

     status:
      corefile: |
        .:53 {
            errors
            health {
              lameduck 20s
            }
            ready
            kubeapi {
              kubeconfig /etc/kubernetes/config/managed-coredns.conf
            }
            k8s_event {
              level error warning
            }
    ...
            prometheus :9153
            forward .  100.100.2.136 100.100.2.138 {
              policy random
              prefer_udp
            }
    ...
        }
      corefileHash: 847bf69cc4c97cee965945f45d17c661
      lastTransitionTime: "2024-09-13T09:54:22Z"
      phase: GenerateSuccess
    Après la création ou la mise à jour d'une CR CustomDNSConfig , CoreDNS recharge sa configuration. Cette opération prend environ 20 secondes par défaut (durée contrôlée par le paramètre lameduck dans le Corefile).

Associer un domaine à plusieurs adresses IP

Une seule entrée hostName peut être associée à plusieurs adresses IP. CoreDNS retourne alors toutes les adresses et le client en sélectionne une :

hosts:
  - hostName: "a.example.com"
    ipAddress: 10.0.0.123
  - hostName: "a.example.com"
    ipAddress: 10.0.0.124

Dépannage

Le statut de la CR indique NotSupported

Une seule CR CustomDNSConfig nommée default est prise en charge par cluster. Si vous créez une CR avec un autre nom, le contrôleur définit son statut sur NotSupported et l'ignore.

Pour reproduire cette erreur, créez une CR nommée test :

apiVersion: networking.alibabacloud.com/v1beta1
kind: CustomDNSConfig
metadata:
  name: test
spec:
  zones:
  - name: example.com
    forward:
      upstreams:
      - 100.100.2.138
  - name: foo.com
    hosts:
    - hostName: "ah.foo.com"
      ipAddress: 1.1.xx.251
    - hostName: "aha.foo.com"
      ipAddress: 1.1.xx.252

Après avoir exécuté kubectl apply -f test.yaml, vérifiez le statut :

kubectl get customdnsconfig

Sortie attendue :

NAME      PHASE             VERSION                            AGE
default   GenerateSuccess   847bf69cc4c97cee96xxxxxxxxxxx      89m
test      NotSupported                                         9s

Pour résoudre ce problème, supprimez la CR mal nommée et appliquez votre configuration en utilisant une CR nommée default.

Consulter les événements de synchronisation

Le contrôleur CoreDNS managé synchronise les événements dans le namespace default. Pour consulter les événements récents :

kubectl get events

Une synchronisation réussie produit une sortie similaire à celle-ci :

LAST SEEN   TYPE     REASON                  OBJECT                           MESSAGE
45m         Normal   CustomDNSConfigSyncOk   customdnsconfig/default          custom dns config sync to coredns configmap success