Lorsque vos pods doivent résoudre des noms d'hôte non gérés par Alibaba Cloud DNS (domaines de registres d'images privés ou domaines d'applications internes), ajoutez l'annotation network.alibabacloud.com/custom-dnsconfig pour diriger leurs requêtes DNS vers un serveur DNS auto-géré. Cette annotation fusionne vos serveurs de noms personnalisés, domaines de recherche et options dans le fichier /etc/resolv.conf du pod au démarrage, sans remplacer le comportement DNS par défaut du cluster.
Cas d'usage de cette fonctionnalité
Adoptez cette approche dans les situations suivantes :
| Scénario | Politique DNS | Utilisation du DNS personnalisé |
|---|---|---|
| Scénario 1 | Default |
Utilisez acs-profile pour appliquer les paramètres DNS personnalisés à l'ensemble du cluster |
| Scénario 2 | ClusterFirst |
Recourez à un serveur DNS auto-géré pour résoudre les noms de domaine des registres d'images |
| Scénario 3 | Default |
Combinez acs-profile pour le DNS global du cluster avec un serveur DNS auto-géré dédié aux domaines des registres d'images |
Évitez cette méthode dans les cas suivants :
Résolution de tous les domaines par Alibaba Cloud DNS : Appliquez la politique DNS
Default. Aucune configuration de serveur DNS personnalisé n'est nécessaire.Domaines applicatifs sur un DNS auto-géré et domaines de registres d'images sur Alibaba Cloud DNS : Optez pour la politique DNS
Noneet renseignez le champdnsConfigdans la spécification du pod. Consultez Personnaliser les paramètres DNS d'un pod.
Fonctionnement
La valeur de l'annotation respecte la structure Kubernetes standard spec.dnsConfig. Au démarrage d'un pod, ACS lit cette annotation et intègre les paramètres DNS personnalisés au fichier /etc/resolv.conf du pod :
Serveurs de noms : Les serveurs personnalisés sont insérés en tête de liste. Le système ajoute également l'IP du serveur DNS d'Alibaba Cloud (
100.100.2.136) afin que les pods puissent continuer à résoudre les domaines publics.Domaines de recherche et options : Ces éléments fusionnent avec les paramètres de la politique DNS active.
Dans la plupart des cas, privilégiez acs-profile pour appliquer les paramètres DNS à l'échelle du cluster plutôt que d'ajouter des annotations sur chaque pod. Reportez-vous à la section Configuration DNS à l'échelle du cluster .
Configurer un serveur DNS personnalisé pour un pod
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACS
kubectlconfiguré pour se connecter au clusterUn serveur DNS auto-géré ainsi que son adresse IP
Ajouter l'annotation à un pod
Ajoutez l'annotation network.alibabacloud.com/custom-dnsconfig dans la section metadata de la configuration du pod. La valeur de cette annotation est une chaîne JSON :
{
"servers": [
"20.1.xx.xx",
"30.1.xx.xx"
],
"searches": [
"xx.com",
"yy.com"
],
"options": [
"ndots:2",
"edns0"
]
}
| Champ | Type | Limite | Description |
|---|---|---|---|
servers |
[]string |
2 adresses IP maximum ; les entrées supplémentaires sont ignorées | Adresses IP des serveurs DNS personnalisés. Le système les place en tête de la liste des serveurs de noms et ajoute automatiquement l'IP du serveur DNS d'Alibaba Cloud, permettant ainsi aux pods de continuer à résoudre les domaines publics. |
searches |
[]string |
32 domaines de recherche maximum | Domaines ajoutés aux noms d'hôte incomplets avant la résolution. Par exemple, avec searches: ["xx.com"], une requête pour api est résolue en tant que api.xx.com. Ils fusionnent avec les domaines de recherche de la politique DNS active. |
options |
[]string |
— | Options de résolution DNS sous forme de paires clé-valeur. Elles fusionnent avec les options de la politique DNS active. Valeurs courantes : ndots:<n> (nombre minimal de points pour considérer un nom comme absolu), edns0 (active EDNS0 pour des paquets UDP plus volumineux), timeout:<n> (délai d'expiration de la requête en secondes), attempts:<n> (nombre de tentatives de nouvelle requête). |
Définissez dnsPolicy selon votre scénario. Le scénario 2 exige dnsPolicy: ClusterFirst.
Déployer une charge de travail de test
-
Créez un fichier nommé
deploy.yamlcontenant ce qui suit :apiVersion: apps/v1 kind: Deployment metadata: labels: app: test name: test-default spec: replicas: 1 selector: matchLabels: app: test template: metadata: annotations: network.alibabacloud.com/custom-dnsconfig: '{"servers":["20.1.XXX.XXX","30.1.X.X"],"searches":["xx.com","yy.com"],"options":["ndots:2","edns0"]}' labels: app: test spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/busybox:v1.29.2 command: ["sh","-c","i=1; while true; do echo $i; i=$((i=i+1)); sleep 1; done;"] name: busybox resources: requests: cpu: "2" memory: "8Gi" limits: cpu: "2" memory: "8Gi" dnsPolicy: Default -
Appliquez la configuration :
kubectl apply -f deploy.yaml
Vérifier la configuration DNS
Examinez le fichier /etc/resolv.conf du pod pour confirmer la prise en compte des paramètres :
kubectl exec <pod-name> -- cat /etc/resolv.conf
Le résultat attendu est le suivant :
search xx.com yy.com
nameserver 20.1.XXX.XXX
nameserver 30.1.XXX.XXX
nameserver 100.100.2.136
options ndots:6 edns
L'adresse 100.100.2.136 correspond au serveur DNS d'Alibaba Cloud ajouté automatiquement par le système.
Si le pod passe à l'état Pending et signale une erreur interne après l'application de la configuration, vérifiez la validité du JSON de l'annotation et assurez-vous que toutes les valeurs des champs respectent leurs limites.
Configuration DNS à l'échelle du cluster
Pour appliquer des paramètres DNS personnalisés à tous les pods d'un namespace sans ajouter d'annotations individuelles, configurez l'injection automatique via acs-profile.
La ConfigMap acs-profile ci-dessous injecte automatiquement l'annotation DNS personnalisée dans tous les pods du namespace default. Une fois appliquée, les pods nécessitent uniquement dnsPolicy: Default ; aucune annotation n'est requise sur chaque pod.
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
selectors: |
[
{
"name": "selector-demo1",
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "default"
}
},
"effect": {
"annotations": {
"network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"20.1.XXX.XXX\",\"30.1.X.X\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
}
}
}
]
Pour plus de détails sur les sélecteurs et les règles d'injection d'acs-profile, consultez Configurer un acs-profile pour injecter automatiquement des configurations de pod.