首页/云/Kubernetes 速查/CoreDNS 服务发现与 DNS 命名规则
网络与服务55 条

CoreDNS 服务发现与 DNS 命名规则

集群 DNS 为 Service 与 Pod 提供解析:<svc>.<ns> 短名、FQDN、Headless 的 Pod 级记录;写访问地址与排查解析问题都要用这些规则。

Kubernetes 速查云更新于 2026-10-13

集群 DNS 是什么

集群 DNS 是 Kubernetes 内部的服务发现机制:为每个服务分配可解析的域名,为无头服务下的每个实例分配独立的域名,也能按地址格式反查 Pod。集群里所有 Pod 的解析请求默认都指向它,因此服务之间通过名字互相访问成为常态,不需要把地址写进配置。

短名为什么有时能用

Pod 的解析配置里带有一串搜索域,写短名时会按顺序自动补全:先补当前命名空间,再补服务域的上级,最后才用节点上的搜索域。所以同一个名字在不同命名空间里可能解析到不同服务,跨命名空间访问必须写完整的「服务名.命名空间」。理解这个补全顺序,才能解释「明明有服务却解析不到」。

基本信息

适用环境任何 Kubernetes 发行版,默认由集群 DNS 组件提供
默认域名cluster.local,可在集群初始化时配置
解析对象服务、无头服务的实例、按地址格式表示的 Pod
客户端配置Pod 的解析文件由 kubelet 写入,含搜索域与上游服务器
依赖组件集群 DNS 组件本身以工作负载形式运行,也需要健康检查
权限要求普通 Pod 即可发起解析,无需额外权限

典型使用场景

  • 服务互访:应用配置里只写服务名,Pod 重建后不用改配置
  • 跨命名空间调用:用「服务名.命名空间」写法明确指向目标
  • 有状态服务寻址:通过无头服务拿到某个具体实例的地址
  • 按地址反查 Pod:用地址格式域名定位某个地址属于哪个 Pod
  • 排查解析问题:在容器内验证解析结果,区分是 DNS 还是网络问题
  • 控制解析行为:通过 Pod 的解析策略调整短名补全或直接使用上游域名

记录形式

名称形式解析结果用途
服务名.命名空间.svc.cluster.local服务的虚拟地址跨命名空间访问服务的完整写法
服务名(同命名空间)服务的虚拟地址靠搜索域补全的短名写法
实例名.无头服务名.命名空间.svc.cluster.local该实例的 Pod 地址有状态服务定位单个成员
按地址格式的 Pod 域名Pod 地址由地址反查归属的 Pod

验证命令

验证命令
kubectl exec -it web-x -- nslookup kubernetes.default        # 基础连通性
kubectl exec -it web-x -- nslookup web.prod                   # 跨命名空间解析
kubectl exec -it web-x -- nslookup db-1.db-headless.prod      # 实例级解析
kubectl exec -it web-x -- cat /etc/resolv.conf                # 看搜索域与上游
kubectl -n kube-system get pods -l k8s-app=kube-dns           # DNS 组件是否就绪
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50     # DNS 组件日志

解析失败时的排查顺序

  • 先在目标 Pod 内确认解析文件里的上游地址与搜索域是否符合预期
  • 确认集群 DNS 组件本身是否处于就绪状态,组件挂掉时全局解析都会失败
  • 确认目标服务是否存在、是否在预期命名空间、端点是否为空
  • 检查网络策略是否放行了解析请求,策略生效的集群里 DNS 流量也需要显式放行
短名只能解析当前命名空间里的服务,跨命名空间必须写「服务名.命名空间」,这是排查时最容易踩的一处。
完整域名结尾带点可以跳过搜索域补全,减少无效解析尝试,在高频调用路径上有实际收益。
集群 DNS 组件也是普通工作负载,它自己的副本数、资源请求与探针配置同样会影响解析稳定性。

易错点

  • 跨命名空间只写短名:解析不到或解析到同名的另一个服务,出现连错库这类严重问题
  • 把解析成功等同于端口可达:名字能解析只说明服务存在,端口被策略拦截或应用没监听仍会失败
  • 忽略搜索域带来的解析尝试次数:短名可能触发多次上游查询,高频调用会放大解析压力
  • 集群 DNS 组件资源请求过低:解析量上来后被节流甚至重启,全集群出现间歇性解析超时
  • 排查时只看应用日志:应同时在容器内验证解析与端口连通,否则容易在错误方向上花时间

数据来源与参考

  • Kubernetes 官方文档 · DNS for Services and Pods
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌