Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Políticas de resolução e cache de DNS

Última atualização: Jun 27, 2026

As consultas de DNS no ACK passam pelo CoreDNS e pelo NodeLocal DNSCache, com parâmetros ajustáveis em cada camada.

Arquiteturas de resolução de DNS

A resolução de DNS no ACK depende do local de execução da aplicação e da ativação do NodeLocal DNSCache.

Os parâmetros timeout e attempts nos diagramas estão definidos nas seções Políticas de resolução e Políticas de cache .

Aplicações baseadas em host (não containerizadas)

Aplicações executadas diretamente em instâncias do Elastic Compute Service (ECS) usam o arquivo /etc/resolv.conf do host, que aponta para os servidores DNS da Virtual Private Cloud (VPC).

DNS resolution flow 1

Pods containerizados padrão (dnsPolicy: ClusterFirst)

Por padrão, os pods usam a política ClusterFirst. Todas as consultas de DNS são enviadas ao serviço CoreDNS no cluster.

DNS resolution flow 2

Pods com NodeLocal DNSCache ativado

Quando o NodeLocal DNSCache está ativo, os pods enviam consultas a um agente de cache local no mesmo nó. Isso oferece dois benefícios:

  • Latência reduzida: As consultas de DNS são resolvidas localmente, evitando o salto de rede até o CoreDNS.

  • Proteção da tabela conntrack: As consultas usam o agente local sem criar entradas conntrack. Isso reduz condições de corrida e impede que o DNS via UDP esgote a tabela conntrack.

DNS resolution flow 3

Políticas de resolução

Lado do cliente

O resolvedor glibc interpreta estes parâmetros do arquivo /etc/resolv.conf. Configuração representativa para um pod com política ClusterFirst:

nameserver 10.x.x.x          # CoreDNS ClusterIP
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5 timeout:5 attempts:2

Valores padrão nos diferentes ambientes de implantação:

Parâmetro

Descrição

Valor padrão no glibc

ECS

Pod com DNSPolicy definida como ClusterFirst

Pod com DNSPolicy definida como Default

Pod que usa NodeLocal DNSCache

Pod com DNSPolicy definida como Default e que usa a rede do host

nameserver

Servidor DNS usado para resolver nomes de domínio.

Nenhum

Servidores DNS da VPC

ClusterIP do CoreDNS

Servidores DNS da VPC

  • IP do NodeLocal DNSCache

  • ClusterIP do CoreDNS

Servidores DNS da VPC

search

Nomes de domínio não FQDN recebem o sufixo search para formar um FQDN antes da resolução.

Nenhum

Nenhum

<ns>.svc.cluster.local svc.cluster.local cluster.local

Nenhum

<ns>.svc.cluster.local svc.cluster.local cluster.local

Nenhum

ndots:n

Se um nome de domínio contiver mais pontos do que o valor de ndots, ele será resolvido diretamente como FQDN. Caso contrário, o sufixo de busca é adicionado antes da consulta.

1

1

5

1

3

1

timeout:n

Tempo limite para uma única solicitação de resolução de DNS. Unidade: segundos.

5

2

5

5

1

2

attempts:n

Número máximo de tentativas em caso de falha na resolução.

2

3

2

2

2

3

rotate

Consulta os servidores DNS em sistema de rodízio (round-robin).

Desativado

Ativado

Desativado

Desativado

Desativado

Ativado

single-request-reopen

Quando ativado, o resolvedor reabre o socket entre solicitações consecutivas no mesmo socket.

Desativado

Ativado

Desativado

Desativado

Desativado

Ativado

^①^ O parâmetro attempts aplica-se apenas quando o servidor retorna SERVFAIL, NOTIMP ou REFUSED, ou quando retorna NOERROR sem resultado. Consulte Detalhes da solicitação do parâmetro attempts.

^②^ Os servidores DNS da VPC (100.100.2.136 e 100.100.2.138) são os servidores DNS padrão nas instâncias ECS. Eles resolvem nomes de domínio do PrivateZone e autoritativos.

^③^ O ClusterIP do CoreDNS é o IP do serviço kube-dns no namespace kube-system. Ele resolve nomes de serviços internos e encaminha consultas do PrivateZone e autoritativas.

^④^ O NodeLocal DNSCache escuta no endereço 169.254.20.10 em cada nó quando o add-on é implantado.

Consulte resolv.conf para obter opções adicionais do arquivo /etc/resolv.conf .

Resolvedores não padrão

Os padrões glibc acima aplicam-se apenas quando o container usa glibc. Duas exceções comuns:

  • Alpine (musl libc): A biblioteca musl nativa do Alpine substitui o glibc e tem comportamento diferente (consulte musl libc):

    • Não respeita as opções single-request e single-request-reopen no arquivo /etc/resolv.conf.

    • O Alpine 3.3 e versões anteriores não suportam o parâmetro search nem domínios de busca, o que interrompe a descoberta de serviços.

    • Solicitações simultâneas para vários servidores DNS tornam as otimizações do NodeLocal DNSCache ineficazes.

    • Solicitações A e AAAA simultâneas no mesmo socket provocam condições de corrida no conntrack em kernels mais antigos, causando perda intermitente de pacotes.

  • Linguagens com resolvedores integrados (Go, Node.js): Esses runtimes frequentemente ignoram o arquivo /etc/resolv.conf e resolvem nomes de forma diferente do resolvedor do sistema.

Servidores DNS no cluster

Por padrão, o CoreDNS lê seu upstream do arquivo /etc/resolv.conf do ECS e encaminha solicitações de DNS com o plugin forward integrado. O NodeLocal DNSCache executa uma instância incorporada do CoreDNS com a mesma configuração de encaminhamento.

Parâmetros do plugin forward (referência completa):

Parâmetro

Descrição

Valor padrão do CoreDNS

Valor padrão do NodeLocal DNSCache

prefer_udp

Usa UDP para comunicação com o servidor upstream sempre que possível.

Ativado

Desativado

force_tcp

Força TCP para toda a comunicação com o upstream.

Desativado

Ativado

max_fails

Falhas consecutivas na verificação de integridade antes de marcar o servidor upstream como não íntegro.

2

2

expire

Tempo para manter a conexão com o servidor upstream aberta.

10s

10s

policy

Política para seleção de um servidor upstream.

random

random

health_check

Intervalo da verificação de integridade.

0,5s

0,5s

max_concurrent

Número máximo de conexões simultâneas com o upstream.

Nenhum

Nenhum

dial timeout

Tempo limite para conexão com o servidor upstream. Diminui dinamicamente com base no tempo real de conexão.

30s

30s

read timeout

Tempo limite para recebimento de dados do servidor upstream.

2s

2s

Políticas de cache

Lado do cliente

O cache no lado do cliente varia conforme a imagem do container e a aplicação.

Servidores DNS no cluster

Parâmetros de cache para CoreDNS e NodeLocal DNSCache no ACK:

Parâmetro

Descrição

Padrão da comunidade CoreDNS

Padrão ACK do NodeLocal DNSCache

Padrão ACK do CoreDNS

success Max TTL

Tempo de vida (TTL) máximo para resultados bem-sucedidos em cache.

3600s

30s

30s

success Min TTL

TTL mínimo para resultados bem-sucedidos em cache.

5s

5s

5s

success Capacity

Quantidade de resultados bem-sucedidos a serem armazenados em cache.

9984

9984

9984

denial Max TTL

TTL máximo para resultados com falha em cache.

1800s

5s

30s

denial Min TTL

TTL mínimo para resultados com falha em cache.

5s

5s

5s

denial Capacity

Quantidade de resultados com falha a serem armazenados em cache.

9984

9984

9984

ServerError TTL

TTL aplicado quando o servidor upstream está indisponível.

5s

0s (o padrão é 5s para versões do Helm Chart do NodeLocal DNSCache anteriores a 1.5.0)

0s (o padrão é 5s para versões do CoreDNS anteriores a 1.8.4.2)

serve_stale

Permite que o CoreDNS sirva entradas de cache expiradas quando o upstream estiver inacessível.

Desativado

Ativado (desativado por padrão para versões do Helm Chart do NodeLocal DNSCache anteriores a 1.5.0)

Ativado (desativado por padrão para versões do CoreDNS anteriores a 1.12.1)

Nota

O TTL efetivo é determinado pelo TTL do resultado, Max TTL e Min TTL:

  • Se TTL do Resultado > Max TTL, o TTL efetivo será o Max TTL.

  • Se TTL do Resultado < Min TTL, o TTL efetivo será o Min TTL.

  • Se Min TTL ≤ TTL do Resultado ≤ Max TTL, o TTL efetivo será o TTL do Resultado.

Sugestões de otimização

Ajuste o comportamento do DNS editando o YAML do pod, o ConfigMap do CoreDNS ou o ConfigMap do NodeLocal DNSCache.

Aumentar a tolerância a falhas

Com dnsPolicy: Default, o container herda as configurações dos servidores DNS da VPC do arquivo /etc/resolv.conf do ECS, mas não herda as opções rotate, single-request-reopen, timeout:2 e attempts:3. Sem essas opções, a instabilidade da rede pode causar falhas intermitentes de DNS.

Configuração herdada:

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # The dnsPolicy value in the Pod YAML is Default.
  dnsPolicy: Default

# The /etc/resolv.conf file in the container at this time.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138

Adicione dnsConfig para restaurar as opções de tolerância a falhas ausentes:

apiVersion: v1
kind: Pod
metadata:
  name: example
  namespace: default
spec:
  containers:
  - image: registry.cn-hangzhou.aliyuncs.com/example-ns/example:v1
    name: example
  # The dnsPolicy value in the pod YAML is Default.
  dnsPolicy: Default
  # Add the following fault tolerance configuration.
  dnsConfig:
    options:
    - name: timeout
      value: "2"
    - name: attempts
      value: "3"
    - name: rotate
    - name: single-request-reopen

# After modification, redeploy the pod. The options parameter is added to /etc/resolv.conf in the container.
# cat /etc/resolv.conf
nameserver 100.100.2.136
nameserver 100.100.2.138
options rotate single-request-reopen timeout:2 attempts:3

Alta disponibilidade com serve_stale

A opção serve_stale permite que o CoreDNS retorne entradas de cache expiradas quando os servidores DNS upstream estiverem inacessíveis, evitando falhas de resolução causadas por interrupções transitórias.

A opção serve_stale está ativada por padrão na edição não gerenciada do CoreDNS v1.12.1 e posteriores. Consulte a RFC-8767 .

Formato de configuração

serve_stale [DURATION] [REFRESH_MODE]
  • DURATION: Tempo durante o qual as entradas expiradas permanecem disponíveis após a expiração. Padrão: 1h. Entradas expiradas há mais tempo do que esse valor sem uma atualização bem-sucedida deixam de ser servidas.

  • REFRESH_MODE: Controla como o CoreDNS lida com entradas expiradas:

    • verify: Verifique primeiro a acessibilidade do upstream; retorna a entrada atualizada se disponível ou recorre à entrada expirada. Gera maior latência em respostas obsoletas, mas evita servir dados desatualizados quando existem dados recentes.

    • immediate: Retorna a entrada expirada imediatamente e atualize a partir do upstream em segundo plano. Mais rápido, mas pode servir dados obsoletos.

Exemplo

Configuração padrão na edição não gerenciada do CoreDNS v1.12.1.2 e posteriores:

cache 30 {
  ...
  serve_stale 30s verify
}
Importante

Configuração padrão para a edição não gerenciada do CoreDNS v1.12.1.1-4035d7a99-aliyun:

cache 30 {
  ...
  serve_stale 1h immediate
}

Com serve_stale 1h immediate, em cenários extremos — como resolução de DNS durante uma atualização iterativa de serviço headless — o CoreDNS pode retornar uma entrada expirada. Se isso ocorrer com frequência, alterne para verify.