容器中域名解析的最佳实践 Pod的DNS配置策略 Kubernetes支持以下特定Pod的DNS策略,这些策略由Pod规约中的dnsPolicy字段设置: "Default" : Pod继承其所在的节点的/etc/resolv.conf名称解析配置,域名解析行为与节点完全一致 "ClusterFirst" : Pod规约中默认采用此配置,通过此配置Pod可以通过云容器引擎的提供的CoreDNS服务解析Service名称。任何与集群域后缀不匹配的任何DNS查询(例如 "www.kubernetes.io")由CoreDNS转发给其所在控制面节点中/etc/resolv.conf文件中记录的上游DNS服务器去解析。不过,若是以hostNetwork方式运行的Pod将其dnsPolicy设置为了ClusterFirst, 则dnsPolicy会强制从ClusterFirst转换成Default "ClusterFirstWithHostNet": 适用于以hostNetwork方式运行的Pod,将其DNS策略显式设置为"ClusterFirstWithHostNet"时可同时使用CoreDNS解析集群内部Service名称,又能使用节点的DNS服务解析非Service名称 "None": Pod将忽略Kubernetes环境中的DNS设置,避免Pod里面没有配置任何DNS,建议在Pod规约中配置dnsConfig字段来为Pod提供域名解析服务 Pod的DNS应用案例 案例一:完全采用自定义的DNS服务器为Pod提供域名解析服务 要求自定义的DNS服务器能同时解析Kubernetes Service域名和外部域名,自定义服务器要能满足Kubernetes管理Service域名的需求。 apiVersion: v1 kind: Pod metadata: name: busybox namespace: default spec: containers: image: busybox:1.28 command: sleep "3600" imagePullPolicy: IfNotPresent name: busybox restartPolicy: Always dnsPolicy: "None" dnsConfig: nameservers: 100.95.0.1 searches: ns1.svc.cluster.local my.dns.search.suffix options: name: ndots value: "3"