已过时
强烈建议不要使用
联邦 v1 版本
,联邦 v1 版本
从未达到 GA 状态,且不再处于积极开发阶段。文档仅作为历史参考。有关更多信息,请参阅预期的替代品 Kubernetes 联邦 v2 版本。
此页面显示如何配置和部署 CoreDNS,将其用作联邦集群的 DNS 提供者
LoadBalancer
服务,用来支持跨联邦集群的 CoreDNS
服务发现。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 服务的类型。
你需要选择 LoadBalancer
或 NodePort
,以便在 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 都按预期运行。
可以使用 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.zones
和kubefed init
的--dns-zone-name
参数应该匹配。
注意:下面的部分只适用于 v1.7 之前的版本,如果
coredns-endpoint
参数是 在coredns-provider.conf
中配置的,就会自动处理。
一旦部署了联邦控制平面并将联邦集群连接到联邦,
你需要将 CoreDNS 服务器添加到所有联邦集群中 pod 的 nameserver resolv.conf 链,因为这个自托管的 CoreDNS 服务器是不可公开发现的。
这可以通过在 kube-dns
部署中将下面的行添加到 dnsmasq
容器的参数中来实现。
--server=/example.com./<CoreDNS endpoint>
将上面的 example.com
替换为联邦域。
现在联邦集群已经为跨集群服务发现做好了准备!
此页是否对您有帮助?
感谢反馈。如果您有一个关于如何使用 Kubernetes 的特定的、需要答案的问题,可以访问 Stack Overflow. 在 GitHub 仓库上登记新的问题 报告问题 或者 提出改进建议.