Kubernetes容器如何相互发现?

6
我正在尝试实现类似于使用共识算法的etcd服务(https://raft.github.io/)。在这种情况下,需要多个etcd服务的实例之间相互知道彼此的存在。为了做到这一点,在复制控制器中有3个etcd实例的Pod的情况下,Pod必须能够互相通信(至少可以知道自己和所有其他Pod的IP)。
是否有一种方法可以在不使用容器内的kubernetes API的情况下,在复制控制器或Pod规范中实现这一点?
1个回答

4
你可以通过为每个Pod分配一些标签(例如etcd-service=true),并创建具有与该标签匹配的选择器的Kubernetes服务,将服务放在这些Pod之前。使用DNS插件,您将获得每个服务端点的DNS A记录。您可以在文档此处中了解更多信息。

谢谢Paul。但是服务中的Pod如何知道彼此呢?将服务放在Pod前面可以让我们在Pod之间进行轮询,但我们希望Pod能够相互感知。我没有看到一种将ETCD服务中其他Pod的IP通信到一个Pod的方法。 - Gopinath Taget
Gopinath,服务中的Pod可以使用相同的发现方法--这能满足您的需求吗? - Paul Morie
保罗,不是很清楚你的意思。你是指Pod应该使用k8s API来发现其复制控制器中的其他Pod吗?例如,如果在etcd复制控制器中有3个etcd Pod,那么第1个Pod如何知道Pod 2和3的IP地址?是否有一种方法可以将Pod 2和3的IP地址传递给Pod 1,而无需在Pod内部使用k8s API?是否有任何YAML或JSON中的配置或规范魔法可以让我们这样做? - Gopinath Taget
Gopinath,你不需要使用kube API,你只需要DNS。 - Paul Morie
Paul,你能详细说明一下吗?根据DNS插件文档,只有Kubernetes服务才分配名称。它们是否也为Pods提供条目?如果是这样的话,似乎与DNS文档所说的相矛盾。我在这里错过了什么? - Gopinath Taget
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接