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 # 外部域名搜索域与补全次数会显著影响解析延迟:域名层级与补全规则不匹配时,每次解析都要多次尝试才能命中,表现为接口偶发变慢。
设为完全自定义后,配置写错会直接导致解析不可用,且不会再回退到默认值。改动前保留一份可用配置,便于快速回滚。