我在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 回答
确实
NodePort
是ClusterIP
的超集,但是要清楚,您不需要服务为NodePort
类型,因为它由IngressController公开 . IC可以直接访问 endpoints (pod),因此除了ClusterIP
之外不需要使用任何东西 .另一件事是ClusterIP服务对pod-to-pod连接没有影响,而且使用服务允许共识聊天似乎有点奇怪(除非你有每个pod的svc) . 对于这种操作,您可能希望仔细研究StatefulSet概念