DNS为ASK集群内的工作负载提供域名解析服务。本文主要介绍Kubernetes集群中DNS域名解析原理、ASK集群中域名服务方案,即CoreDNS和PrivateZone方案。

Kubernetes集群中DNS域名解析原理

ASK集群中创建的容器Pod通过DNS域名解析配置文件/etc/resolv.conf来解析域名,默认配置如下:
# nameserver表示本容器Pod使用的DNS服务器。
# PrivateZone方案中nameserver默认为VPC提供的DNS服务器地址,即100.100.2.136和100.100.2.138。
# CoreDNS方案中nameserver默认为kube-dns的Service IP地址。
nameserver 172.xx.x.xx
# search表示请求服务时需要拼接的域名后缀,当Pod处于kube-system命名空间时如下。
search kube-system.svc.cluster.local svc.cluster.local cluster.local
#一些其它参数。
options ndots:5
ASK集群支持以下两种DNS服务发现方案:
  • CoreDNS方案:启用该方案后,ASK集群会部署一组CoreDNS DNS服务器,提供DNS解析服务。
  • PrivateZone方案:启用该方案后,ASK集群中创建的Pod会默认使用PrivateZone作为DNS解析服务。

CoreDNS方案

CoreDNS是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS具备丰富的插件集,在集群层面支持自建DNS、自定义hosts、CNAME、Rewrite等需求。与Kubernetes一样,CoreDNS项目由CNCF托管,关于CNCF的更多信息,请参见CNCF。关于CoreDNS的更多信息,请参见CoreDNS: DNS and Service Discovery

CoreDNS DNS服务器通过kube-dns的服务名暴露DNS服务,业务Pod使用CoreDNS的流程如下。CoreDNS原理图.png
  1. 业务Pod(Pod Client)试图访问Nginx服务(Service Nginx)时,先会请求本地DNS配置文件(/etc/resolv.conf)中指向的DNS服务器(nameserver 172.21.0.10,即Service kube-dns)获取服务IP地址,得到解析结果为172.21.0.30的IP地址。
  2. 业务Pod(Pod Client)再直接发起往该IP地址的请求,请求最终经过Nginx服务(Service Nginx)转发到达后端的Nginx容器(Pod Nginx-1和Pod Nginx-2)上。

关于集群DNS域名解析原理的详细说明,请参见集群DNS域名解析原理

开启方式

  • 对于新建的ASK集群,您可以在容器服务管理控制台创建集群时,指定CoreDNS作为DNS服务发现的方式,启用CoreDNS方案。服务发现.png
  • 对于已创建的ASK集群,您可以在集群管理页面,选择运维管理 > 组件管理,单击网络页签,然后单击CoreDNS组件的安装,启用本方案。具体操作,请参见管理组件

PrivateZone方案

PrivateZone方案通过动态监听Kubernetes集群中各个命名空间中的Service、Endpoint资源,动态地将其域名注册至PrivateZone产品中。ASK中的容器Pod通过PrivateZone DNS解析服务完成Kubernetes的服务发现。

关于如何使用PrivateZone方案,请参见ASK集群基于云解析PrivateZone的服务发现

开启方式

  • 对于新建的ASK集群,您可以通过创建集群时,指定PrivateZone作为DNS服务发现的方式,启用PrivateZone方案。Privatezone.png
  • 对于已创建的ASK集群,您可以在eci-profile配置项中设置enablePrivateZone参数值为true,启用PrivateZone方案。

相关文档