Kubernetes DNS

244 阅读4分钟

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.shkubectl 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 管理。