任务

任务
管理集群
Debug DNS 方案
Enabling Service Topology (EN)
IP Masquerade Agent 用户指南
Kubernetes 云管理控制器
Safely Drain a Node while Respecting the PodDisruptionBudget (EN)
为 Kubernetes 运行 etcd 集群
为系统守护进程预留计算资源
为节点发布扩展资源
使用 CoreDNS 进行服务发现
使用 KMS 提供商进行数据加密
使用 Kubernetes API 访问集群
关键插件 Pod 的调度保证
启用端点切片
命名空间演练
在 Kubernetes 集群中使用 NodeLocal DNSCache
在 Kubernetes 集群中使用 sysctl
在实时集群上重新配置节点的 Kubelet
声明网络策略
开发云控制器管理器
控制节点上的 CPU 管理策略
控制节点上的拓扑管理策略
搭建高可用的 Kubernetes Masters
改变默认 StorageClass
更改 PersistentVolume 的回收策略
自定义 DNS 服务
访问集群上运行的服务
通过命名空间共享集群
通过配置文件设置 Kubelet 参数
配置 API 对象配额
配置多个调度器
配置资源不足时的处理方式
限制存储消耗
集群 DNS 服务自动伸缩
集群安全
集群管理
静态加密 Secret 数据
用插件扩展 kubectl
管理巨页(HugePages)
调度 GPUs

Edit This Page

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

已过时

强烈建议不要使用联邦 v1 版本联邦 v1 版本从未达到 GA 状态,且不再处于积极开发阶段。文档仅作为历史参考。

有关更多信息,请参阅预期的替代品 Kubernetes 联邦 v2 版本

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

教程目标

  • 配置和部署 CoreDNS 服务器
  • 使用 CoreDNS 作为 dns 提供者设置联邦
  • 在 nameserver 查找链中设置 CoreDNS 服务器

准备开始

  • 你需要有一个正在运行的 Kubernetes 集群(作为主机集群引用)。请参阅入门指南,了解平台的安装说明。
  • 必须在联邦的集群成员中支持 LoadBalancer 服务,用来支持跨联邦集群的 CoreDNS 服务发现。

部署 CoreDNS 和 etcd 图表

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

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

helm install --namespace my-namespace --name etcd-operator stable/etcd-operator
helm upgrade --namespace my-namespace --set cluster.enabled=true etcd-operator stable/etcd-operator

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

部署成功后,可以使用主机集群中的 http://etcd-cluster.my-namespace:2379 端点访问 etcd。

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

isClusterService: false
serviceType: "LoadBalancer"
plugins:
  kubernetes:
    enabled: false
  etcd:
    enabled: true
    zones:
    - "example.com."
    endpoint: "http://etcd-cluster.my-namespace:2379"

以上配置文件需要说明:

  • isClusterService 指定是否应该将 CoreDNS 部署为集群服务,这是默认值。 你需要将其设置为 false,以便将 CoreDNS 部署为 Kubernetes 应用程序服务。
  • 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 来运行

helm install --namespace my-namespace --name coredns -f Values.yaml stable/coredns

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

使用 CoreDNS 作为 DNS 提供者部署联邦

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

--dns-provider=coredns
--dns-provider-config=coredns-provider.conf

coredns-provider.conf 的格式如下:

[Global]
etcd-endpoints = http://etcd-cluster.my-namespace:2379
zones = example.com.
coredns-endpoints = <coredns-server-ip>:<port>
  • etcd-endpoints 是访问 etcd 的端点。
  • zones 是 CoreDNS 具有权威性的联邦域,它与 kubefed init 的 –dns-zone-name 参数相同。
  • coredns-endpoints 是访问 CoreDNS 服务器的端点。这是从 v1.7 开始引入的一个可选参数。
注意:

CoreDNS 配置中的 plugins.etcd.zoneskubefed init--dns-zone-name 参数应该匹配。

在 nameserver resolv.conf 链中设置 CoreDNS 服务器

注意:

下面的部分只适用于 v1.7 之前的版本,如果 coredns-endpoint 参数是 在 coredns-provider.conf 中配置的,就会自动处理。

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

--server=/example.com./<CoreDNS endpoint>

将上面的 example.com 替换为联邦域。

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

反馈