假设我有这样一个基于Java Spring Boot+Kubernetes的架构:
- N个具有类似目的的pod(比如:订单执行器(-pod组
- 具有其他业务实现的其他pod
我想创建一个解决方案,其中:
- 一个(中央(pod可以与所有/特定的pod组通信,以获取有关该pod状态的一些信息(REST或任何其他方式(
- 当然,一些pod可以复制,即x5和中央pod应该与所有副本通信
使用任何技术都有可能吗?如果每个订单执行器pod都有k8s服务,有没有办法与该pod的所有副本通信,以获取有关所有副本的信息?中央pod只有服务url,所以它不知道另一边是哪个复制pod。
有没有任何解决方案可以在不更改任何配置的情况下自动发现集群上的每个pod并与它们通信?春云?尤里卡?领事
p.S.
- 在我的体系结构中,还部署了etcd和rabbitmq。也许它可以作为解决方案的一部分
您可以使用;无头服务";,一个具有CCD_ 1。这样做的结果是,当您对正常服务DNS名称进行DNS查找时,而不是用神奇的代理网状IP进行单个a结果,您将为每个匹配选择器并准备就绪的pod(即通常作为后端的IP(获得单独的a响应。您还可以使用KubernetesJava客户端库,通过Endpoints类型(或者EndpointSlices,如果您需要支持数千个组,但仅支持5个,则为Endpoints(从Kubernetes API获取这些。在任何一种情况下,你都有一个IP列表,其余的由你来计算:(
我不熟悉java,但这个概念是我以前做过的。有几种方法可以实现,其中之一就是使用kubernetes事件。
您的应用程序应该监听kubernetes事件(使用websocket(。无论何时创建、删除或终止具有特定标签或标签集的pod,等等。您都会获得有关其状态的更新,包括pod ip。然后,您可以在应用程序中做任何您喜欢的事情,而无需在应用程序中将自己联系kubernetes api。您甚至可以使用sidecar pod来监听这些事件并将其写入文件。通过使用共享卷,您的应用程序可以读取该文件并使用其中的内容