Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:DNS resolution and caching policies

Dernière mise à jour :Aug 11, 2026

Les requêtes DNS d'ACK transitent par CoreDNS et NodeLocal DNSCache, avec des paramètres ajustables à chaque niveau.

Architectures de résolution DNS

La résolution DNS dans ACK dépend de l'emplacement d'exécution de l'application et de l'activation ou non de NodeLocal DNSCache.

Les paramètres timeout et attempts indiqués dans les diagrammes sont définis dans les sections Politiques de résolution et Politiques de mise en cache .

Applications basées sur l'hôte (non conteneurisées)

Les applications s'exécutant directement sur des instances Elastic Compute Service (ECS) utilisent le fichier /etc/resolv.conf de l'hôte, qui pointe vers les serveurs DNS du Virtual Private Cloud (VPC).

DNS resolution flow 1

Pods conteneurisés standard (dnsPolicy: ClusterFirst)

Par défaut, les pods utilisent la politique ClusterFirst. Toutes les requêtes DNS sont envoyées au service CoreDNS au sein du cluster.

DNS resolution flow 2

Pods avec NodeLocal DNSCache activé

Lorsque NodeLocal DNSCache est actif, les pods envoient leurs requêtes à un agent de mise en cache local situé sur le même nœud. Cette approche offre deux avantages :

  • Réduction de la latence : les requêtes DNS sont résolues localement, évitant ainsi le saut réseau vers CoreDNS.

  • Protection de la table conntrack : les requêtes utilisent l'agent local sans créer d'entrées conntrack, ce qui réduit les conflits conntrack et empêche l'épuisement de la table conntrack par le trafic DNS UDP.

DNS resolution flow 3

Politiques de résolution

Côté client

Le résolveur glibc interprète ces paramètres du fichier /etc/resolv.conf. Voici une configuration représentative pour un pod utilisant la politique ClusterFirst :

nameserver 10.x.x.x          # CoreDNS ClusterIP
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5 timeout:5 attempts:2

Valeurs par défaut selon les environnements de déploiement :

Paramètre

Description

Valeur par défaut dans glibc

ECS

Pod avec DNSPolicy défini sur ClusterFirst

Pod avec DNSPolicy défini sur Default

Pod utilisant NodeLocal DNSCache

Pod avec DNSPolicy défini sur Default et utilisant le réseau hôte

nameserver

Serveur DNS utilisé pour résoudre les noms de domaine.

Aucune

Serveurs DNS VPC②

CoreDNS ClusterIP③

Serveurs DNS VPC

  • Adresse IP NodeLocal DNSCache④

  • CoreDNS ClusterIP

Serveurs DNS VPC

search

Le résolveur ajoute le suffixe search aux noms de domaine non qualifiés (non-FQDN) pour former un FQDN avant la résolution.

Aucune

Aucune

<ns>.svc.cluster.local svc.cluster.local cluster.local

Aucune

<ns>.svc.cluster.local svc.cluster.local cluster.local

Aucune

ndots:n

Si un nom de domaine contient plus de points que la valeur ndots, il est résolu directement en tant que FQDN. Sinon, le suffixe de recherche est ajouté avant la requête.

1

1

5

1

3

1

timeout:n

Délai d'attente pour une seule requête de résolution DNS. Unité : secondes.

5

2

5

5

1

2

attempts:n①

Nombre maximal de tentatives en cas d'échec de la résolution.

2

3

2

2

2

3

rotate

Interroge les serveurs DNS selon un algorithme tournant (round-robin).

Désactivé

Activé

Désactivé

Désactivé

Désactivé

Activé

single-request-reopen

Lorsqu'il est activé, le résolveur rouvre le socket entre les requêtes consécutives sur le même socket.

Désactivé

Activé

Désactivé

Désactivé

Désactivé

Activé

^①^ Le paramètre attempts s'applique uniquement lorsque le serveur renvoie SERVFAIL, NOTIMP ou REFUSED, ou renvoie NOERROR sans résultat. Consultez les détails des requêtes du paramètre Attempts.

^②^ Les serveurs DNS VPC (100.100.2.136 et 100.100.2.138) sont les serveurs DNS par défaut sur les instances ECS. Ils résolvent les noms de domaine PrivateZone et autoritatifs.

^③^ L'adresse IP ClusterIP de CoreDNS correspond à l'IP du service kube-dns dans le namespace kube-system. Elle résout les noms de service internes et transfère les requêtes PrivateZone et autoritatives.

^④^ NodeLocal DNSCache écoute sur l'adresse 169.254.20.10 sur chaque nœud lorsque le module complémentaire est déployé.

Consultez la page resolv.conf pour obtenir des informations supplémentaires sur les options du fichier /etc/resolv.conf .

Résolveurs non standards

Les valeurs par défaut glibc ci-dessus s'appliquent uniquement lorsque le conteneur utilise glibc. Deux exceptions courantes existent :

  • Alpine (musl libc) : la bibliothèque intégrée musl d'Alpine remplace glibc et se comporte différemment (voir musl libc) :

    • Ne prend pas en charge les options single-request et single-request-reopen dans le fichier /etc/resolv.conf.

    • Alpine 3.3 et versions antérieures ne prennent pas en charge le paramètre search ni les domaines de recherche, ce qui perturbe la découverte de services.

    • Les requêtes simultanées vers plusieurs serveurs DNS rendent les optimisations de NodeLocal DNSCache inefficaces.

    • Les requêtes A et AAAA simultanées sur le même socket déclenchent des conditions de concurrence conntrack sur les noyaux plus anciens, entraînant des pertes de paquets intermittentes.

  • Langages avec résolveurs intégrés (Go, Node.js) : ces environnements d'exécution contournent souvent le fichier /etc/resolv.conf et effectuent la résolution différemment du résolveur système.

Serveurs DNS intra-cluster

Par défaut, CoreDNS lit son amont à partir du fichier /etc/resolv.conf de l'ECS et transfère les requêtes DNS avec le plugin intégré forward. NodeLocal DNSCache exécute une instance CoreDNS embarquée avec la même configuration de transfert.

Paramètres du plugin forward (référence complète) :

Paramètre

Description

Valeur par défaut CoreDNS

Valeur par défaut NodeLocal DNSCache

prefer_udp

Utilise UDP pour communiquer avec le serveur amont lorsque cela est possible.

Activé

Désactivé

force_tcp

Force l'utilisation de TCP pour toute communication amont.

Désactivé

Activé

max_fails

Nombre d'échecs consécutifs des contrôles d'état avant qu'un serveur amont ne soit marqué comme indisponible.

2

2

expire

Durée pendant laquelle la connexion au serveur amont reste ouverte.

10s

10s

policy

Politique de sélection du serveur amont.

random

random

health_check

Intervalle des contrôles d'état.

0,5s

0,5s

max_concurrent

Nombre maximal de connexions amont simultanées.

Aucune

Aucune

dial timeout

Délai d'attente pour la connexion au serveur amont. Diminue dynamiquement en fonction du temps de connexion réel.

30s

30s

read timeout

Délai d'attente pour la réception des données depuis le serveur amont.

2s

2s

Politiques de mise en cache

Côté client

La mise en cache côté client varie selon l'image du conteneur et l'application.

Serveurs DNS intra-cluster

Paramètres de cache pour CoreDNS et NodeLocal DNSCache dans ACK :

Paramètre

Description

Valeur par défaut communautaire CoreDNS

Valeur par défaut NodeLocal DNSCache ACK

Valeur par défaut CoreDNS ACK

success Max TTL

Durée de vie maximale (TTL) pour les résultats réussis mis en cache.

3600s

30s

30s

success Min TTL

Durée de vie minimale (TTL) pour les résultats réussis mis en cache.

5s

5s

5s

success Capacity

Nombre de résultats réussis à mettre en cache.

9984

9984

9984

denial Max TTL

Durée de vie maximale (TTL) pour les résultats d'échec mis en cache.

1800s

5s

30s

denial Min TTL

Durée de vie minimale (TTL) pour les résultats d'échec mis en cache.

5s

5s

5s

denial Capacity

Nombre de résultats d'échec à mettre en cache.

9984

9984

9984

ServerError TTL

Durée de vie (TTL) lorsque le serveur amont est indisponible.

5s

0s (la valeur par défaut est de 5s pour les versions du chart Helm NodeLocal DNSCache antérieures à la 1.5.0)

0s (la valeur par défaut est de 5s pour les versions de CoreDNS antérieures à la 1.8.4.2)

serve_stale

Permet à CoreDNS de servir des entrées de cache expirées lorsque l'amont est inaccessible.

Désactivé

Activé (désactivé par défaut pour les versions du chart Helm NodeLocal DNSCache antérieures à la 1.5.0)

Activé (désactivé par défaut pour les versions de CoreDNS antérieures à la 1.12.1)

Remarque

La durée de vie (TTL) effective est déterminée par la TTL du résultat, la TTL maximale et la TTL minimale :

  • Si TTL du résultat > TTL max, la TTL effective est la TTL max.

  • Si TTL du résultat < TTL min, la TTL effective est la TTL min.

  • Si TTL min ≤ TTL du résultat ≤ TTL max, la TTL effective est la TTL du résultat.

Suggestions d'optimisation

Ajustez le comportement DNS en modifiant le YAML du pod, la ConfigMap CoreDNS ou la ConfigMap NodeLocal DNSCache.

Améliorer la tolérance aux pannes

Avec la politique dnsPolicy: Default, le conteneur hérite des paramètres du serveur DNS VPC depuis le fichier /etc/resolv.conf de l'ECS, mais pas des options rotate, single-request-reopen, timeout:2 et attempts:3. Sans ces options, les fluctuations réseau peuvent provoquer des échecs DNS intermittents.

Configuration héritée :

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # The dnsPolicy value in the Pod YAML is Default.
  dnsPolicy: Default

# The /etc/resolv.conf file in the container at this time.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138

Ajoutez le champ dnsConfig pour restaurer les options de tolérance aux pannes manquantes :

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # The dnsPolicy value in the pod YAML is Default.
  dnsPolicy: Default
  # Add the following fault tolerance configuration.
  dnsConfig:
    options:
    - name: timeout
      value: "2"
    - name: attempts
      value: "3"
    - name: rotate
    - name: single-request-reopen

# After modification, redeploy the pod. The options parameter is added to /etc/resolv.conf in the container.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138
options rotate single-request-reopen timeout:2 attempts:3

Haute disponibilité avec serve_stale

L'option serve_stale permet à CoreDNS de renvoyer des entrées de cache expirées lorsque les serveurs DNS amont sont injoignables, empêchant ainsi les échecs de résolution lors de pannes transitoires.

L'option serve_stale est activée par défaut dans CoreDNS Unmanaged Edition v1.12.1 et versions ultérieures. Consultez la RFC-8767 .

Format de configuration

serve_stale [DURATION] [REFRESH_MODE]
  • DURATION : durée pendant laquelle les entrées expirées restent servables après leur expiration. Valeur par défaut : 1h. Les entrées expirées depuis plus longtemps sans actualisation réussie ne sont plus servies.

  • REFRESH_MODE : contrôle la manière dont CoreDNS gère les entrées expirées :

    • verify : vérifie d'abord l'accessibilité de l'amont, renvoie l'entrée actualisée si disponible, ou revient à l'entrée expirée. Latence plus élevée pour les réponses obsolètes, mais évite de servir des données périmées lorsque des données fraîches existent.

    • immediate : renvoie immédiatement l'entrée expirée et actualise depuis l'amont en arrière-plan. Plus rapide, mais peut servir des données obsolètes.

Exemple

Configuration par défaut dans CoreDNS Unmanaged Edition v1.12.1.2 et versions ultérieures :

cache 30 {
  ...
  serve_stale 30s verify
}
Important

Configuration par défaut pour CoreDNS Unmanaged Edition v1.12.1.1-4035d7a99-aliyun :

cache 30 {
  ...
  serve_stale 1h immediate
}

Avec l'option serve_stale 1h immediate, dans des scénarios extrêmes — tels que la résolution DNS lors d'une mise à jour itérative d'un service headless — CoreDNS peut renvoyer une entrée expirée. Si cela se produit fréquemment, passez à l'option verify.