深究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根據(jù)pod.spec.dnsPolicy匹配處理的三種DNS方式,dnsPolicy包括四種配置
"Default": Pod 從運(yùn)行所在的節(jié)點(diǎn)繼承名稱解析配置
"ClusterFirst": 與配置的集群域后綴不匹配的任何 DNS 查詢(例如 "www.kubernetes.io") 都會(huì)由 DNS 服務(wù)器轉(zhuǎn)發(fā)到上游名稱服務(wù)器。集群管理員可能配置了額外的存根域和上游 DNS 服務(wù)器。
"ClusterFirstWithHostNet": 對(duì)于以 hostNetwork 方式運(yùn)行的 Pod,應(yīng)將其 DNS 策略顯式設(shè)置為 "ClusterFirstWithHostNet"。否則,以 hostNetwork 方式和 "ClusterFirst" 策略運(yùn)行的 Pod 將會(huì)做出回退至 "Default" 策略的行為。
"None": 此設(shè)置允許 Pod 忽略 Kubernetes 環(huán)境中的 DNS 設(shè)置。Pod 會(huì)使用其 dnsConfig 字段所提供的 DNS 設(shè)置。

具體映射的三種處理方式為DNSNone,DNSHost,DNSCluster
DNSNone生成空DNSConfig,則pod的dns配置從pod.spec.dnsConfig生成
DNSHost則是resolvConfig配置dns加pod.spec.dnsConfig
DNSCluster則根據(jù)以下邏輯生成,并最終附加pod.spec.dnsConfig
nameserver:kubelet clusterDNS配置
search:{pod.Namespace}.svc.{clusterDomain} ?svc.{clusterDomain} {clusterDomain}
options: ndots:5
實(shí)際測試效果如下:
kubelet配置文件
/run/systemd/resolve/resolv.conf配置文件