Utilisez le paramètre dnsPolicy pour configurer les politiques DNS des pods d'un cluster Container Compute Service (ACS).
Fonctionnement de la résolution DNS dans ACS
Dans un cluster ACS, CoreDNS est déployé sur le cloud. Le cluster s'appuie sur le Service kube-dns pour exposer CoreDNS. Les requêtes DNS des pods sont ainsi transmises au serveur DNS défini dans la configuration du pod CoreDNS. Pour obtenir des détails sur le Service kube-dns, exécutez la commande suivante :
kubectl get svc kube-dns -n kube-system
Pour plus d'informations sur la résolution DNS dans les clusters Kubernetes, consultez Présentation du DNS.
Politiques DNS
Les clusters ACS prennent en charge quatre valeurs pour dnsPolicy :
| Politique | Description |
|---|---|
ClusterFirst |
Par défaut. Achemine les requêtes DNS via CoreDNS. Le fichier /etc/resolv.conf du pod contient l'adresse kube-dns. |
None |
Ignore tous les paramètres DNS du cluster. Requiert un bloc dnsConfig pour définir une configuration DNS personnalisée. Sans dnsConfig, le pod ne peut résoudre aucun nom de domaine. |
Default |
Utilise Alibaba Cloud DNS pour la résolution. CoreDNS n'est pas sollicité. |
ClusterFirstWithHostNet |
Les pods ACS ne prenant pas en charge le réseau hôte, cette politique équivaut à ClusterFirst. Pour plus de détails, consultez Limites des applications Kubernetes. |
Configurer une politique DNS
Utiliser CoreDNS (ClusterFirst)
Définissez dnsPolicy: ClusterFirst pour acheminer les requêtes DNS des pods via le CoreDNS du cluster. Adoptez cette politique lorsque les pods doivent résoudre des Services déployés dans le même cluster ACS.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: ClusterFirst
Vérification : après le démarrage du pod, vérifiez sa configuration DNS :
kubectl exec alpine -- cat /etc/resolv.conf
La sortie doit afficher l'IP de cluster kube-dns comme serveur de noms.
Utiliser une configuration DNS personnalisée (None)
Définissez dnsPolicy: None et ajoutez un bloc dnsConfig pour contrôler intégralement la résolution DNS du pod. Ce mode convient aux pods nécessitant un serveur DNS spécifique externe au cluster.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: None
dnsConfig:
nameservers: ["169.254.xxx.xxx"]
searches:
- default.svc.cluster.local
- svc.cluster.local
- cluster.local
options:
- name: ndots
value: "2"
Champs de dnsConfig :
| Champ | Description |
|---|---|
nameservers |
Adresses IP des serveurs DNS pour le pod. Accepte jusqu'à trois adresses. Si dnsPolicy vaut None, au moins une adresse est requise. Ces adresses fusionnent dans le fichier /etc/resolv.conf du pod, sans doublons. |
searches |
Domaines de recherche DNS pour la résolution des noms d'hôte. Champ facultatif acceptant jusqu'à six domaines. Ces domaines s'ajoutent à la liste de recherche de base générée par la politique DNS, sans doublons. |
options |
Liste d'options du résolveur DNS. Chaque élément comprend un champ name (obligatoire) et une value facultative. Ces options s'intègrent à la liste générée, les doublons étant automatiquement éliminés. |
Vérification : une fois le pod démarré, confirmez la configuration DNS écrite dans le conteneur :
kubectl exec alpine -- cat /etc/resolv.conf
Avec la configuration ci-dessus, la sortie ressemble à ceci :
nameserver 169.254.xxx.xxx
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:2
Pour consulter la spécification complète de dnsConfig, reportez-vous à DNS for Services and Pods.
Utiliser Alibaba Cloud DNS (Default)
Définissez dnsPolicy: Default si les pods n'ont pas besoin d'accéder à d'autres Services du cluster ACS. Alibaba Cloud DNS assure alors la résolution DNS, sans passer par CoreDNS.
apiVersion: v1
kind: Pod
metadata:
name: alpine
namespace: default
spec:
containers:
- image: alpine # Replace with the actual image you use.
command:
- sleep
- "10000"
imagePullPolicy: Always
name: alpine
dnsPolicy: Default
Vérification : après le démarrage du pod, assurez-vous que le serveur de noms pointe vers Alibaba Cloud DNS plutôt que vers kube-dns :
kubectl exec alpine -- cat /etc/resolv.conf