Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes中吊舱之间的通信。服务对象还是群集网络?_Kubernetes_Google Kubernetes Engine_Kubernetes Pod_Azure Aks - Fatal编程技术网

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

Kubernetes中吊舱之间的通信。服务对象还是群集网络?,kubernetes,google-kubernetes-engine,kubernetes-pod,azure-aks,Kubernetes,Google Kubernetes Engine,Kubernetes Pod,Azure Aks,我是Kubernetes的初学者,我的情况如下:我有两个不同的吊舱:PodA和PodB。首先,我想向外界公开PodA,因此我为PodA创建了一个服务(键入NodePort或LoadBalancer),这对我来说并不难理解 然后我想PodA与PodB通信,在几个小时的谷歌搜索后,我发现答案是我还需要为PodB创建一个服务(如果我想让PodB仅在集群内可见,请键入ClusterIP),如果我这样做,我可以让PodA和PodB互相合作。但问题是我也发现了。根据这个网页,他们说可以通过cbr0、一个网桥

我是Kubernetes的初学者,我的情况如下:我有两个不同的吊舱:PodAPodB。首先,我想向外界公开PodA,因此我为PodA创建了一个服务(键入NodePort或LoadBalancer),这对我来说并不难理解

然后我想PodAPodB通信,在几个小时的谷歌搜索后,我发现答案是我还需要为PodB创建一个服务(如果我想让PodB仅在集群内可见,请键入ClusterIP),如果我这样做,我可以让PodAPodB互相合作。但问题是我也发现了。根据这个网页,他们说可以通过
cbr0
、一个网桥、或者通过集群的
路由表
来完成,并且他们没有提到服务对象(这意味着我们不需要服务对象??)

事实上,我也阅读了K8s的文件,在

群集网络

2.点对点通信:这是本文档的主要重点。

他们还专注于吊舱到吊舱的通信,但没有与服务对象相关的内容

所以,我现在真的很困惑,我的问题是:你能给我解释一下中的这些东西和服务对象之间的联系吗?服务对象是
cbr0
路由表
的高级抽象?最后,豆荚如何能够相互通信

如果我误解了什么,请帮我指出,我真的很感激


谢谢大家

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

首先,我在您处理两个应用程序时阅读了它,例如
ApplicationA
ApplicationB
。在对架构进行推理时,不要使用Pod抽象。在Kubernetes上,您正在处理一个分布式系统,它的设计应使您的应用程序具有多个实例,例如,为了实现高可用性。应用程序的每个实例都是一个
Pod

将应用程序
ApplicationA
ApplicationB
作为资源部署。然后,无需停机即可轻松进行滚动升级,如果应用程序崩溃,Kubernetes将重新启动应用程序的任何实例


对于每个
部署
或您的应用程序,创建一个
服务
资源(例如
ServiceA
ServiceB
)。当您从
应用程序A
与另一个应用程序通信时,请使用该服务,例如
服务B
。该服务将负载平衡您对其他应用程序实例的请求,您可以在不停机的情况下升级部署。

1.集群网络:顾名思义,集群中部署的所有POD都将通过实现任何kubernetes网络模型(如DANM、flannel)进行连接 检查此链接以了解如何创建群集网络。

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

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

回答您的问题,是的,服务对象是cbr0和路由表的高级抽象

您可以使用服务对象在POD之间进行通信。
如果网络很复杂,您也可以实现服务网格,如特使/Istio。

在Kubernetes集群中使用服务

库伯内特斯豆荚是致命的。他们是出生的,当他们死了,他们不会复活。如果您使用部署来运行应用程序,它可以动态创建和销毁POD

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

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


也就是说,当您的部署(podA和podB)被动态管理时,服务非常方便。

谢谢您的回答,所以我的理解是我在问题中提到的
cbr0
route table
是K8s中的低级,而
服务
是我们,程序员,你能用它来处理这个问题吗?请问我说得对吗?如果我说了一些愚蠢的话,我很抱歉,但我只是想知道这些东西之间是否有关联。这是正确的。k8s管理节点上的路由表,以实现您应该使用的高级网络。网桥、路由表等是底层网络的组件。K8s使用这些原语实现软件定义的网络。正如我所说,你可以到达吊舱