K8S服务发现(kube-dns) : CoreDNS

K8S中,Pod如果想也另外一个Pod通信,通常不会直接基础此Pod的IP(动态的),也不会记住此Pod形成的Service的IP(相对比较稳定,但也是动态的), 因为IP不好记,通常情况是通过其对应的Service名字来访问的。那么就需要一个服务,能够把Service的名字翻译为IP,此服务就是kube-dns。

目前K8S的kube-dns通常使用 CoreDNS, 运行在Master Node上。CoreDNS解析所有的Service的名字到期Service IP。CoreDNS本身有一个ClusterIP的Service,其后有多个Backend的pod。如下图:

K8S服务发现(kube-dns) : CoreDNS_第1张图片

1、kubernetes的 Service Name被解析成其ClusterIP(是服务网络中的IP,是内部的,不是Node的外部地址)。
2、每个K8s网络在安装的时候指定一个Cluster Domain, 默认是:cluster.local
3、K8S中每个namespace对应一个子域

例如,默认的container的 /etc/resolv.conf:

# cat /etc/resolv.conf`
nameserver <kube-dns ClusterIP>`
search <namespace>.svc.<cluster_domain> svc.<cluster_domain> <cluster_domain> <additional ...>`
options ndots:``5`

如果搜索一个服务名字,例如account-service, 会自动带上.svc., 这样就会默认搜索和自己再同一个namespace里面的服务名字。 如果你知道你的服务在不同的namespace里面,就可以加上namespace,例如搜索 account-service.prod,会搜索prod下的account-service.
K8S服务发现(kube-dns) : CoreDNS_第2张图片

你可能感兴趣的:(Kubernetes(K8S),服务发现,kubernetes)