Todos os produtos
Search
Central de documentação

Container Compute Service:Adicionar anotações para configurar um servidor DNS personalizado

Última atualização: Jun 29, 2026

Se os pods precisarem resolver nomes de host fora do Alibaba Cloud DNS — como domínios de registro de imagens privadas ou de aplicações internas — adicione a anotação network.alibabacloud.com/custom-dnsconfig para direcionar as consultas DNS a um servidor DNS auto-gerenciado. Essa anotação mescla nameservers personalizados, domínios de busca e opções no arquivo /etc/resolv.conf do pod durante a inicialização, sem substituir o comportamento padrão de DNS do cluster.

Quando usar este recurso

Use esta abordagem nos seguintes cenários:

Cenário

Política de DNS

Uso de DNS personalizado

Cenário 1

Default

Use acs-profile para aplicar configurações personalizadas de DNS em todo o cluster

Cenário 2

ClusterFirst

Use um servidor DNS auto-gerenciado para resolver nomes de domínio do registro de imagens

Cenário 3

Default

Use acs-profile para DNS em todo o cluster e um servidor DNS auto-gerenciado para domínios de registro de imagens

Não use esta abordagem nas situações abaixo:

  • Todos os domínios resolvidos pelo Alibaba Cloud DNS: Use a política de DNS Default. Não configure servidores DNS personalizados.

  • Domínios de aplicação em DNS auto-gerenciado e domínios de registro de imagens no Alibaba Cloud DNS: Defina a política de DNS como None e especifique o campo dnsConfig na especificação do pod. Consulte Personalizar configurações de DNS para um pod.

Como funciona

O valor da anotação segue a estrutura padrão spec.dnsConfig do Kubernetes. Na inicialização do pod, o ACS lê a anotação e integra as configurações personalizadas de DNS ao arquivo /etc/resolv.conf do pod:

  • Nameservers: O sistema insere os nameservers personalizados no início da lista e acrescenta o IP do servidor Alibaba Cloud DNS (100.100.2.136) para que os pods continuem resolvendo domínios públicos.

  • Domínios de busca e opções: O sistema combina esses itens com as definições da política de DNS ativa.

Na maioria dos casos, prefira usar acs-profile para aplicar configurações de DNS em todo o cluster em vez de adicionar anotações a pods individuais. Consulte Configuração de DNS em todo o cluster .

Configure um servidor DNS personalizado para um pod

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster ACS

  • kubectl configurado para conexão com o cluster

  • Um servidor DNS auto-gerenciado e seu endereço ip

Adicionar a anotação a um pod

Adicione a anotação network.alibabacloud.com/custom-dnsconfig à seção metadata da configuração do pod. O valor da anotação é uma string JSON:

{
    "servers": [
        "20.1.xx.xx",
        "30.1.xx.xx"
    ],
    "searches": [
        "xx.com",
        "yy.com"
    ],
    "options": [
        "ndots:2",
        "edns0"
    ]
}

Campo

Tipo

Limite

Descrição

servers

[]string

Máximo de 2 endereços IP; os excedentes são ignorados

Endereços IP dos servidores DNS personalizados. O sistema insere esses endereços no início da lista de nameservers e adiciona automaticamente o IP do servidor Alibaba Cloud DNS, permitindo que os pods ainda resolvam domínios públicos.

searches

[]string

Até 32 domínios de busca

Domínios de busca anexados a nomes de host incompletos antes da resolução. Por exemplo, com searches: ["xx.com"], uma consulta por api é resolvida como api.xx.com. O sistema mescla esses domínios aos domínios de busca da política de DNS ativa.

options

[]string

Opções de resolução DNS como pares chave-valor. O sistema combina essas opções com as da política de DNS ativa. Valores comuns: ndots:<n> (mínimo de pontos para tratar um nome como absoluto), edns0 (habilita EDNS0 para pacotes UDP maiores), timeout:<n> (tempo limite de consulta em segundos), attempts:<n> (número de tentativas de repetição).

Importante

Defina dnsPolicy de acordo com o cenário. O Cenário 2 exige dnsPolicy: ClusterFirst.

Implantar uma carga de trabalho de teste

  1. Crie um arquivo chamado deploy.yaml com o seguinte conteúdo:

    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. Aplique a configuração:

    kubectl apply -f deploy.yaml

Verifique a configuração de DNS

Verifique o arquivo /etc/resolv.conf do pod para confirmar se as configurações foram aplicadas corretamente:

kubectl exec <pod-name> -- cat /etc/resolv.conf

A saída esperada é:

search xx.com yy.com
nameserver 20.1.XXX.XXX
nameserver 30.1.XXX.XXX
nameserver 100.100.2.136
options ndots:6 edns

O endereço 100.100.2.136 corresponde ao servidor Alibaba Cloud DNS adicionado automaticamente pelo sistema.

Importante

Se o pod entrar no estado Pending e reportar um erro interno após a aplicação da configuração, valide se o JSON da anotação está correto e se todos os valores dos campos respeitam os limites estabelecidos.

Configuração de DNS em todo o cluster

Para aplicar configurações personalizadas de DNS a todos os pods de um namespace sem adicionar anotações individuais, configure a injeção automática de pods por meio do acs-profile.

O ConfigMap acs-profile a seguir injeta automaticamente a anotação de DNS personalizado em todos os pods do namespace default. Após a aplicação, os pods precisam apenas de dnsPolicy: Default — nenhuma anotação é necessária em cada 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\"]}"
          }
        }
      }
    ]

Para obter detalhes completos sobre seletores e regras de injeção do acs-profile, consulte Configurar um acs-profile para injetar automaticamente configurações de pod.

Próximos passos