Tous les produits
Search
Centre de documentation

Container Compute Service:Ajouter des annotations pour configurer un serveur DNS personnalisé

Dernière mise à jour :Aug 12, 2026

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 None et renseignez le champ dnsConfig dans 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

  • kubectl configuré pour se connecter au cluster

  • Un 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).
Important

Définissez dnsPolicy selon votre scénario. Le scénario 2 exige dnsPolicy: ClusterFirst.

Déployer une charge de travail de test

  1. Créez un fichier nommé deploy.yaml contenant 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
  2. 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.

Important

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.

Étapes suivantes