首页 > 解决方案 > 如何使用 DNS 发现 (SRV) 在 Kubernetes 中设置 ETCD 集群?

问题描述

我希望etcd在我的 k8s 集群中运行一个动态集群。我能想到的最好的动态方式(没有硬编码的地址、名称等)是使用 DNS 发现和内部 k8s DNS (CoreDNS)。

我发现有关在 k8s 中为服务创建的记录的分离信息SRV,以及有关 DNS 发现如何工作的一些解释etcd,但没有完整的操作方法。

例如:

对此的任何帮助将不胜感激。

参考:

标签: kubernetesdnsetcdsrv

解决方案


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

推荐阅读