Kubernetes 服务的 DNS 服务搭建和配置指南 -2

2020-06-18 0 By admin

接上文

Kubernetes 服务的 DNS 服务搭建和配置指南 -1

四、CoreDNS 服务的配置文件说明

CoreDNS的主要功能是通过插件系统实现的。CoreDNS实现了一种链式插件结构,将DNS的逻辑抽象成了一个个插件,能够灵活组合使用。

4.1、CoreDNS 服务的配置文件示例

为域名“cluster.local”设置了一系列插件,包括errors、health、kubernetes、prometheus、forward、cache、loop、reload和loadbalance,在进行域名解析时,这些插件将以从上到下的顺序依次执行:

cluster.local {
	errors
	health
	kubernetes cluster.local in-addr.arpa ip6.arpa {
		pods insecure
		upstream
		fallthrough in-addr.arpa ip6.arpa
	}
	prometheus: 9153
	forward . /etc/resolv.conf
	cache 30
	loop
	reload
	loadbalance
}

4.2、CoreDNS 插件简单介绍

  1. loadbalance:提供基于DNS的负载均衡功能。
  2. loop:检测在DNS解析过程中出现的简单循环问题。
  3. cache:提供前端缓存功能。
  4. health:对Endpoint进行健康检查。
  5. kubernetes:从Kubernetes中读取zone数据。
  6. etcd:从etcd读取zone数据,可以用于自定义域名记录。
  7. file:从RFC1035格式文件中读取zone数据。
  8. hosts:使用/etc/hosts文件或者其他文件读取zone数据,可以用于自定义域名记录。
  9. auto:从磁盘中自动加载区域文件。
  10. reload:定时自动重新加载Corefile配置文件的内容。
  11. forward:转发域名查询到上游DNS服务器。
  12. proxy:转发特定的域名查询到多个其他DNS服务器,同时提供到多个DNS服务器的负载均衡功能。
  13. prometheus:为Prometheus系统提供采集性能指标数据的URL。
  14. pprof:在URL路径/debug/pprof下提供运行时的性能数据。
  15. log:对DNS查询进行日志记录。
  16. errors:对错误信息进行日志记录。

4.3、etcd 和 hosts 插件

etcd 和 hosts 插件都可以用于用户自定义域名记录。

使用etcd插件的配置示例
将以“.com”结尾的域名记录配置为从etcd中获取,并将域名记录保存在/skydns路径下:

{
	etcd com {
		path / skydns
		endpoint http://192.168.18.3.:2379
		upstream /etc/resolv.conf
	}
	cache 160 com
	loadbalance
	proxy . /etc/resolv.conf
}

如果用户在etcd中插入一条“10.1.1.1 mycompany.com”DNS记录:

使用 hosts 插件的配置示例
将域名 example.com 地址解析到 10.10.10.1:

    hosts {
      10.10.10.1 example.com
      fallthrough
    }

# etcdctl put /skydns/com/mycompany '{"host":"10.1.1.1", "ttl":60}'
客户端应用就能访问域名“mycompany.com”了。

4.4、forward 和 proxy 插件

forward和proxy插件都可以用于配置上游DNS服务器或其他DNS服务器,当在CoreDNS中查询不到域名时,会到其他DNS服务器上进行查询。

在实际环境中,可以将Kubernetes集群外部的DNS纳入CoreDNS,进行统一的DNS管理。