在 Kubernetes 中,DNS 是服务发现的核心机制。服务和 Pod 的 DNS 解析规则如下:
-
服务解析:
- 同一命名空间内的服务可通过
<service-name>
直接访问。 - 跨命名空间需使用完整域名
<service-name>.<namespace>.svc.cluster.local
。 - Headless Service(无头服务)会直接返回 Pod IP 列表,适用于有状态应用。
- 同一命名空间内的服务可通过
-
Pod 解析:
- 默认不直接暴露 Pod DNS,但可通过
pod-ip-address.<namespace>.pod.cluster.local
逆向解析(需启用podSubnetDomain
配置)。 - StatefulSet 的 Pod 拥有固定 DNS 名称
<pod-name>.<service-name>.<namespace>.svc.cluster.local
,适合有状态场景。
- 默认不直接暴露 Pod DNS,但可通过
实践经验:
- 优先依赖 Service 而非 Pod DNS,避免因 Pod 动态调度导致解析失效。
- 检查 CoreDNS 配置(如
kube-system
命名空间下的 ConfigMap),确保上游 DNS 和域名后缀正确。 - 网络策略需放行 UDP/TCP 53 端口以保障 DNS 通信。
- 调试时可进入临时 Pod 执行
nslookup
或dig
命令验证解析逻辑。