深究Kubernetes源码-Kubelet-3 Pod主流程-Pod DNS配置
基于kubernetes1.26
DNS功能官方文档可参考
https://kubernetes.io/zh-cn/docs/concepts/services-networking/dns-pod-service
主流程如下:

首先getHostDNSConfig获取并解析kubelet resolvConf配置文件。
getPodDNSType根据pod.spec.dnsPolicy匹配处理的三种DNS方式,dnsPolicy包括四种配置
"Default": Pod 从运行所在的节点继承名称解析配置
"ClusterFirst": 与配置的集群域后缀不匹配的任何 DNS 查询(例如 "www.kubernetes.io") 都会由 DNS 服务器转发到上游名称服务器。集群管理员可能配置了额外的存根域和上游 DNS 服务器。
"ClusterFirstWithHostNet": 对于以 hostNetwork 方式运行的 Pod,应将其 DNS 策略显式设置为 "ClusterFirstWithHostNet"。否则,以 hostNetwork 方式和 "ClusterFirst" 策略运行的 Pod 将会做出回退至 "Default" 策略的行为。
"None": 此设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置。Pod 会使用其 dnsConfig 字段所提供的 DNS 设置。

具体映射的三种处理方式为DNSNone,DNSHost,DNSCluster
DNSNone生成空DNSConfig,则pod的dns配置从pod.spec.dnsConfig生成
DNSHost则是resolvConfig配置dns加pod.spec.dnsConfig
DNSCluster则根据以下逻辑生成,并最终附加pod.spec.dnsConfig
nameserver:kubelet clusterDNS配置
search:{pod.Namespace}.svc.{clusterDomain} svc.{clusterDomain} {clusterDomain}
options: ndots:5
实际测试效果如下:
kubelet配置文件
/run/systemd/resolve/resolv.conf配置文件