Falha na resolução de DNS

Uma falha na resolução de DNS ocorre quando um Pod não consegue resolver nomes de serviços do Kubernetes (como kubernetes.default) ou nomes de domínio externos. Isso geralmente acontece devido a problemas com o CoreDNS, configuração incorreta de DNS ou problemas de rede.

Dica: se um Pod consegue alcançar um endereço IP, mas não consegue resolver um nome de host, o problema provavelmente está relacionado ao DNS e não à conectividade de rede.

Sintomas
  • Os pods não conseguem resolver serviços internos do Kubernetes.
  • As consultas de DNS falham para domínios externos.
  • Os aplicativos não podem se conectar usando nomes de host.
  • Aparecem erros como “Temporary failure in name resolution” ou “Name or service not known”.
Causas comuns
Causa Descrição
Falha no CoreDNS Os pods do CoreDNS estão inativos ou com problemas.
Problema de Rede Os pods não conseguem acessar o serviço CoreDNS.
Erro de Configuração de DNS Configurações incorretas de DNS no ConfigMap ou no Pod do CoreDNS.
Falha no DNS Upstream Servidores DNS externos estão inacessíveis.
Problema no Cache de DNS Local do Node O serviço de cache de DNS local está indisponível (se ativado).
Como diagnosticar
  1. Testar a resolução de DNS a partir de um Pod
BASH
kubectl exec -it <pod> -n <namespace> -- nslookup kubernetes.default

Para testar o DNS externo:

BASH
kubectl exec -it <pod> -n <namespace> -- nslookup google.com
  1. Verifique os pods do CoreDNS
BASH
kubectl get pods -n kube-system | grep coredns

Certifique-se de que todos os Pods do CoreDNS estejam em execução .

  1. Verifique os logs do CoreDNS
BASH
kubectl logs -n kube-system -l k8s-app=kube-dns

ou

BASH
kubectl logs -n kube-system deployment/coredns

Procure por erros de inicialização, falhas de encaminhamento ou erros de plugins.

  1. Verifique o ConfigMap do CoreDNS
BASH
kubectl get configmap coredns -n kube-system -o yaml

Verifique se o encaminhamento e a configuração do DNS estão corretos.

  1. Verifique o cache DNS local do nó (se estiver ativado)
BASH
kubectl get pods -n kube-system | grep node-local

Certifique-se de que os pods do DNSCache NodeLocal estejam íntegros.

Como consertar
  • Reinicie o CoreDNS.
    kubectl rollout restart deployment coredns -n kube-system
  • Valide o ConfigMap do CoreDNS.
  • Corrija problemas de DNS upstream ou de conectividade de rede.
  • Certifique-se de que o NodeLocal DNSCache esteja em execução (se estiver sendo usado).
  • Verificar se os Pods usam a política de DNS correta ( ClusterFirst por padrão).
Comandos importantes
BASH
kubectl exec -it <pod> -n <namespace> -- nslookup kubernetes.default
kubectl exec -it <pod> -n <namespace> -- nslookup google.com

kubectl get pods -n kube-system | grep coredns
kubectl logs -n kube-system deployment/coredns

kubectl get configmap coredns -n kube-system -o yaml

kubectl rollout restart deployment coredns -n kube-system

kubectl get pods -n kube-system | grep node-local
Pontos-chave
  • nslookup kubernetes.default falha → Problema interno do DNS do Kubernetes (CoreDNS).
  • O DNS interno funciona, mas os domínios externos falham → Problema de DNS upstream ou de rede.
  • Os pods do CoreDNS não estão em execução → Reinicie ou solucione problemas na implantação do CoreDNS.
  • O cache DNS local do nó está ativado, mas não está íntegro → as pesquisas de DNS podem falhar mesmo que o CoreDNS esteja íntegro.
  • Sempre solucione problemas nesta ordem: Teste de DNS → Pods do CoreDNS → Logs do CoreDNS → ConfigMap → DNS upstream → Cache de DNS local do nó.

Próximo Artigo Artigo anterior