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

时间:2017-12-22 08:37:01

标签: neo4j kubernetes google-kubernetes-engine

我在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(而不是像往常一样随机选择它们),则广告连播无法再进行通信。

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

1 个答案:

答案 0 :(得分:1)

确实NodePortClusterIP的超集,但为了清楚起见,您不需要服务为NodePort类型,因为它由IngressController公开。 IC可以直接访问端点(pod),因此除ClusterIP之外无需使用任何其他内容。

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