kubernetes - 如果没有 kubernetes API,kubernetes 副本集中的 pod 如何发现彼此并相互通信?

标签 kubernetes service-discovery leader

我有一个应用程序,它使用 raft 从多个实例中选举领导者。这些实例使用八卦协议(protocol),因此它只需要知道另一个实例即可发现其余实例。

我计划将每个实例作为 kubernetes pod 运行,并由复制 Controller 管理复制。我还将在这些节点前面放置一个服务,以便集群中的其他应用程序可以与其通信。

我的问题是:如何在不使用 kubernetes API 的情况下让副本集中的 pod 相互发现?这可以通过 DNS 实现吗?还是 kubernetes 提供了一些环境变量?

最佳答案

解决方案是使用 headless 服务。例如,我们可以部署一个名为 myservice-discovery 的 headless 服务。由于该服务是 headless 的,因此它不会执行任何负载平衡或获取集群 IP 地址。要获取 Pod 的 IP 地址,您可以在 DNS 服务器中查询 myservice-discovery.mycluster 以获取 A 记录列表。

如果 Pod 还需要可供其他服务和 Pod 访问,您还可以设置第二个普通(非 headless )服务。

关于kubernetes - 如果没有 kubernetes API,kubernetes 副本集中的 pod 如何发现彼此并相互通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40395285/

相关文章:

Kubernetes VIP 地址说明

node.js - 无法从 Eureka 到达已注册的实例

apache-kafka - Apache Kafka 中的分区领导者是什么?

Vim:领导不工作

mongodb - 将 MongoDB 部署到 Google Cloud Platform 的最佳方式?

kubernetes - 使用 Ansible 创建 kubeadm token

ubuntu - 在以非 root 用户身份运行的 Kubernetes pod 中将 cron 作为后台进程运行

kubernetes - 如何在 kubernetes 节点上使用 consul/registration 进行服务发现?

kubernetes - 使用 eureka 与 kubernetes 进行服务发现的缺点

apache-zookeeper - Apache 馆长 LeaderSelector : How to avoid giving up leadership by not exiting from takeLeadership() method?