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,一般用來做健康檢查,可以通過?//localhost:<監聽端口號>/health?獲取健康狀態。
ready
CoreDNS插件狀態報告,默認監聽端口8181,一般用來做可讀性檢查,可以通過?//localhost:<監聽端口號>/ready?獲取可讀狀態。當所有插件都運行后,ready狀態為200。
kubernetes
CoreDNS Kubernetes插件,提供集群內服務解析能力。
prometheus
CoreDNS自身metrics數據接口,可以通過 //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