作用
Pod的Spec部分有两个字段dnsPolicy
和dnsConfig
来配置Pod的DNS解析。其中dnsPolicy
参数的作用是指定Pod的DNS策略;dnsConfig
的作用是在配置完解析策略后,补充DNS解析配置,也就是往容器的/etc/resolv.conf
文件中补充一些配置。
启用pod的DNS策略配置
k8s 1.10版本后默认开启该特性。
...
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
dnsConfig:
nameservers:
- 10.16.1.2
- 10.16.1.3
searches:
- baidu.com
options:
- name: ndots
value: "2"
- name: edns0
...
edns0含义参考。
dnsPolicy配置说明
dnsPolicy可以配置四种策略。
- None: 表示不使用集群、节点的解析,只使用dnsConfig中配置的解析。
- Default:表示使用节点上的域名解析配置。即pod内的dns配置与节点上的
/etc/resolv.conf
配置相同。 - ClusterFirst(默认配置):表示使用集群的DNS解析,即coreDNS中的解析。注意,如果同时设置hostNetwork为true的话,效果相当于Default策略。另外,如果coreDNS中配置了
forward . /etc/resolv.conf
或其他域名解析配置的话,ClusterFirst不仅可以解析到集群内部的服务,也可以使用节点resolv.conf
配置的nameserver解析外部服务。 - ClusterFirstWithHostNet:一般配合hostNetwork配置使用。设置hostNetwork为true后,Pod会使用节点的网络命名空间,此时无法与集群内其他Pod通信,设置dnsPolicy为ClusterFirstWithHostNet后,会将coreDNS服务地址等集群DNS服务配置加入到
resolv.conf
中,实现使用节点的网络栈情况下与集群其他Pod通信。最终效果为Pod网络命名空间使用节点网络命名空间,DNS解析使用ClusterFirst配置的DNS解析。
dnsConfig配置说明
dnsConfig的配置与Linux上/etc/resolv.conf
的配置基本一致,此处不再赘述,可以参考此处。
无论使用的dnsPolicy是什么,都可以配置dnsConfig来补充Pod的DNS解析配置。
参考:
https://juejin.cn/post/6844903665879220231
https://k8s-docs.netlify.app/en/docs/concepts/services-networking/dns-pod-service/