集群内 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 单独探测。扩容副本前确认瓶颈不是上游限流。