CoreDNS是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS具备丰富的插件集,在集群层面支持自建DNS、自定义hosts、CNAME、rewrite等需求。与Kubernetes一样,CoreDNS项目由 CNCF托管。
云容器引擎订购的集群使用CoreDNS负责集群的服务发现,可根据不同使用场景配置CoreDNS及使用CoreDNS提升集群DNS QPS性能。
默认配置
在命名空间kube-system下,有一个名为coreDNS的配置项。CoreDNS会基于该配置项启用和配置插件。不同CoreDNS版本的配置项有略微差异,修改配置前请仔细阅读CoreDNS官方文档。
以下是一个1.6.2版本CoreDNS默认采用的配置文件:
Corefile: |
.:53 {
errors
log
health {
lameduck 15s
}
ready
kubernetes {{.ClusterDomain}} in-addr.arpa ip6.arpa {
pods verified
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
prefer_udp
}
cache 30
loop
reload
loadbalance
}
配置文件中ClusterDomain代指集群创建过程中填写的集群本地域名,默认值为cluster.local。配置项说明如下:
参数
描述
errors
错误信息到标准输出。
health
CoreDNS自身健康状态报告,默认监听端口8080,一般用来做健康检查,可以通过 http://localhost:<监听端口号>/health 获取健康状态。
ready
CoreDNS插件状态报告,默认监听端口8181,一般用来做可读性检查,可以通过 http://localhost:<监听端口号>/ready 获取可读状态。当所有插件都运行后,ready状态为200。
kubernetes
CoreDNS Kubernetes插件,提供集群内服务解析能力。
prometheus
CoreDNS自身metrics数据接口,可以通过 http://localhost:<监听端口号>/metrics 获取prometheus格式的监控数据。
forward(或proxy)
将域名查询请求转到预定义的DNS服务器。默认配置中,当域名不在Kubernetes域时,将请求转发到预定义的解析器(/etc/resolv.conf)中。默认使用宿主机的/etc/resolv.conf配置。
cache
DNS缓存。
loop
环路检测,如果检测到环路,则停止CoreDNS。
reload
允许自动重新加载已更改的Corefile。编辑ConfigMap配置后,请等待两分钟以使更改生效。
loadbalance
循环DNS负载均衡器,可以在答案中随机A、AAAA、MX记录的顺序。
扩展配置
针对以下不同场景,可以扩展CoreDNS的配置:
开启日志服务
在corefile里加上log以开启Log插件,打印CoreDNS域名解析日志,示例配置如下:
Corefile: |
.:53 {
errors
log
health {
lameduck 15s
}
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 {
prefer_udp
}
cache 30
loop
reload
loadbalance
}
特定域名使用自定义DNS服务器
例如对.example.com类型后缀的域名需要经过自建DNS服务解析,可为域名配置一个单独的服务块,示例配置如下:
example.com:53 {
errors
cache 30
forward . 10.10.0.10 {
prefer_udp
}
}
Corefile: |
.:53 {
errors
health {
lameduck 15s
}
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 {
prefer_udp
}
cache 30
loop
reload
loadbalance
}
example.com:53 {
errors
cache 30
forward . 10.10.0.10 {
prefer_udp
}
}
外部域名完全使用自建DNS服务器
可以选择让所有集群外部域名都使用自建DNS服务器,示例配置如下:
Corefile: |
.:53 {
errors
health {
lameduck 15s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . 10.10.0.10 10.10.0.20 {
prefer_udp
}
cache 30
loop
reload
loadbalance
}
自定义Hosts
可以使用Hosts插件来配置自定义hosts,例如把www.example.com的IP指定为127.0.0.1,示例配置如下:
Corefile: |
.:53 {
errors
health {
lameduck 15s
}
ready
hosts {
127.0.0.1 www.example.com
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
prefer_udp
}
cache 30
loop
reload
loadbalance