首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes Pod到Pod通信

Kubernetes Pod到Pod通信
EN

Stack Overflow用户
提问于 2019-12-31 21:07:48
回答 4查看 317关注 0票数 2

我有两个部署- A(1个副本)和B(4个副本)

我在POD A中安排了作业,在成功完成后,它通过部署B的服务访问部署B中的一个POD中存在的端点。

有没有一种方法可以在成功完成作业后访问部署B的4个PODS的所有端点?

理想情况下,通知其中一个pod!!但这是可能的,因为我不想使用pub-sub。

EN

回答 4

Stack Overflow用户

发布于 2019-12-31 21:43:16

有没有一种方法可以在成功完成作业后访问部署B中4个PODS的所有端点?

但这是可能的,因为我不想使用pub-sub。

正如您所说,发布-订阅解决方案是解决此问题的最佳方案。但是你不想用它。

对服务B使用稳定的网络标识

要在不使用pub-sub的情况下解决此问题,您需要为部署B中的pod提供一个稳定的网络标识。为此,您需要为您的服务B更改为StatefulSet

StatefulSets对于需要以下一项或多项要求的应用程序非常有用。

  • 稳定、唯一的网络标识符。

当使用StatefulSet部署B时,您的作业或其他应用程序可以到达B的pod,具有稳定的网络标识,该标识对于您部署的每个服务B版本都是相同的。请记住,您还需要为pods部署一个Headless Service

分散模式:您可以有一个应用感知(例如,感知服务B的pod数量)代理,可能作为sidecar。您的作业将请求发送到此代理。然后,代理向您的所有副本发送请求。如Designing Distributed Systems: Patterns and Paradigms中所述

发布-订阅或请求-回复

如果使用pub-sub,则作业仅发布事件。B中的每个pod负责订阅。

在请求-应答解决方案中,作业或代理负责监视服务B中存在哪些pod (除非它是固定数量的pod),此外,它还需要向所有pod发送请求,如果对任何pod的请求失败(有时会在部署中发生),则负责重试对这些pod的请求。

所以,是的,这是一个复杂得多的请求-回复方式的问题。

票数 2
EN

Stack Overflow用户

发布于 2019-12-31 21:28:45

Kubernetes服务是提供服务发现和负载均衡的抽象。因此,如果您正在使用服务,您的请求将被发送到其中一个后端pod。

为了实现您想要的,我建议您创建4个不同的服务,每个服务只有一个后端pod,或者在服务A和服务B之间使用一个消息队列,比如rabbitmq。

票数 1
EN

Stack Overflow用户

发布于 2019-12-31 21:29:34

您可以使用headless service。这样Kubernetes将不会分配单独的IP地址,而是使用所有pods的IP地址设置DNS记录。然后,在您的应用程序中,只需解析记录并向所有端点发送通知。但实际上,这是pub-sub或服务发现系统的理想用例。DNS对此来说太不可靠了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59544521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档