容器中域名解析的最佳实践 本节介绍云容器引擎的最佳实践: 容器中域名解析的最佳实践。 Pod的DNS解析行为 Kubernetes以Pod为最小可创建、管理、部署单元,Pod内部包含一个或一组共享namespace和cgroup的紧密关联的容器。容器内部的DNS解析行为与Pod的DNS解析行为概念上是对等的。 Pod中的DNS查询行为直接受Pod的/etc/resolv.conf配置文件的影响,Kubelet在拉起Pod时,会根据Pod规约中dnsPolicy的配置为Pod生成/etc/resolv.conf配置。 默认情况下,Pod的dnsPolicy设置为clusterFirst, Pod的/etc/resolv.conf值类似: nameserver 172.20.0.10 search .svc.cluster.local svc.cluster.local cluster.local options ndots:5 各字段解释如下: nameserver : 域名解析服务器 search : 域名查找后缀规则,会在 .svc.cluster.local svc.cluster.local cluster.local三个域中搜索匹配的记录 options : 域名解析选项,KV值格式,典型的有ndots,表示解析的域名字符串内的点字符数量超过ndots值,则认为是完整域名,直接解析,如不足,则追加.svc.cluster.local后缀 默认情况下, nameserver值为云容器引擎内置的CoreDNS service ClusterIP, Kubernetes在CoreDNS中为普通Service赋予一个形如 mysvc.mynamespace.svc.clusterdomain.example的DNS A记录,该名称会解析成Service对应的clusterIP。 Pod访问集群内部Service域名时,根据域名后缀规则依次查询Service名称,获得Service对应的ClusterIP。 Pod访问集群外部域名时,根据Pod规约的dnsPolicy值不同,使用Pod所在节点配置的DNS或者使用CoreDNS所在节点的配置DNS服务器进行解析。