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âmetrostimeouteattemptsnos 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).

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.

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.

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 |
Pod com DNSPolicy definida como |
Pod que usa NodeLocal DNSCache |
Pod com DNSPolicy definida como Default e que usa a rede do host |
|
|
Servidor DNS usado para resolver nomes de domínio. |
Nenhum |
Servidores DNS da VPC② |
ClusterIP do CoreDNS③ |
Servidores DNS da VPC |
|
Servidores DNS da VPC |
|
|
Nomes de domínio não FQDN recebem o sufixo |
Nenhum |
Nenhum |
|
Nenhum |
|
Nenhum |
|
|
Se um nome de domínio contiver mais pontos do que o valor de |
1 |
1 |
5 |
1 |
3 |
1 |
|
|
Tempo limite para uma única solicitação de resolução de DNS. Unidade: segundos. |
5 |
2 |
5 |
5 |
1 |
2 |
|
|
Número máximo de tentativas em caso de falha na resolução. |
2 |
3 |
2 |
2 |
2 |
3 |
|
|
Consulta os servidores DNS em sistema de rodízio (round-robin). |
Desativado |
Ativado |
Desativado |
Desativado |
Desativado |
Ativado |
|
|
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
muslnativa do Alpine substitui o glibc e tem comportamento diferente (consulte musl libc):Não respeita as opções
single-requestesingle-request-reopenno arquivo/etc/resolv.conf.O Alpine 3.3 e versões anteriores não suportam o parâmetro
searchnem 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.confe 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 |
|
|
Usa UDP para comunicação com o servidor upstream sempre que possível. |
Ativado |
Desativado |
|
|
Força TCP para toda a comunicação com o upstream. |
Desativado |
Ativado |
|
|
Falhas consecutivas na verificação de integridade antes de marcar o servidor upstream como não íntegro. |
2 |
2 |
|
|
Tempo para manter a conexão com o servidor upstream aberta. |
10s |
10s |
|
|
Política para seleção de um servidor upstream. |
|
|
|
|
Intervalo da verificação de integridade. |
0,5s |
0,5s |
|
|
Número máximo de conexões simultâneas com o upstream. |
Nenhum |
Nenhum |
|
|
Tempo limite para conexão com o servidor upstream. Diminui dinamicamente com base no tempo real de conexão. |
30s |
30s |
|
|
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) |
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
}
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.