发布网友 发布时间:2022-11-29 18:00
共1个回答
热心网友 时间:2023-11-19 09:05
Kubernetes支持Pod维度DNS策略设置,通过pod规约中dnsPolicy字段设置,最终配置落到 /etc/resolv.conf文件中,也就说k8s最终还是通过设置Pod容器中/etc/resolv.conf 文件来做设置解析配置,跟普通的虚拟机或者实体机是一样,因为Pod容器本身就一个小的主机。
采用集群DNS,与配置的集群域后缀不匹配的任何 DNS 查询 都将转发到从节点继承的上游名称服务器。简单来说,就是使用 Kubernetes 中 kubedns 或 coredns 服务进行域名解析,如果解析不成功,才会使用宿主机的 DNS 配置进行解析。
example容器/etc/resolv.conf
options ndots:5 代表当待解析域名包含.大于等于5时就会先解析域名,只有域名解析不成功时才会继续匹配serach域或domain域
访问test名字空间下example-svc服务,可以直接通过example-svc访问,会与search域组合,最终组合成example-svc.test.svc.cluster.local,访问test1名字空间下example-svc1,通过example-svc.test1,会与search域组合,最终组合成example-svc.test1.svc.cluster.local
自定义DNS策略,设置允许 Pod 忽略 Kubernetes 环境中的 DNS 设置,Pod 会使用其 dnsConfig 字段 所提供的 DNS 设置。
用户可以在 dnsConfig 字段中指定以下属性:
创建上面的 Pod 后,容器 test 会在其 /etc/resolv.conf 文件中获取以下内容:
Pod 从运行所在的节点继承名称解析配置,即跟所在节点主机一致
对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略 为"ClusterFirstWithHostNet"
k8s新版本集群DNS服务是默认采用CoreDNS组件实现,1.13版本之前是采用Kube-dns
当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目, 可以在 Pod 级别覆盖对主机名的解析。你可以通过 PodSpec 的 HostAliases 字段来添加这些自定义条目.
pod打印/etc/hosts文件,多了以下内容