Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Troubleshoot DNS resolution errors

Última atualização: Jun 27, 2026

Diagnostique e corrija falhas de DNS em clusters ACK causadas por problemas no CoreDNS, na rede, em políticas ou no kernel.

Como funciona a resolução de DNS

Quando um pod de aplicação envia uma consulta DNS, ele segue este caminho:

  1. O pod envia uma consulta DNS para o endereço definido em /etc/resolv.conf, geralmente o IP do Service kube-dns.

  2. O kube-dns encaminha a consulta para um pod do CoreDNS no namespace kube-system.

  3. Para nomes de domínio internos terminados em .cluster.local, o CoreDNS resolve a partir do cache, sem consultar servidores upstream.

  4. Para nomes de domínio externos, o CoreDNS encaminha a consulta aos servidores DNS upstream especificados na configuração. Os servidores upstream padrão são 100.100.2.136 e 100.100.2.138, ambos implantados na Virtual Private Cloud (VPC).

Com o NodeLocal DNSCache, as consultas vão primeiro para o cache local (169.254.20.10) e só recorrem ao kube-dns se não houver resolução.

Conceitos principais

Termo

Descrição

Nome de domínio interno

Domínio terminado em .cluster.local. O CoreDNS resolve a partir do cache, não dos servidores upstream.

Nome de domínio externo

Domínio não terminado em .cluster.local. O CoreDNS encaminha para servidores DNS upstream.

Pod de aplicação

Qualquer pod que não seja componente de sistema.

Service kube-dns

Service do Kubernetes que roteia o tráfego DNS para os pods do CoreDNS. Seu IP é o nameserver padrão para pods de aplicação.

NodeLocal DNSCache

DaemonSet que executa um cache DNS local em cada nó. Quando ativado, os pods consultam o cache local (169.254.20.10) em vez do kube-dns.

Servidor DNS upstream

Servidor DNS consultado pelo CoreDNS para domínios externos. O padrão é 100.100.2.136 e 100.100.2.138.

Etapa 1: Identifique a mensagem de erro

Compare a mensagem de erro para determinar a categoria provável da falha.

Cliente

Mensagem de erro

Causa provável

ping

ping: xxx.yyy.zzz: Name or service not known

O domínio não existe ou o servidor DNS está inacessível. Latência >5s indica servidor inacessível.

curl

curl: (6) Could not resolve host: xxx.yyy.zzz

Mesma causa acima.

Cliente HTTP PHP

php_network_getaddresses: getaddrinfo failed: Name or service not known in xxx.php on line yyy

Mesma causa acima.

Cliente HTTP Golang

dial tcp: lookup xxx.yyy.zzz on 100.100.2.136:53: no such host

O domínio não existe.

dig

;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: xxxxx

O domínio não existe.

Cliente HTTP Golang

dial tcp: lookup xxx.yyy.zzz on 100.100.2.139:53: read udp 192.168.0.100:42922->100.100.2.139:53: i/o timeout

Servidor DNS inacessível.

dig

;; connection timed out; no servers could be reached

Servidor DNS inacessível.

Etapa 2: Verifique a política de DNS e o endereço do servidor

Confirme se o pod usa o CoreDNS como servidor DNS.

Obtenha a política de DNS e a configuração:

# View the pod's DNS policy
kubectl get pod <pod-name> -o yaml

# Log in to the pod and inspect the DNS configuration
kubectl exec -it <pod-name> -- cat /etc/resolv.conf

Verifique o campo dnsPolicy e as entradas nameserver no arquivo /etc/resolv.conf.

**Valor de dnsPolicy**

Comportamento

ClusterFirst

Padrão. O pod usa o IP do Service kube-dns como servidor DNS.

ClusterFirstWithHostNet

Igual a ClusterFirst para pods com rede de host.

Default

O pod herda as configurações de DNS do nó Elastic Compute Service (ECS). Use apenas quando o pod não precisar resolver nomes internos do cluster.

None

DNS configurado inteiramente via dnsConfig. O NodeLocal DNSCache usa esta opção para injetar 169.254.20.10 e o IP do kube-dns como nameservers.

Se o pod não usar o CoreDNS (o nameserver não é o IP do Service kube-dns), o pod pode estar sobrecarregado ou a tabela conntrack pode estar cheia. Consulte Cliente sobrecarregado e Tabela conntrack cheia.

Se o pod usar NodeLocal DNSCache (o nameserver é 169.254.20.10), consulte NodeLocal DNSCache não funciona e Nomes do Alibaba Cloud DNS PrivateZone não podem ser resolvidos.

Se o pod usar o CoreDNS, continue para a Etapa 3.

Etapa 3: Verifique a integridade dos pods do CoreDNS

Inspecione os pods do CoreDNS:

# View CoreDNS pod status and placement
kubectl -n kube-system get pod -o wide -l k8s-app=kube-dns

Saída esperada:

NAME                      READY   STATUS    RESTARTS   AGE   IP            NODE
coredns-xxxxxxxxx-xxxxx   1/1     Running   0          25h   172.20.6.53   cn-hangzhou.192.168.0.198
# View real-time CPU and memory usage
kubectl -n kube-system top pod -l k8s-app=kube-dns

Saída esperada:

NAME                      CPU(cores)   MEMORY(bytes)
coredns-xxxxxxxxx-xxxxx   3m           18Mi

Etapa 4: Verifique os logs operacionais do CoreDNS

kubectl -n kube-system logs -f --tail=500 --timestamps <coredns-pod-name>

Flag

Descrição

-f

Transmite a saída do log em tempo real.

--tail=500

Exibe as últimas 500 linhas.

--timestamps

Inclui carimbos de data/hora em cada linha de log.

Procure padrões de erro correspondentes a problemas conhecidos. Para logs no nível de consulta DNS, ative primeiro o plugin de log do CoreDNS. Consulte Configurar resolução de DNS.

Com o plugin de log ativado, cada consulta resolvida gera uma entrada como:

[INFO] 172.20.2.25:44525 - 36259 "A IN redis-master.default.svc.cluster.local. udp 56 false 512" NOERROR qr,aa,rd 110 0.000116946s

Códigos de resposta comuns:

Código de resposta

Significado

Ação recomendada

NOERROR

Resolvido com sucesso.

Nenhuma ação necessária.

NXDOMAIN

O domínio não existe no servidor upstream.

Verifique se o nome de domínio inclui um sufixo de busca que não resolve.

SERVFAIL

O servidor DNS upstream retornou um erro.

Verifique a conectividade do CoreDNS com os servidores upstream.

REFUSED

O servidor upstream rejeitou a consulta.

Verifique a configuração do Corefile do CoreDNS e o arquivo /etc/resolv.conf do nó.

Os códigos de resposta DNS estão definidos na RFC 1035.

Etapa 5: Reproduza o erro e isole a causa

Se o erro ocorrer consistentemente:

  1. Verifique o log de consultas DNS para códigos de resposta de erro. Consulte Nome de domínio externo não pode ser resolvido.

  2. Teste a conectividade de rede entre os pods de aplicação e o CoreDNS. Consulte Testar conectividade de rede entre pods de aplicação e CoreDNS.

  3. Diagnostique a rede de contêineres. Consulte Diagnosticar a rede de contêineres.

Se o erro ocorrer intermitentemente:

Capture pacotes para coletar evidências. Consulte Capturar pacotes.

Se o problema persistir,abra um ticket.

Métodos de diagnóstico

Testar conectividade de rede entre pods de aplicação e CoreDNS

Acesse o namespace de rede do pod de aplicação usando um destes métodos:

  • Método 1 (recomendado): Execute kubectl exec -it <pod-name> -- bash para entrar no pod.

  • Método 2: Faça login no nó, encontre o ID do processo com ps aux | grep <application-process-name> e entre no namespace de rede com nsenter -t <pid> -n bash.

  • Método 3 (para pods que reiniciam frequentemente):

    1. Faça login no nó.

    2. Execute docker ps -a | grep <application-container-name> para encontrar os IDs dos contêineres sandbox (nomes começam com k8s_POD_).

    3. Execute docker inspect <sandboxed-container-ID> | grep netns para encontrar o caminho do namespace de rede em /var/run/docker/netns/xxxx.

    4. Execute nsenter -n bash para entrar no namespace. > Note: Não adicione espaço entre -n e <netns-path>.

A partir do namespace de rede do pod, teste a conectividade:

# Test connectivity to the kube-dns Service
dig <domain> @<kube-dns-svc-ip>

# Test Internet Control Message Protocol (ICMP) connectivity to the CoreDNS pod
ping <coredns-pod-ip>

# Test DNS query directly to the CoreDNS pod
dig <domain> @<coredns-pod-ip>

Substitua <kube-dns-svc-ip> pelo IP do Service kube-dns no namespace kube-system e <coredns-pod-ip> pelo IP de um pod do CoreDNS.

Sintoma Causa provável Próxima etapa
Não é possível alcançar o Service kube-dns Nó sobrecarregado, kube-proxy inativo ou grupo de segurança bloqueando a porta 53 do User Datagram Protocol (UDP) Verifique se as regras do grupo de segurança permitem a porta UDP 53. Se permitirem, abra um ticket.
Não é possível alcançar o pod do CoreDNS (ICMP) Erro na rede de contêineres ou grupo de segurança bloqueando ICMP Diagnostique a rede de contêineres.
Não é possível alcançar o pod do CoreDNS (DNS) Nó sobrecarregado ou grupo de segurança bloqueando a porta UDP 53 Verifique se as regras do grupo de segurança permitem a porta UDP 53. Se permitirem, abra um ticket.

Testar conectividade de rede do CoreDNS

  1. Faça login no nó onde o pod do CoreDNS está em execução.

  2. Execute ps aux | grep coredns para obter o ID do processo do CoreDNS.

  3. Execute nsenter -t <pid> -n bash para entrar no namespace de rede do CoreDNS.

  4. Teste a conectividade:

    # Test connectivity to the Kubernetes API server
    telnet <apiserver_clusterip> 6443  # apiserver_clusterip is the ClusterIP of the kubernetes Service in the default namespace.
    
    # Test connectivity to upstream DNS servers
    dig <domain> @100.100.2.136
    dig <domain> @100.100.2.138
Sintoma Causa provável Próxima etapa
Não é possível alcançar o servidor de API do Kubernetes Erro no servidor de API, nó sobrecarregado ou kube-proxy inativo Abra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticket.
Não é possível alcançar servidores DNS upstream Nó sobrecarregado, CoreDNS mal configurado ou erro de roteamento no Express Connect Abra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticketAbra um ticket.

Diagnosticar a rede de contêineres

  1. Acesse o console ACKconsole ACK.

  2. Na página Clusters, clique no nome do cluster ou em Details na coluna Actions.

  3. No painel de navegação à esquerda, escolha Operations > Cluster Check.

  4. Na página Container Intelligence Service, escolha Cluster Check > Diagnosis.

  5. Na página Diagnosis, clique na aba Network Diagnosis.

  6. Defina Source address como o IP do pod de aplicação, Destination address como o IP do Service kube-dns e Destination port como 53. Selecione Enable packet tracing e I know and agree e clique em Create diagnosis.

  7. Na lista de diagnósticos, clique em Diagnosis details do registro desejado.

Os resultados mostram Diagnosis result, Packet paths e All possible paths, além das causas de erro identificadas. Consulte Usar o recurso de diagnóstico de cluster para solucionar problemas do cluster.

Capturar pacotes

Use a captura de pacotes quando os erros forem intermitentes e difíceis de reproduzir.

  1. Faça login nos nós onde os pods de aplicação e o pod do CoreDNS estão em execução.

  2. Capture o tráfego DNS em cada instância ECS:

    tcpdump -i any port 53 -C 20 -W 200 -w /tmp/client_dns.pcap

    Esse comando captura todo o tráfego na porta 53, alternando entre até 200 arquivos de 20 MB cada.

  3. Reproduza o erro e analise os pacotes da janela de tempo da falha. Verifique os logs da aplicação para obter os carimbos de data/hora exatos.

A captura de pacotes tem impacto insignificante no serviço — apenas um leve aumento na utilização da CPU e na E/S de disco.

Problemas conhecidos

Verifique estes problemas específicos do ambiente antes de investigar mais profundamente.

Problema

Ambientes afetados

Identificação rápida

Consultas simultâneas de registros A e AAAA

Todos (especialmente imagens baseadas em Alpine e aplicações PHP)

Falhas intermitentes; a captura de pacotes mostra consultas A/AAAA simultâneas na mesma porta

Conflitos de porta de origem UDP no IPVS

kube-proxy no modo IP Virtual Server (IPVS); CentOS ou Alibaba Cloud Linux 2 com kernel anterior a 4.19.91-25.1.al7.x86_64

Falhas duram aproximadamente 5 minutos durante o dimensionamento de nós ou do CoreDNS

Tabela conntrack cheia

Nós com alto tráfego

dmesg -H mostra conntrack full; falhas durante horários de pico

Alibaba Cloud DNS PrivateZone com NodeLocal DNSCache

Clusters usando tanto NodeLocal DNSCache quanto DNS PrivateZone

Nomes de domínio do PrivateZone ou vpc-proxy falham na resolução ou resolvem para endereços incorretos

Bug no plugin autopath

Clusters criando contêineres em alta frequência

Nomes externos falham intermitentemente ou resolvem para IPs incorretos; nomes internos geralmente resolvem normalmente, exceto em clusters que criam contêineres em alta frequência, onde nomes de serviços internos também podem resolver para IPs incorretos

Nomes do DNS PrivateZone e vpc-proxy

Clusters onde tanto nomes de domínio internos quanto externos falham

Erros de resolução apenas em nomes de domínio adicionados ao Alibaba Cloud DNS PrivateZone e nomes de domínio que contêm vpc-proxy

Perguntas frequentes

Nome de domínio externo não pode ser resolvido

Verifique o código de resposta no log de consultas do CoreDNS. Ative o plugin de log se ainda não estiver ativado (consulte Configurar resolução de DNS) e pesquise pelo domínio com falha. NXDOMAIN significa que o domínio não existe no upstream — frequentemente porque um sufixo de busca foi anexado, criando um FQDN inválido. SERVFAIL ou REFUSED indica problema no servidor upstream; verifique a configuração do CoreDNS e a conectividade com 100.100.2.136 e 100.100.2.138.

Nomes de domínio de Services headless não podem ser resolvidos

Em versões do CoreDNS anteriores a 1.7.0, instabilidades na rede do servidor de API podem fazer o CoreDNS encerrar, interrompendo as atualizações de registros de Services headless. Atualize para a versão 1.7.0 ou posterior. Consulte [\[Atualizações de Componentes\] Atualizar CoreDNS](t1964489.dita#task_1964489).

Nomes de domínio de pods StatefulSet não podem ser resolvidos

O modelo de pod do StatefulSet deve definir serviceName como o nome do Service headless. Sem isso, nomes DNS por pod (por exemplo, pod.headless-svc.ns.svc.cluster.local) não podem ser resolvidos, mesmo que o nome no nível do Service (por exemplo, headless-svc.ns.svc.cluster.local) funcione. Defina serviceName na especificação do StatefulSet.

Consultas DNS bloqueadas por regras de grupo de segurança ou ACLs de rede

Regras de grupo de segurança ou listas de controle de acesso (ACLs) de rede estão bloqueando a porta UDP 53, causando falhas de DNS nos nós afetados. Permita o tráfego de entrada e saída na porta UDP 53.

Erros de conectividade na rede de contêineres causam falhas de DNS

Erros na rede de contêineres bloqueiam a porta UDP 53. Use o recurso Network Diagnosis para identificar o caminho quebrado e a causa raiz.

Pods do CoreDNS sobrecarregados

Quando o volume de consultas excede a capacidade das réplicas do CoreDNS, a latência aumenta e ocorrem falhas. Verifique se o uso de CPU e memória está próximo do limite (kubectl -n kube-system top pod -l k8s-app=kube-dns).

Duas soluções:

  • Implante o NodeLocal DNSCache para absorver consultas localmente e reduzir a carga no CoreDNS. Consulte Configurar NodeLocal DNSCache.

  • Escale horizontalmente as réplicas do CoreDNS para que a utilização máxima de CPU por pod permaneça bem abaixo da CPU disponível no nó.

Consultas DNS não distribuídas uniformemente entre os pods do CoreDNS

Agendamento desequilibrado de pods ou uma configuração sessionAffinity no kube-dns pode causar distribuição desigual de consultas. Sintoma: utilização de CPU visivelmente diferente entre os pods do CoreDNS.

Duas soluções:

  • Escale horizontalmente os pods do CoreDNS e distribua-os por diferentes nós.

  • Remova a configuração sessionAffinity do Service kube-dns. Consulte Configurar o Service kube-dns.

Pods do CoreDNS não executam normalmente

YAML ou ConfigMap mal configurados podem impedir o início do CoreDNS ou causar falhas. Sintomas: pods não estão em estado Running, contagem de reinicializações aumentando ou erros nos logs.

Verifique o log do CoreDNS para estes erros comuns:

Erro

Causa

Correção

/etc/coredns/Corefile:4 - Error during parsing: Unknown directive 'ready'

O ConfigMap do CoreDNS contém um plugin não suportado pela versão atual.

Exclua o plugin não suportado (ex.: ready) do ConfigMap no namespace kube-system. Repita para outros plugins mencionados no erro.

Failed to watch *v1.Pod: ... connect: connection refused

As conexões com o servidor de API foram interrompidas quando o log foi gerado.

Se não houver falhas de DNS, esta não é a causa raiz. Caso contrário, teste a conectividade do CoreDNS. Consulte Testar conectividade de rede do CoreDNS.

[ERROR] plugin/errors: 2 www.aliyun.com. A: read udp ...->100.100.2.136:53: i/o timeout

O CoreDNS não conseguiu alcançar os servidores DNS upstream.

Teste a conectividade do pod do CoreDNS para 100.100.2.136 e 100.100.2.138.

Falhas na resolução de DNS devido a cliente sobrecarregado

Quando a instância ECS está totalmente carregada, pacotes UDP podem ser descartados antes de chegar ao CoreDNS. Procure por taxa anormal de retransmissão da controladora de interface de rede (NIC) e alta utilização de CPU nos dados de monitoramento.

Duas opções:

Tabela conntrack cheia

Quando a tabela conntrack está cheia, novas conexões UDP e TCP são descartadas. Isso geralmente causa falhas de DNS em horários de pico que se recuperam fora do pico. Para confirmar, execute dmesg -H no nó afetado e procure por conntrack full durante a janela da falha.

Aumente o número máximo de entradas na tabela conntrack. Consulte Como aumento o número máximo de conexões rastreadas na tabela conntrack do kernel Linux?

Plugin autopath não funciona normalmente

Um defeito conhecido no plugin autopath causa falhas ocasionais na resolução ou IPs incorretos para domínios externos. Domínios internos resolvem corretamente. O problema piora em clusters com altas taxas de criação de contêineres.

Desative o plugin autopath:

  1. Edite o ConfigMap do CoreDNS com kubectl -n kube-system edit configmap coredns.

  2. Exclua a linha autopath @kubernetes. Salve e saia.

  3. Verifique se a configuração foi carregada checando os logs do CoreDNS para reload.

Falhas na resolução de DNS devido a consultas simultâneas de registros A e AAAA

Algumas distribuições Linux enviam consultas A e AAAA simultaneamente pela mesma porta, acionando conflitos no conntrack que descartam pacotes UDP.

Sintomas: falhas intermitentes na resolução; a captura de pacotes mostra consultas A e AAAA simultâneas da mesma porta de origem.

As correções dependem da base da sua imagem:

  • CentOS ou Ubuntu: Adicione options timeout:2 attempts:3 rotate single-request-reopen à configuração do resolvedor DNS.

  • Alpine Linux: Substitua a imagem baseada em Alpine por uma baseada em outro SO. Consulte Ressalvas do Alpine.

  • PHP com cURL: Adicione CURL_IPRESOLVE_V4 para forçar resolução apenas IPv4. Consulte Funções cURL.

  • Todos os ambientes: Implante o NodeLocal DNSCache, que mitiga a condição de corrida. Consulte Configurar NodeLocal DNSCache.

Falhas na resolução de DNS devido a erros no IPVS

No modo IPVS com CentOS ou Alibaba Cloud Linux 2 (kernel anterior a 4.19.91-25.1.al7.x86_64), a remoção de pods de backend UDP causa conflitos de porta de origem que descartam pacotes. Falhas de DNS duram cerca de 5 minutos durante eventos de dimensionamento de nós ou do CoreDNS.

Duas soluções:

NodeLocal DNSCache não funciona

As consultas DNS ignoram o NodeLocal DNSCache quando uma das condições se aplica:

  • O dnsConfig não foi injetado nos pods de aplicação, então eles ainda apontam para o IP do Service kube-dns.

  • Os pods usam uma imagem base Alpine Linux, que consulta todos os nameservers simultaneamente, incluindo o CoreDNS diretamente.

Para o primeiro caso, ative a injeção automática de dnsConfig. Consulte Configurar NodeLocal DNSCache. Para imagens Alpine, use uma imagem construída sobre outro SO. Consulte Ressalvas do Alpine.

Nomes do Alibaba Cloud DNS PrivateZone não podem ser resolvidos

O Alibaba Cloud DNS PrivateZone requer UDP, não TCP. Com o NodeLocal DNSCache, domínios do PrivateZone, endpoints de API vpc-proxy ou outros nomes de domínio podem falhar na resolução ou resolver para IPs incorretos.

Adicione prefer_udp à configuração do CoreDNS para forçar UDP nas consultas upstream. Consulte Configurar CoreDNS.

Próximas etapas