我在Google Kubernetes Engine(GKE)上构建了一个Kubernetes集群。它基本上是Service
,其关联的ReplicaSet
包含许多广告连播。
这些豆荚需要彼此交谈以保持共识。为此,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
(而不是像往常一样随机选择它们),则广告连播无法再进行通信。
这是预期的行为,还是我错过了什么?
答案 0 :(得分:1)
确实NodePort
是ClusterIP
的超集,但为了清楚起见,您不需要服务为NodePort
类型,因为它由IngressController公开。 IC可以直接访问端点(pod),因此除ClusterIP
之外无需使用任何其他内容。
另一件事是ClusterIP服务对pod-to-pod连接没有影响,而且使用服务允许共识聊天似乎有点奇怪(除非你有每个pod的svc)。对于这种操作,您可能希望仔细研究StatefulSet概念