单 Pod DNS 记录(`web-0.nginx.default.svc.cluster.local`)排障与启用
Kubernetes Headless Service & StatefulSet
1. 现象
- Service 类型为 Headless(
clusterIP: None) - Endpoint 已列出所有 Pod IP
- Pod 状态 Ready 1/1
- 但仍无法解析
web-0.nginx.default.svc.cluster.local
![image]()
![image]()
2. 根因
CoreDNS 默认 不会 为每个 Pod 生成
<pod-name>.<svc-name>.<ns>.svc.cluster.local
记录,除非显式开启 endpoint_pod_names 插件。
3. 启用步骤
-
查看当前配置
kubectl -n kube-system get cm coredns -o yaml | grep -A5 endpoints若没有
endpoint_pod_names字样即未开启。 -
编辑 ConfigMap
kubectl -n kube-system edit cm coredns -
在
kubernetes插件段增加一行
修改前kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa }修改后
kubernetes cluster.local in-addr.arpa ip6.arpa { endpoint_pod_names # ← 新增 pods insecure fallthrough in-addr.arpa ip6.arpa } -
重启 CoreDNS 使配置生效
kubectl -n kube-system rollout restart deployment/coredns -
验证单 Pod 域名
kubectl run tmp --image=busybox:1.28 -it --rm -- \ nslookup web-0.nginx.default.svc.cluster.local应返回 web-0 对应 Pod IP。
![image]()
4. 结果
| 查询域名 | 返回内容 | 条件 |
|---|---|---|
nginx.default.svc.cluster.local |
全部 Pod IP 列表 | 默认支持 |
web-0.nginx.default.svc.cluster.local |
单个 Pod IP | 需 endpoint_pod_names |
5. 一句话总结
“Headless + StatefulSet 拼对域名却 NXDOMAIN” → 100% 缺
endpoint_pod_names;
给 CoreDNS 加上它、重启,单 Pod DNS 立即生效。




浙公网安备 33010602011771号