Dans les environnements de cloud hybride, le serveur DNS du cluster ne parvient souvent pas à résoudre les noms de domaine internes sur site. Les pods risquent alors d'échouer lors de l'extraction d'images depuis un registre privé ou de l'accès aux services internes. Pour résoudre ce problème, ajoutez l'annotation k8s.aliyun.com/eci-custom-dnsconfig à la spécification de votre pod. Elastic Container Instance (ECI) utilise cette annotation pour acheminer les requêtes DNS via votre serveur DNS interne.
Configurer un serveur DNS personnalisé
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster Kubernetes en cours d'exécution avec un nœud virtuel (ECI activé)
L'adresse IP de votre serveur DNS interne
Ajouter l'annotation à la spécification de votre pod
Ajoutez l'annotation k8s.aliyun.com/eci-custom-dnsconfig au champ metadata.annotations dans le manifeste de votre pod ou de votre Deployment. La valeur de l'annotation est une chaîne JSON contenant les champs suivants :
| Champ | Description |
|---|---|
nameservers |
Adresses IP des serveurs DNS. Le système prend en charge au maximum 2 adresses IP ; il ignore automatiquement les adresses supplémentaires. Le DNS Alibaba Cloud est automatiquement ajouté à la fin pour garantir le bon fonctionnement du système. |
searches |
Domaines de recherche. Le système autorise au maximum 32 domaines de recherche. Lorsqu'une requête utilise un nom de domaine incomplet, le système ajoute successivement chaque suffixe de domaine de recherche et réessaie la résolution. |
options |
Options de résolution DNS sous forme de paires clé-valeur. Options courantes : ndots, edns0, timeout, attempts. |
Le champ options prend en charge les clés suivantes :
ndots: nombre minimal de points qu'un nom doit contenir pour être traité comme un nom de domaine absolu. Les noms contenant moins de points sont d'abord testés avec chaque domaine de recherche.edns0: active l'extension Extension Mechanisms for DNS (EDNS0) pour permettre des paquets UDP plus grands et améliorer la sécurité.timeout: délai d'attente pour chaque requête DNS.attempts: nombre de tentatives en cas d'échec d'une requête DNS.
Le format de la valeur de l'annotation est le suivant :
{"nameservers":"<dns-server-ip-1>,<dns-server-ip-2>","searches":"<domain-1>,<domain-2>","options":"ndots:<n>,edns0"}
L'exemple de configuration Deployment suivant définit deux serveurs de noms personnalisés, deux domaines de recherche, ainsi que les options ndots et edns0 :
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
labels:
app: test
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-test
labels:
app: nginx
alibabacloud.com/eci: "true"
annotations:
k8s.aliyun.com/eci-custom-dnsconfig: "{\"nameservers\":\"20.1.xx.xx,20.1.xx.xx\",\"searches\":\"xx.com,xx.eee\",\"options\":\"ndots:2,edns0\"}"
spec:
dnsPolicy: Default
containers:
- name: nginx
image: registry.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
ports:
- containerPort: 80
Définir dnsPolicy
Définissez dnsPolicy sur Default lors de l'utilisation d'un serveur DNS personnalisé. Avec la valeur Default, le pod hérite de la configuration DNS du nœud sur lequel il s'exécute. Cela préserve le chemin de routage du nœud vers votre serveur DNS interne tout en maintenant intacte la résolution des domaines publics.