Les charges de travail d'un cluster Kubernetes utilisent le Domain Name System (DNS) pour résoudre les noms de service en adresses IP. Cette rubrique explique le fonctionnement de la résolution DNS dans les clusters Alibaba Cloud Container Compute Service (ACS) et présente CoreDNS, le résolveur DNS par défaut préinstallé dans chaque cluster ACS.
Fonctionnement de la résolution DNS
Lorsque kubelet démarre un pod, il configure ses paramètres DNS à l'aide de deux arguments de démarrage : --cluster-dns=<dns-service-ip> définit l'adresse IP du serveur DNS du cluster, tandis que --cluster-domain=<default-local-domain> spécifie le suffixe de domaine de base.
ACS déploie CoreDNS comme résolveur DNS du cluster. Un Service nommé kube-dns expose CoreDNS à tous les pods du cluster, et deux pods nommés coredns traitent les requêtes de résolution proprement dites.
La configuration DNS de chaque pod est inscrite dans le fichier /etc/resolv.conf :
nameserver 172.xx.x.xx
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
Domaine de recherche
Le champ search permet aux pods de résoudre des noms de service courts sans indiquer de noms de domaine pleinement qualifiés. Par exemple, un pod situé dans le namespace kube-system peut résoudre directement nginx : le résolveur développe automatiquement la requête en nginx.kube-system.svc.cluster.local. Le paramètre options ndots:5 détermine quand ce développement s'applique : si une requête contient moins de 5 points, le résolveur essaie séquentiellement chaque domaine de recherche avant d'effectuer une recherche absolue.
Flux de résolution DNS
Figure 1. Fonctionnement de la résolution DNS 
| Numéro | Description |
|---|---|
| ① | Un pod client tente d'accéder au Service Nginx. Il envoie la requête DNS au nameserver défini dans /etc/resolv.conf, soit 172.21.0.10 dans cet exemple, qui correspond à l'adresse IP du Service kube-dns. CoreDNS résout le nom et retourne 172.21.0.30. |
| ② | Le pod client se connecte à 172.21.0.30, l'adresse IP du Service Nginx. Ce dernier transfère ensuite la requête aux pods backend Nginx-1 et Nginx-2. |
Pour plus de détails sur les options de configuration, consultez Configurer la résolution DNS.
Présentation de CoreDNS
CoreDNS repose sur un système de plug-ins. Chaque plug-in assure une fonction DNS spécifique : résolution des noms de service internes au cluster, transfert des requêtes externes, personnalisation des enregistrements d'hôtes, configuration des enregistrements CNAME ou définition de règles de réécriture. Cette architecture modulaire vous permet d'adapter le comportement DNS aux besoins de vos charges de travail sans modifier le résolveur central.
ACS utilise CoreDNS pour mettre en œuvre la découverte de services au sein des clusters. CoreDNS résout aussi bien les noms de domaine internes (au sein du cluster) que les noms de domaine externes.
CoreDNS est hébergé par la Cloud Native Computing Foundation (CNCF), qui supervise également le projet Kubernetes.
Étapes suivantes
Configurer la résolution DNS : personnalisez les paramètres du fichier
/etc/resolv.confet les politiques DNS de vos pods.Configurer CoreDNS non géré : ajustez les paramètres et les plug-ins de CoreDNS pour votre cluster.