1.6.2. pod与service的dns

k8s为服务和pod创建dns记录, 可以使用dns名称而非地址访问服务。

1.6.2.1. Service 的名字空间

看一个service的配置文件 /etc/resolv.conf

# kubectl get svc |grep nginx
nginxsvc                                                 ClusterIP   None             <none>        80/TCP     9d
# kubectl exec svc/nginxsvc -- cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local epc.duxiaoman.com
options ndots:5

1.6.2.2. DNS记录

哪些对象可以获得dns记录?

  • Services

  • Pods

1.6.2.3. 服务A记录

普通服务(除了无头服务)回馈有一个dns记录,my-svc.my-namespace.svc.cluster-domain.example的这种形式的。

1.6.2.4. 服务SRV记录

_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example 这种形式。

1.6.2.5. Pod A记录

pod-ip-address.my-namespace.pod.cluster-domain.example

1.6.2.6. Pod 的 DNS 策略

  • Default: pod从运行的节点集成名称解析配置

  • ClusterFirst: 与配置的集群与后缀不匹配的dns查询都转发到从节点集成的上游名称服务器

  • ClusterFirstWithHostNet: 对于以 hostNetwork 方式运行的 Pod,应显式设置其 DNS 策略

  • None: 设置忽略k8s环境变量的dns设置,pod会使用dnsconfig字段锁提供的dns设置。

Note

“Default” 不是默认的 DNS 策略。如果未明确指定 dnsPolicy,则使用 “ClusterFirst”。

1.6.2.7. Pod 的 DNS 配置

dnsConfig 字段是可选的,它可以与任何 dnsPolicy 设置一起使用。 但是,当 Pod 的 dnsPolicy 设置为 “None” 时,必须指定 dnsConfig 字段。

  • nameservers:将用作于 Pod 的 DNS 服务器的 IP 地址列表。 最多可以指定 3 个 IP 地址。当 Pod 的 dnsPolicy 设置为 “None” 时, 列表必须至少包含一个 IP 地址,否则此属性是可选的。 所列出的服务器将合并到从指定的 DNS 策略生成的基本名称服务器,并删除重复的地址。

  • searches:用于在 Pod 中查找主机名的 DNS 搜索域的列表。此属性是可选的。 指定此属性时,所提供的列表将合并到根据所选 DNS 策略生成的基本搜索域名中。 重复的域名将被删除。Kubernetes 最多允许 6 个搜索域。

  • options:可选的对象列表,其中每个对象可能具有 name 属性(必需)和 value 属性(可选)。 此属性中的内容将合并到从指定的 DNS 策略生成的选项。 重复的条目将被删除。

1.6.2.8. 扩展 DNS 配置

对于 Pod DNS 配置,Kubernetes 默认允许最多 6 个 搜索域( Search Domain) 以及一个最多 256 个字符的搜索域列表。

如果启用 kube-apiserver 和 kubelet 的特性门控 ExpandedDNSConfig,Kubernetes 将可以有最多 32 个 搜索域以及一个最多 2048 个字符的搜索域列表。