Tous les produits
Search
Centre de documentation

Container Compute Service:DNS resolution policies and caching policies

Dernière mise à jour :Aug 12, 2026

Cette rubrique décrit les politiques de résolution du Domain Name System (DNS) et les politiques de mise en cache pour les clusters Alibaba Cloud Container Compute Service (ACS).

Chaînes de résolution DNS

Les diagrammes suivants illustrent la chaîne de résolution DNS pour deux scénarios.

Applications non conteneurisées sur des instances Elastic Compute Service (ECS)

Par exemple, une application nommée App s'exécute sur une instance ECS, comme l'illustre la figure suivante.

DNS解析链路1.png

Applications conteneurisées dans des pods avec la politique DNS ClusterFirst

Par exemple, une application nommée App s'exécute dans un pod au sein d'un cluster Kubernetes, comme l'illustre la figure suivante.

DNS解析链路2.png

Politiques de résolution

Côté client

Les requêtes DNS provenant des pods transitent par les interfaces fournies par glibc. Le fichier /etc/resolv.conf détermine le mode de résolution DNS de glibc. Le tableau suivant répertorie les paramètres configurables et leurs valeurs par défaut selon les environnements.

Paramètre Description Valeur par défaut (glibc) ECS Pod ClusterFirst Pod Default Réseau hôte + Pod Default
nameserver Serveur DNS assurant la résolution des noms de domaine. Aucune Serveurs DNS du VPC ② IP du cluster CoreDNS ③ Serveurs DNS du VPC Serveurs DNS du VPC
search Suffixes ajoutés aux noms de domaine non FQDN avant la résolution. Aucun Aucun <ns>.svc.cluster.local svc.cluster.local cluster.local Aucun Aucun
ndots:n Si un nom de domaine contient moins de points que cette valeur, les suffixes de recherche sont ajoutés avant la résolution. Dans le cas contraire, le nom est considéré comme un nom de domaine entièrement qualifié (FQDN) et résolu directement. 1 1 5 1 1
timeout:n Délai d'expiration pour chaque tentative de résolution DNS, en secondes. 5 2 5 5 2
attempts:n Nombre maximal de tentatives en cas d'échec de la résolution DNS. 2 3 2 2 3
rotate Envoie les requêtes DNS aux serveurs de noms en alternance (round-robin). Désactivé Activé Désactivé Désactivé Activé
single-request-reopen Si deux requêtes DNS empruntent le même socket, ferme ce dernier après la première requête et en ouvre un nouveau pour la seconde. Désactivé Activé Désactivé Désactivé Activé

Le tableau suivant décrit le comportement de routage des requêtes pour chaque politique DNS.

Politique DNS Comportement
ClusterFirst Les requêtes DNS sont envoyées à CoreDNS. Celles qui correspondent au suffixe de domaine du cluster sont résolues par CoreDNS. Toutes les autres requêtes sont transmises aux serveurs de noms upstream. Il s'agit de la politique par défaut lorsque dnsPolicy n'est pas spécifié.
Default Le pod hérite des paramètres DNS de l'instance ECS sur laquelle il s'exécute. Les requêtes DNS sont envoyées directement aux serveurs DNS du VPC, sans passer par CoreDNS.
Remarque

« Default » n'est pas la politique DNS par défaut. Lorsque dnsPolicy n'est pas spécifié, Kubernetes utilise ClusterFirst.

① Le paramètre attempts s'applique uniquement lorsque le serveur retourne SERVFAIL, NOTIMP ou REFUSED, ou lorsqu'un code NOERROR est retourné sans résultat de résolution. Pour plus de détails, consultez Présentation du paramètre attempts.

② Les serveurs DNS du VPC constituent les serveurs de noms par défaut pour les instances ECS dans le Virtual Private Cloud (VPC). Leurs adresses IP sont 100.100.2.136 et 100.100.2.138. Ils résolvent les noms de domaine autoritaires ainsi que les domaines ajoutés à Alibaba Cloud DNS PrivateZone.

③ L'IP du cluster CoreDNS correspond à l'adresse IP du Service kube-dns dans le namespace kube-system. Ce service transfère les requêtes DNS à CoreDNS pour les noms de domaine internes, les domaines autoritaires et les domaines ajoutés à Alibaba Cloud DNS PrivateZone.

Remarque

Pour plus d'informations sur la configuration de resolv.conf, consultez resolv.conf.

Environnements non standard

La configuration DNS côté client décrite ci-dessus s'applique aux environnements utilisant glibc. Les environnements suivants présentent un comportement différent.

Alpine Linux (musl libc)

Alpine Linux remplace glibc par musl libc, ce qui introduit plusieurs différences en matière de résolution DNS :

  • Les options single-request et single-request-reopen ne sont pas prises en charge dans /etc/resolv.conf.

  • Alpine 3.3 et les versions antérieures ne prennent pas en charge le paramètre search pour les domaines de recherche, ce qui entraîne l'échec de la découverte de services.

  • musl libc envoie parallèlement des requêtes à tous les serveurs de noms définis dans /etc/resolv.conf, empêchant ainsi NodeLocal DNSCache d'optimiser la résolution DNS.

  • musl libc transmet simultanément les requêtes A et AAAA sur le même socket. Sur les anciennes versions du noyau, cela provoque une perte de paquets au niveau du port conntrack.

Pour plus d'informations, consultez Différences fonctionnelles entre musl libc et glibc.

Golang et Node.js

Les applications développées avec Golang ou Node.js peuvent utiliser un résolveur DNS intégré plutôt que glibc. Cela peut entraîner des différences significatives dans le comportement de résolution DNS. Vérifiez l'implémentation de la résolution DNS de votre application si vous observez un comportement inattendu.

Serveurs DNS internes du cluster

Par défaut, CoreDNS hérite du fichier /etc/resolv.conf de l'instance ECS qui l'héberge. CoreDNS utilise ensuite le plugin intégré forward pour transmettre les requêtes DNS en amont.

Le tableau suivant répertorie les paramètres du plugin forward ainsi que leurs valeurs par défaut. Pour la référence complète, consultez forward.

Paramètre Description Valeur par défaut (CoreDNS) Valeur par défaut (NodeLocal DNSCache)
prefer_udp Utilise UDP pour communiquer avec le serveur upstream. Activé Désactivé
force_tcp Utilise TCP pour communiquer avec le serveur upstream. Désactivé Activé
max_fails Nombre de vérifications d'état consécutives échouées avant qu'un serveur upstream ne soit considéré comme défaillant. 2 2
expire Durée de maintien de la connexion active avec le serveur upstream. 10s 10s
policy Politique de sélection des serveurs upstream. random random
health_check Intervalle entre les vérifications d'état des serveurs upstream. 0.5s 0.5s
max_concurrent Nombre maximal de requêtes simultanées vers les serveurs upstream. Aucune Aucune
dial timeout Délai de connexion aux serveurs upstream. Diminue dynamiquement en fonction de la durée réelle de connexion. 30s 30s
read timeout Délai d'attente de réponse des serveurs upstream. 2s 2s

Politiques de mise en cache

Côté client

La politique de mise en cache DNS côté client dépend de la configuration du conteneur et de l'application. Configurez la mise en cache côté client selon vos besoins.

Serveurs DNS internes du cluster

CoreDNS utilise le plugin cache pour mettre en cache les résultats de résolution DNS. Le tableau suivant répertorie les paramètres du plugin cache et leurs valeurs par défaut dans ACS.

Paramètre Description Valeur par défaut (CoreDNS) Valeur par défaut (CoreDNS dans ACS)
TTL max succès Durée de vie (TTL) maximale pour les résolutions DNS réussies mises en cache. 3600s 30s
TTL min succès TTL minimale pour les résolutions DNS réussies mises en cache. 5s 5s
Capacité succès Nombre maximal de résultats de résolution DNS réussis à mettre en cache. 9984 9984
TTL max échec TTL maximale pour les résolutions DNS échouées mises en cache. 1800s 30s
TTL min échec TTL minimale pour les résolutions DNS échouées mises en cache. 5s 5s
Capacité échec Nombre maximal de résultats de résolution DNS échoués à mettre en cache. 9984 9984
TTL ServerError TTL maximale pour les résultats DNS retournés par des serveurs upstream défaillants. 5s 0s. Si la version de CoreDNS est antérieure à 1.8.4.2, la valeur par défaut est 5s.
serve_stale Fournit des entrées de cache expirées lorsque le serveur upstream est inaccessible. Désactivé Désactivé
Remarque

La TTL effectivement appliquée à une entrée en cache est déterminée comme suit :

  • Si la TTL de l'enregistrement DNS dépasse la TTL maximale, c'est la TTL maximale qui s'applique.

  • Si la TTL de l'enregistrement DNS est inférieure à la TTL minimale, c'est la TTL minimale qui s'applique.

  • Si la TTL de l'enregistrement DNS se situe entre la TTL minimale et la TTL maximale, c'est la TTL de l'enregistrement DNS qui est utilisée.

Optimisation de la résolution DNS

Modifiez le fichier YAML du pod ou la ConfigMap CoreDNS pour ajuster le comportement de résolution DNS.

Utilisation directe des serveurs DNS du VPC

Définissez dnsPolicy: Default pour contourner CoreDNS et résoudre les noms de domaine directement via les serveurs DNS du VPC. Le pod hérite alors des paramètres DNS de l'instance ECS qui l'héberge.

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Set the dnsPolicy parameter to Default.
  dnsPolicy: Default

# The /etc/resolv.conf file in the pod.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138

Amélioration de la tolérance aux pannes pour les pods Default

Lorsque dnsPolicy: Default est défini, le fichier /etc/resolv.conf du pod omet les options rotate, single-request-reopen, timeout:2 et attempts:3 présentes par défaut sur les instances ECS. En l'absence de ces options, la résolution DNS risque davantage d'échouer lors d'instabilités réseau.

Ajoutez ces options via dnsConfig afin de reproduire le comportement des instances ECS :

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # Set the dnsPolicy parameter to Default.
  dnsPolicy: Default
  # Add the following options.
  dnsConfig:
    options:
    - name: timeout
      value: "2"
    - name: attempts
      value: "3"
    - name: rotate
    - name: single-request-reopen

# After adding the options, redeploy the pod to apply the changes.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138
options rotate single-request-reopen timeout:2 attempts:3