Kubernetes:DNS

102 阅读2分钟

在Kubernetes中,为了通过名称而不是IP地址进行通信,DNS名称被分配给Pod和Service。集群内用于DNS解析的默认域名是 cluster.local ,如果需要,可以进行自定义。Service的DNS名称遵循  <service-name>.<namespace>.svc.cluster.local 的格式,而Pod的DNS名称遵循  < pod-ip-address-replace-dot-with-hyphen >.<namespace>.pod.cluster.local 的格式。CoreDNS基于一个名为"Corefile"的配置文件运行,该文件指定了DNS服务器应如何运行和响应传入的请求。

 DNS解析

在Kubernetes中,为Pod和Service分配的DNS名称用于集群内的名称解析,使得Pod和Service可以通过名称而不是IP地址进行通信。

默认域名:cluster.local

在Kubernetes中, cluster.local 是集群内部用于DNS解析的默认域名。当在同一命名空间内对服务或Pod进行DNS查询时,Kubernetes DNS服务会在名称后附加命名空间和 cluster.local 后缀,形成一个完全合格的域名(FQDN)。尽管它是默认的域名,但如果需要,可以自定义使用不同的域名。

 服务的DNS名称

Kubernetes中服务的DNS名称遵循以下格式:

 <service-name>.<namespace>.svc.cluster.local

service-name 指的是服务的名称,而 namespace 表示服务所在的命名空间。

例如,如果在 my-namespace 命名空间中运行一个名为 my-service 的服务,则相应的DNS名称将是:

my-service.my-namespace.svc.cluster.local

 Pods的DNS名称

Kubernetes中Pod的DNS名称遵循以下格式:

 <pod-ip-address-replace-dot-with-hyphen>.<namespace>.pod.cluster.local

pod-ip-address-replace-dot-with-hyphen 是Kubernetes分配给Pod的IP地址,其中的点被连字符替换。而 namespace 是Pod所在的命名空间。

例如,如果一个具有IP地址 10.1.2.3 的Pod正在 my-namespace 命名空间中运行,它的DNS名称将是:

10-1-2-3.my-namespace.pod.cluster.local

在同一命名空间中的Pods和Services

当Pods和Services在同一个命名空间中时,您可以使用服务名称而不是完全限定域名(FQDN)通过查询访问Services。

在同一命名空间中的Pods和Services

不同命名空间中的Pods和Services

当Pod和Service在Kubernetes中位于不同的命名空间时,您需要同时指定Service的名称和命名空间,以便从Pod中访问该Service。

不同命名空间中的Pods和Services

CoreDNS

在引入CoreDNS之前,Kubernetes使用kube-dns作为默认的DNS解决方案。DNS服务器处理集群中服务和Pod的DNS请求。根据官方的Kubernetes文档,在1.11版本开始,推荐使用CoreDNS作为默认的DNS解决方案,并且默认与kubeadm一起安装。

配置文件:Corefile

Corefile是一个文本文件,用于指定DNS服务器的操作方式和对传入请求的响应方式。

 核心文件示例:

 {
      errors
      health {
          lameduck 5s
      }
      ready
      kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
          ttl 30
      }
      prometheus :9153
      forward . /etc/resolv.conf
      cache 30
      loop
      reload
      loadbalance
 }  

在Kubernetes插件配置中,集群的顶级域名被指定为"cluster.local"。该插件还配置了使用in-addr.arpa和ip6.arpa域来处理IPv4和IPv6地址的反向DNS查找。