在默认情况下,系统会自动为pod配置好域名服务器等DNS参数,此外k8s也提供在pod定义中有用户自定义DNS相关配置的方法。这可以通过在pod定义中设置dnsConfig字段进行DNS相关配置,该字段时可选字段。在dnsPolicy为任意策略时都可以设置,但是当dnsPolicy=“None”时必须设置。该特性在1.9版本中被提出,在1.10版本时达到beta阶段并被默认启用,1.14版本达到stable阶段
自定义DNS可以设置以下内容:
- nameservers: 用于域名解析的DNS服务器列表,最多可以设置3个。当pod的dnsPolicy=“None”时,该nameserver列表必须包含至少一个IP地址。配置的nameserver列表会与系统自动设置的nameserver进行去重和合并。
- serarches: 用于域名搜索的DNS域名后缀,最多可以设置6个,也会与系统自动设置的search列表进行合并和去重。
- options: 配置其他可选DNS参数,例如 ndots,timeout等。以name或name/value对的形式表示,也会与系统自动设置的option列表进行合并和去重
apiVersion: v1 kind: Pod metadata: name: tomcat spec: containers: - name: tomcat image: 192.168.1.6:80/dev/tomcat ports: - containerPort: 8080 dnsPolicy: "None" dnsConfig: nameservers: - 223.5.5.5 searches: - nsl.svc.cluster.local options: - name: ndots value: "2" - name: edns0
pod创建成功后,容器内DNS配置文件/etc/resolv.conf 的内容自动被系统设置成:
[root@f-master1 ~]# kubectl exec -it tomcat -- bash root@tomcat:/usr/local/tomcat# cat /etc/resolv.conf nameserver 223.5.5.5 search nsl.svc.cluster.local options ndots:2 edns0