单 Pod DNS 记录(`web-0.nginx.default.svc.cluster.local`)排障与启用

Kubernetes Headless Service & StatefulSet


1. 现象

  • Service 类型为 HeadlessclusterIP: 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. 启用步骤

  1. 查看当前配置

    kubectl -n kube-system get cm coredns -o yaml | grep -A5 endpoints
    

    若没有 endpoint_pod_names 字样即未开启。

  2. 编辑 ConfigMap

    kubectl -n kube-system edit cm coredns
    
  3. 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
    }
    
  4. 重启 CoreDNS 使配置生效

    kubectl -n kube-system rollout restart deployment/coredns
    
  5. 验证单 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 立即生效。

posted @ 2025-10-13 18:30  太阳的阳ฅ  阅读(8)  评论(0)    收藏  举报