首页/云/Kubernetes 速查/dnsPolicy 与 dnsConfig 定制
网络与服务55 条

dnsPolicy 与 dnsConfig 定制

dnsPolicy 决定 Pod 用哪套解析配置(默认 ClusterFirst);hostNetwork Pod 需要 ClusterFirstWithHostNet;dnsConfig 可追加自定义 nameserver/search。

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

Pod 的解析配置从哪来

每个 Pod 的解析配置由解析策略决定:默认情况下先查集群内部域名,解析不到再交给上游服务器。另有继承节点配置、完全自定义等取值。使用宿主网络的 Pod 需要显式声明专用取值,否则它会直接沿用节点配置,访问集群内部域名会失败。

基本信息

适用平台Kubernetes 1.20+
默认取值优先集群内部解析
可扩展项自定义服务器、搜索域与选项
宿主网络需要专用取值才走集群解析
排查入口对比容器内解析配置文件与另一副本的差异

典型使用场景

  • 使用宿主网络的采集或网络组件需要访问集群内部域名
  • 解析请求需要发往指定专用解析器,不能走上游
  • 调整搜索域与查询选项,解决域名补全导致的解析延迟
  • 排查某类 Pod 解析行为与同类 Pod 不同的问题
  • 跨环境迁移时统一解析入口,减少业务侧改动

解析策略对照

取值行为适用场景
优先集群解析先查集群内部域名,外部走上游默认选择,普通业务 Pod
继承节点配置直接使用节点上的解析配置特殊排查与对照验证
完全自定义不使用任何默认配置,配合自定义项需要指定专用解析器
宿主网络专用宿主网络下仍走集群解析使用了宿主网络的 Pod

自定义解析配置示例

自定义解析配置示例
spec:
  dnsPolicy: None            # 完全自定义,不叠加默认值
  dnsConfig:
    nameservers: ["10.96.0.10"]                        # 指定解析服务器
    searches: ["prod.svc.cluster.local", "svc.cluster.local"]
    options:
      - name: ndots         # 控制域名补全尝试次数
        value: "5"
# 查看结果:kubectl exec web-x -- cat /etc/resolv.conf

排查对比

排查对比
kubectl exec web-x -- cat /etc/resolv.conf             # 解析配置内容
kubectl get pod web-x -o jsonpath='{.spec.dnsPolicy}'   # 策略取值
kubectl exec web-x -- nslookup kubernetes.default       # 集群内部域名
kubectl exec web-x -- nslookup example.com              # 外部域名
搜索域与补全次数会显著影响解析延迟:域名层级与补全规则不匹配时,每次解析都要多次尝试才能命中,表现为接口偶发变慢。
设为完全自定义后,配置写错会直接导致解析不可用,且不会再回退到默认值。改动前保留一份可用配置,便于快速回滚。

易错点

  • 宿主网络 Pod 使用默认策略:沿用节点配置后访问集群内部域名失败
  • 自定义解析服务器地址写错:整个 Pod 的域名解析不可用,业务表现为连接超时
  • 搜索域与域名层级不匹配:解析需要多次尝试,接口延迟明显上升
  • 只改策略不看容器内配置文件:实际生效内容与预期不符,排查方向被带偏

数据来源与参考

  • Kubernetes 官方文档 · Pod DNS 配置(dnsPolicy/dnsConfig)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌