CoreDNS 解析异常:Kubernetes 集群内 DNS 排查

从 Pod DNS 配置、CoreDNS 日志、上游解析器和 ndots 行为定位集群内解析超时。

文章目录 · 4 节

集群内 DNS 超时会表现为大量不相关服务同时变慢。排查应同时验证客户端配置、CoreDNS 服务和外部上游。

从测试 Pod 开始

kubectl run dns-test --rm -it --image=busybox:1.36 --restart=Never -- sh
cat /etc/resolv.conf
nslookup kubernetes.default.svc.cluster.local
nslookup example.com

内部域名正常而外部失败,重点检查 CoreDNS 上游;两者都失败时检查 Service、Endpoint 和网络策略。

检查 CoreDNS

kubectl get pod,svc,endpoints -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system -l k8s-app=kube-dns --tail=200
kubectl get configmap coredns -n kube-system -o yaml

关注 SERVFAIL、上游超时、循环转发和插件错误。副本 CPU 被限流时也会出现间歇性高延迟。

注意 ndots 放大

默认 ndots:5 会让短外部域名先拼接多个搜索域查询。应用频繁访问外部域名时,使用结尾点号或调整 DNS 策略,避免一次调用产生多次查询。

收尾

为 CoreDNS 建立请求量、返回码、延迟和缓存命中率监控,并对上游 DNS 单独探测。扩容副本前确认瓶颈不是上游限流。