首页 文章

Kubernetes集群中的内部和外部集群通信

提问于
浏览
1

我在Google Kubernetes Engine(GKE)上构建了一个Kubernetes集群 . 它基本上是一个 Service ,其关联的 ReplicaSet 具有许多pod .

这些 beans 荚需要彼此交谈以保持共识 . 为此, ClusterIP 似乎非常合适,允许pod的群集内通信 .

但是,现在我想将此服务公开给全世界 . 我的想法是从 ClusterIP 切换到 NodePort 并将其与 Ingress 耦合,这似乎是best practice .

我的问题是当我将 Service 切换到 NodePort 时,我失去了群集的内部通信,即pod无法相互通信 . 据我所知, NodePort is a superset of ClusterIP,所以它应该保持内部沟通 .

我究竟做错了什么?


使用额外信息进行编辑

我指的是this example,一个Neo4j图数据库的例子 .

该示例部署了 StatefulSet ,其中pod需要进行通信以便在群集之间保持一致 .

使用提供的设置,pod可以相互通信 . 如果我将Service更改为 NodePort ,并修复使用的 nodePorts (而不是像往常一样随意选择它们),则pod无法再进行通信 .

这是预期的行为,还是我错过了什么?

1 回答

  • 1

    确实 NodePortClusterIP 的超集,但是要清楚,您不需要服务为 NodePort 类型,因为它由IngressController公开 . IC可以直接访问 endpoints (pod),因此除了 ClusterIP 之外不需要使用任何东西 .

    另一件事是ClusterIP服务对pod-to-pod连接没有影响,而且使用服务允许共识聊天似乎有点奇怪(除非你有每个pod的svc) . 对于这种操作,您可能希望仔细研究StatefulSet概念

相关问题