kubernetes - 如何使用 DNS 发现 (SRV) 在 Kubernetes 中设置 ETCD 集群?
问题描述
我希望etcd
在我的 k8s 集群中运行一个动态集群。我能想到的最好的动态方式(没有硬编码的地址、名称等)是使用 DNS 发现和内部 k8s DNS (CoreDNS)。
我发现有关在 k8s 中为服务创建的记录的分离信息SRV
,以及有关 DNS 发现如何工作的一些解释etcd
,但没有完整的操作方法。
例如:
- k8s是如何命名
SRV
条目的? - 是否应该以特定方式命名
etcd
以便能够找到它们? - 是否应该设置任何特殊的 CoreDNS 设置?
对此的任何帮助将不胜感激。
参考:
解决方案
k8s 是如何命名 SRV 条目的?
via Service.port[].name
,这就是为什么 kubernetes 中的几乎所有内容都必须是 DNS 友好的名称:因为很多时候,它确实会为您将它们放入 DNS 中。
一个拥有dig
或足够新的 Podnslookup
将向您显示:
$ dig SRV kubernetes.default.svc.cluster.local.
您会看到kubernetes
Service
正在宣传的端口的名称。
是否应该以特定的方式命名它们以便 etcd 能够找到它们?
是的,正如您在链接到的页面中看到的那样,它们需要被命名为以下四个之一:
_etcd-client
_etcd-client-ssl
_etcd-server
_etcd-server-ssl
所以在 kubernetes 方面是这样的:
ports:
- name: etcd-client
port: 2379
containerPort: whatever
- name: etcd-server
port: 2380
containerPort: whatever