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
- Testar a resolução de DNS a partir de um Pod
kubectl exec -it <pod> -n <namespace> -- nslookup kubernetes.default
Para testar o DNS externo:
kubectl exec -it <pod> -n <namespace> -- nslookup google.com
- Verifique os pods do CoreDNS
kubectl get pods -n kube-system | grep coredns
Certifique-se de que todos os Pods do CoreDNS estejam em execução .
- Verifique os logs do CoreDNS
kubectl logs -n kube-system -l k8s-app=kube-dns
ou
kubectl logs -n kube-system deployment/coredns
Procure por erros de inicialização, falhas de encaminhamento ou erros de plugins.
- Verifique o ConfigMap do CoreDNS
kubectl get configmap coredns -n kube-system -o yaml
Verifique se o encaminhamento e a configuração do DNS estão corretos.
- Verifique o cache DNS local do nó (se estiver ativado)
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 (
ClusterFirstpor padrão).
Comandos importantes
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.defaultfalha → 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ó.