将 CoreDNS 设置为联邦集群的 DNS 提供者

此页面显示如何配置和部署 CoreDNS,将其用作联邦集群的 DNS 提供者

  • 配置和部署 CoreDNS 服务器
  • 使用 CoreDNS 作为 dns 提供者设置联邦
  • 在 nameserver 查找链中设置 CoreDNS 服务器
  • 你需要有一个正在运行的 Kubernetes 集群(作为主机集群引用)。请参阅,了解平台的安装说明。

CoreDNS 可以部署在各种配置中。下面解释的是一个参考,可以根据平台和联邦集群的需要进行调整。

为了部署 CoreDNS,我们将利用图表。 CoreDNS 将部署 etcd 作为后端,并且应该预先安装。etcd 也可以使用图表进行部署。下面显示了部署 etcd 的说明。

注意:etcd 默认部署配置可以被覆盖,适合主机集群。

应该定制 CoreDNS 默认配置适应联邦。 下面显示的是 Values.yaml,它覆盖了 CoreDNS 图表上的默认配置参数。

  1. isClusterService: false
  2. serviceType: "LoadBalancer"
  3. plugins:
  4. kubernetes:
  5. enabled: false
  6. etcd:
  7. enabled: true
  8. zones:
  9. - "example.com."

以上配置文件需要说明:

  • serviceType 指定为核心用户创建的 Kubernetes 服务的类型。 你需要选择 LoadBalancerNodePort,以便在 Kubernetes 集群之外访问 CoreDNS 服务。
  • 禁用 plugins.kubernetes,默认情况下通过设置 plugins.kubernetes.enabled 为 false。
  • 启用 plugins.etcd,通过设置 plugins.etcd.enabled 为 true。
  • 通过设置 plugins.etcd.zones 来配置 CoreDNS 具有权威性的 DNS 域(联邦域)。如上所示。
  • 通过设置 plugins.etcd.endpoint 来配置早期部署的 etcd 端点

现在部署 CoreDNS 来运行

验证 etcd 和 CoreDNS,pod 都按预期运行。

可以使用 kubefed init 部署联邦控制平面。通过指定两个附加参数,可以选择 CoreDNS 作为 DNS 提供者。

  1. --dns-provider=coredns
  • etcd-endpoints 是访问 etcd 的端点。
  • zones 是 CoreDNS 具有权威性的联邦域,它与 kubefed init 的 –dns-zone-name 参数相同。
  • coredns-endpoints 是访问 CoreDNS 服务器的端点。这是从 v1.7 开始引入的一个可选参数。

一旦部署了联邦控制平面并将联邦集群连接到联邦, 你需要将 CoreDNS 服务器添加到所有联邦集群中 pod 的 nameserver resolv.conf 链,因为这个自托管的 CoreDNS 服务器是不可公开发现的。 这可以通过在 kube-dns 部署中将下面的行添加到 dnsmasq 容器的参数中来实现。

    现在联邦集群已经为跨集群服务发现做好了准备!