当前位置: 首页 > news >正文

Kubernetes Pod DNS 配置

一、概述

Kubernetes 提供多种 DNS 策略(dnsPolicy),同时 kubelet 参数也影响最终的 DNS 行为。


二、dnsPolicy 策略说明

dnsPolicy含义说明
Default使用宿主机的 DNS 配置(kubelet 的 --resolv-conf
ClusterFirst优先使用集群 DNS(如 CoreDNS),仅在无法解析时退回宿主机 DNS(默认策略
ClusterFirstWithHostNetClusterFirst 类似,但适用于 hostNetwork: true 的 Pod,需要显式设置
None不自动配置 DNS,需用户通过 dnsConfig 自定义

三、kubelet 与 DNS 的关系

Kubelet 决定了 Pod 的 DNS 配置来源:

kubelet 参数含义
--cluster-dns=<IP>指定 CoreDNS 的 ClusterIP,供 ClusterFirst* 策略使用
--cluster-domain设置集群内服务搜索域(默认是 cluster.local
--resolv-conf=<file>指定当 dnsPolicy: Default 时使用的宿主机 DNS 配置(默认是 /etc/resolv.conf

kubelet 构造行为:

dnsPolicy/etc/resolv.conf 来源
Default拷贝 --resolv-conf 文件
ClusterFirst使用 --cluster-dns + --cluster-domain 构造
ClusterFirstWithHostNet同上,但用于 hostNetwork: true 的场景
None + dnsConfig用户手动定义

四、ndots 配置解释

/etc/resolv.conf 中常见如下配置:

options ndots:5

含义:

如果一个域名中 . 的数量 < ndots,则认为它是 不完整的域名,需要加上 search 域后再尝试解析。

举例:

  • 配置:

    search default.svc.cluster.local svc.cluster.local cluster.local
    options ndots:5
    
  • 执行 ping my-service,尝试解析的顺序为:

    my-service.default.svc.cluster.local
    my-service.svc.cluster.local
    my-service.cluster.local
    

注意事项:

  • ndots 值大时,公网域名解析会多次失败(浪费时间)

  • 访问公网域名建议写为 curl www.google.com.(末尾加 .


五、特殊场景说明

1. Pod 使用 hostNetwork: true 时 DNS 问题

  • 默认降级为 dnsPolicy: Default,即使用宿主机 DNS,可能无法解析 *.svc.cluster.local

  • 解决方案:

    hostNetwork: true
    dnsPolicy: ClusterFirstWithHostNet
    

    强制构造 Pod 的 DNS 为集群 DNS


六、实用排查命令

  • 查看 Pod 实际 DNS 配置:

    kubectl exec <pod> -- cat /etc/resolv.conf
    
  • 查看 CoreDNS 是否正常:

    kubectl get svc -n kube-system kube-dns
    kubectl logs -n kube-system -l k8s-app=kube-dns
    
  • 验证域名解析是否正确:

    kubectl exec <pod> -- nslookup my-service.default.svc.cluster.local
    

七、最佳实践建议

场景建议配置
常规集群服务解析默认使用 ClusterFirst
边车 / Agent 使用 hostNetwork使用 ClusterFirstWithHostNet
容器只需访问公网(不需要访问 Service)可以用 dnsPolicy: Default
完全自定义 DNS 配置设置 dnsPolicy: None 并配置 dnsConfig

八、配置示例

示例:hostNetwork + 使用集群 DNS

apiVersion: v1
kind: Pod
metadata:name: example
spec:hostNetwork: truednsPolicy: ClusterFirstWithHostNetcontainers:- name: nginximage: nginx

九、参考链接

  • Kubernetes 官方文档:DNS for Services and Pods | Kubernetes

  • CoreDNS 文档:CoreDNS: DNS and Service Discovery

http://www.lqws.cn/news/132607.html

相关文章:

  • 2025年计算机科学与网络安全国际会议(CSNS 2025)
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • 区块链跨链通信:使用 Cosmos SDK 实现链间互操作
  • Modbus转EtherNET IP网关开启节能改造新范式
  • Mermaid 绘图--以企业权限视图为例
  • Cursor 工具项目构建指南: Web Vue-Element UI 环境下的 Prompt Rules 约束(new Vue 方式)
  • 如何在mac上安装podman
  • 核心线程池大小如何设置?
  • 基于LangChain构建高效RAG问答系统:向量检索与LLM集成实战
  • 实践篇:利用ragas在自己RAG上实现LLM评估②
  • 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
  • 【vibe coding解决100个问题】开发CRM管理系统, Augment/windsurf/bolt.new哪家强?
  • 【论文写作】如何撰写基于模型拼接(A+B)的创新性论文
  • 论文导读 | 动态图存储与事务处理系统总结
  • 华为VanillaNet遇上BiFPN:YOLOv8的性能突破之旅
  • Ubuntu更新国内源
  • CATIA-CAD 拆图
  • 153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划
  • DAY43 复习日
  • 解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq
  • Webpack性能优化:构建速度与体积优化策略
  • 如何用AI高效运营1000+Tiktok矩阵账号
  • 防止网站被iframe嵌套的安全防护指南
  • 红外测温传感器:为母婴类产品精准测温保驾护航
  • 大模型相关技术综述
  • Day12
  • TMS320C55xx——AIC23B的进阶使用_中断与DMA+中断
  • [网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
  • 前端面试二之运算符与表达式
  • 十六、【前端强化篇】完善 TestCase 编辑器:支持 API 结构化定义与断言配置