Kubernetes中Pod之间的通信。服务对象还是集群网络?

时间:2020-05-14 18:58:04

标签: kubernetes google-kubernetes-engine kubernetes-pod azure-kubernetes

我是Kubernetes的初学者,我的处境如下:我有两种不同的Pod: PodA PodB 。首先,我想将 PodA 暴露给外界,所以我为 PodA 创建了一个 Service (类型为NodePort或LoadBalancer),但这不是对我来说很难理解。

然后我想 PodA PodB 进行通信,经过几个小时的搜索,我发现答案是我还需要创建服务(如果要在群集内保持 PodB 仅可见,请输入ClusterIP)作为 PodB ,如果这样做,可以让< strong> PodA 和 PodB 相互抵消。但是问题是我也发现了this article。根据该网页,他们说the communication between pods on the same node可以通过cbr0网桥完成,或者the communication between pods on different nodes可以通过route table完成集群,并且他们没有向 Service 对象提及任何内容(这意味着我们不需要 Service 对象???)。

实际上,我还阅读了K8的文档,并且在Cluster Networking

中找到了它们。

集群网络
...
2. Pod到Pod的通信:这是本文档的主要重点。
...

他们还专注于 Pod到Pod通讯,但是没有与 Service 对象相关的内容。

所以,我现在真的很困惑,我的问题是:您能否向我解释the article中的这些内容与 Service 对象之间的联系? Service 对象是cbr0route table吗?最后, Pods 如何彼此通信?

如果我误解了一点,请帮我指出,我真的很感谢。

谢谢你们!

4 个答案:

答案 0 :(得分:1)

在Kubernetes集群中使用服务的动机。

Kubernetes豆荚是凡人。他们出生了,死了也没有复活。如果您使用Deployment来运行您的应用,则它可以动态创建和销毁Pod。

每个Pod都有自己的IP地址,但是在部署中,在同一时间运行的Pod集合可能与稍后运行该应用程序的Pod集合不同。

这会导致一个问题:如果群集中的某些Pod组(称为“后端”)为其他Pod(称为“前端”)提供功能,那么前端如何查找并跟踪哪个IP地址进行连接,以便前端可以使用工作负载的后端部分?

话虽如此,当动态管理您的部署(podA和podB)时,服务便很方便。

答案 1 :(得分:0)

如果您的PodA知道PodB的地址或DNS名称,则它始终可以与PodB进行通信。在群集环境中,可能存在PodB的多个副本,或者PodB的一个实例可能会死亡,并被具有不同地址和名称的另一个实例替换。 Service是处理这种情况的抽象。如果您使用Service公开PodB,则群集中的所有Pod都可以使用该服务与PodB实例进行通信,该服务具有固定的名称和固定的地址,无论存在多少PodB实例以及它们的实例是什么。地址是。

答案 2 :(得分:0)

首先,当您处理两个应用时,我读了它,例如ApplicationAApplicationB。当您对体系结构进行推理时,请不要使用 Pod 抽象。在Kubernetes上,您正在处理分布式系统,并且它的设计目的是使您应具有应用程序的多个实例,例如高可用性。您的应用程序的每个实例都是一个Pod

将应用程序ApplicationAApplicationB部署为Deployment资源。这样就可以轻松进行滚动升级而不会造成停机,并且Kubernetes会在应用程序崩溃时重新启动应用程序的任何实例。

为每个Deployment或您自己的 application 创建一个Service资源(例如ServiceAServiceB)。当您从ApplicationA与另一个应用通信时,请使用服务,例如ServiceB。该服务将负载均衡您对其他应用程序实例的请求,您可以在不停机的情况下升级Deployment

答案 3 :(得分:0)

1。集群网络:顾名思义,集群中部署的所有Pod都将通过实现DANM,flannel等任何kubernetes网络模型进行连接 检查此链接以查看如何创建群集网络。 Creating cluster network

安装了CNI(通过实施群集网络)后,每个Pod都将获得一个IP。

2。用ClusterIP类型创建的服务对象指向内部创建的用于通信的IP(通过端点)。

回答您的问题,是的,Service对象是cbr0和路由表的高级摘要。

您可以使用服务对象在Pod之间进行通信。 如果网络复杂,还可以实现envoy / Istio之类的服务网格。