在 Kubernetes 中,DNS 是服务发现的核心机制,通过内置的 DNS 服务(如 CoreDNS 或 kube-dns)实现。以下是关键实践:
-
服务解析:
- 默认情况下,每个 Service 会被分配一个 DNS 记录,格式为
<service-name>.<namespace>.svc.cluster.local
。 - 同一命名空间内的 Pod 可直接通过
<service-name>
访问服务,跨命名空间需使用完整域名。 - Headless Service(无头服务)直接返回 Pod IP,适用于需要直接访问 Pod 的场景。
- 默认情况下,每个 Service 会被分配一个 DNS 记录,格式为
-
Pod 解析:
- 默认不提供 Pod 的 DNS 记录,可通过以下方式启用:
- 为 Pod 配置
hostname
和subdomain
字段,并结合 Headless Service,生成<hostname>.<subdomain>.<namespace>.svc.cluster.local
。 - 使用 StatefulSet 自动生成稳定 DNS 名称,格式为
<pod-name>.<service-name>.<namespace>.svc.cluster.local
。
- 为 Pod 配置
- 默认不提供 Pod 的 DNS 记录,可通过以下方式启用:
-
DNS 策略:
- 通过
dnsPolicy
定义 Pod 的 DNS 配置(如ClusterFirst
优先使用集群 DNS)。 - 自定义
dnsConfig
可覆盖默认设置,例如指定 nameserver 或 search domains。
- 通过
-
故障排查:
- 检查 CoreDNS Pod 状态及日志。
- 验证 Service 和 Endpoint 是否正常。
- 使用
nslookup
或dig
在 Pod 内测试 DNS 解析。
通过合理设计服务和 DNS 规则,可实现灵活且稳定的服务间通信。