DNS 原理概述
更新时间:2026-03-11
概述
本文档介绍 CCE 集群中 CoreDNS 的 DNS 解析原理,以及通过 dnsPolicy 为 Pod 自定义 DNS 策略的方法。
在 CCE 集群中,由 CoreDNS 组件为集群中的工作负载提供 DNS 域名解析服务。 CoreDNS 为 CNCF 托管项目,拥有丰富的插件集,可以为集群中的负载提供集群内、集群外公网域名、私有域名等域名解析。
前提条件
- 已创建并可访问目标 CCE 集群。
- 如需查看
kube-dnsService、CoreDNS Pod 或 Pod 内的/etc/resolv.conf,请在可访问集群的环境中安装并配置kubectl。 - 如需验证
dnsPolicy是否生效,请确保具备目标命名空间中 Pod 的创建、查看、删除,以及查看 Pod 日志或进入 Pod 的权限。
DNS 原理说明
CCE 集群中的 CoreDNS 工作负载默认包含 3 个 CoreDNS Pod,并通过名为 kube-dns 的 Service 暴露 DNS 服务。示例如下:
Plain Text
1# kubectl -n kube-system get svc kube-dns
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3kube-dns ClusterIP 172.16.0.10 <none> 53/UDP,53/TCP,9153/TCP 13d
4
5# kubectl -n kube-system get pod | grep coredns
6coredns-5bcb94c99b-2g5fq 1/1 Running 0 12d
7coredns-5bcb94c99b-x4xxk 1/1 Running 0 12d
8coredns-5bcb94c99b-x5kjg 1/1 Running 0 12d
集群中 Pod 内的 DNS 域名解析配置文件 /etc/resolv.conf 内容如下:
Text
1search default.svc.cluster.local svc.cluster.local cluster.local
2nameserver 172.16.0.10
3options ndots:5
参数说明:
search:域名的查找后缀规则。nameserver:DNS 服务器的 IP 地址,这里为kube-dns的 ClusterIP。options:定义域名解析配置文件选项。如果域名中点字符数量大于等于ndots值,则认为是完整域名,将被直接解析;如果小于ndots值,则追加search中指定的后缀依次查询。
因此,Pod 会通过 kube-dns 的 ClusterIP(如 172.16.0.10)请求 CoreDNS Pod,拿到目标 Service 的 ClusterIP,然后对目标 Service 发起请求。
CCE 集群中 DNS 工作原理如下图所示:

通过 dnsPolicy 自定义 DNS 策略
在 CCE 集群中,可以通过 Pod Spec 中的 dnsPolicy 字段逐个 Pod 设定 DNS 策略。当前支持以下策略:
Default:Pod 从运行所在的节点继承名称解析配置,即使用云上 DNS 服务器进行域名解析服务。ClusterFirst:使用 CoreDNS 进行域名解析服务,Pod 内/etc/resolv.conf中的nameserver将指向kube-dnsService 的 ClusterIP。ClusterFirstWithHostNet:对于以hostNetwork方式运行的 Pod,应将其 DNS 策略显式设置为ClusterFirstWithHostNet。否则,以hostNetwork方式和ClusterFirst策略运行的 Pod 会回退至Default策略。None:此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置,Pod 会使用其dnsConfig字段提供的 DNS 设置。
说明:
Default不是默认的 DNS 策略。如果未明确指定dnsPolicy,则默认使用ClusterFirst。如需验证策略是否生效,可在具备集群访问权限的环境中创建测试 Pod,并检查 Pod 的dnsPolicy字段以及/etc/resolv.conf中的nameserver、search、options是否符合预期。
