6.3.3 ClusterDNS和服务发现
Kubernetes 系统之上用于名称解析和服务发现的ClusterDNS是集群的核心附件之一,集群中创建的每个Service对象,都会尤其自动生成相关的资源记录。默认情况下,集群内各Pod资源会自动配置其作为名称解析服务器,并在其DNS搜索中包含它所属名称空间的域名后缀。
无论是使用kubeDNS还是CoreDNS,它们提供的基于DNS的服务发现解决方案都会负责解析以下资源记录(Resource Record)类型以实现服务发现。
拥有ClusterIP的Service资源,需要具有以下类型的资源记录。
- A记录:
<service>.<ns>.svc.<zone>. <ttl> IN A <cluster-ip>
- SRV记录:
_<port>._<proto>.<service>.<ns>.svc.<zone>. <ttl> IN SRV <weight> <priority> <port-number> <service>.<ns>.svc.<zone>
- PTR记录:
<d>.<c>.<b>.<a>.in-addr.arpa. <ttl> IN PTR <service>.<ns>.svc.<zone>
- A记录:
Headless 类型的Service资源,需要具有以下类型的资源记录。
- A记录:
<service>.<ns>.svc.<zone>. <ttl> IN A <endpoint-ip>
- SRV记录:
_<port>._<proto>.<service>.<ns>.svc.<zone>. <ttl> IN SRV <weight> <priority> <port-number> <hostname>.<service>.<ns>.svc.<zone>
- PTR记录:
<d>.<c>.<b>.<a>.in-addr.arpa. <ttl> IN PTR <hostname>.<service>.<ns>.svc.<zone>
- A记录:
ExternalName 类型的Service资源,需要具有CNAME类型的资源记录。
- CNAME记录:
<service>.<ns>.svc.<zone>. <ttl> IN CNAME <extname>
- CNAME记录:
名称解析和服务发现是Kubernetes系统许多功能得以实现的基础服务,它通常是集群安装完成后应该立即部署的附加组件。使用kubeadm初始化一个集群时,它甚至会自动进行部署。