Github:

​链接​

使用文档:

​链接​

Kubernetes DNS

作为服务的发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,这就需要一个集群范围内的 DNS 服务来完成从服务名到 ClusterIP 的解析。

DNS 服务在 Kubernetes 的发展过程中历经了 3 个阶段:

  • SkyDNS
  • KubeDNS
  • CoreDNS

从 Kubernetes 1.11 版本开始,Kubernetes 集群的 DNS 服务由 CoreDNS 提供。CoreDNS 是 CNCF 基金会的一个项目,用 GO 语言实现的高性能、插件式、易扩展的 DNS 服务端。

创建 CoreDNS 服务

在部署 CoreDNS 应用之前,至少需要创建一个 ConfigMap、一个 Deployment 和一个 Service 共 3 个资源对象。在启用了 RBAC 的集群中,还可以设置 ServiceAccount、ClusterRole、ClusterRoleBinding 对 CoreDNS 容器进行权限设置。

最简单的启动方式:


​$ git clone https:​​​​//github​​​​.com​​​​/coredns/deployment​​​​.git && ​​​​cd​​ ​​deployment​​​​/kubernetes​

​$ .​​​​/deploy​​​​.sh | kubectl apply -f -​


上述是官方的启动方式,实际上它用它创建出来的启动文件如下:

CoreDNS.yml 展开源码

其中,CoreDNS 实例数量 relicas 副本的值通常应该根据集群的规模和服务数量确定,如果单个 CoreDNS 进程不足以支撑整个集群的 NDS 查询,则可以通过水平扩展提高查询能力。由于 DNS 服务是 Kubernetes 集群的核心服务,所以建议其 Deployment 设置自动扩缩容器控制器,自动管理器副本数量。

CoreDNS 的配置说明

CoreDNS 的主要功能是通过插件系统实现的。CoreDNS 实现了一种链式插件结构,将 DNS 的逻辑抽象成一个个插件,能够灵活组合使用。3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com

常用的插件如下:

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

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


​cluster.​​​​local​​ ​​{​

​errors​

​health​

​ready​

​kubernetes cluster.​​​​local​​ ​​in​​​​-addr.arpa ip6.arpa {​

​pods insecure​

​fallthrough ​​​​in​​​​-addr.arpa ip6.arpa​

​}​

​prometheus :9153​

​forward . ​​​​/etc/resolv​​​​.conf​

​cache 30​

​loop​

​reload​

​loadbalance​

​}​


另外,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 my company.com" DNS 记录:


​$ etcdctl put ​​​​/skydns/com/my/company​​ ​​'{"host":"10.1.1.1","ttl":60}'​


客户端应用就能访问域名了 "mycompany.com" 了。3A网络怎么样?3A网络好不好,好久没有分享3A网络了,本月他家发布了2022年年初促销特惠价格,5Mbps、10Mbps、15Mbps 、30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路月付99元起。如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的,目前商家有优质BGP、CN2、线路,国内用户用来做站非常不错。支持市面上99%的付款方式。需要更多支持请访问官网获取。官网:iis3.com

forward 和 proxy 插件都可以用于配置上游 DNS 服务器或其他 DNS 服务器,当在 CoreDNS 中查询不到域名时,会到其他 DNS 服务器上进行查询。在实际环境中,可以将 Kubernetes 集群外部的 DNS 纳入 CoreDNS ,进行统一 DNS 管理。