我想听听您对kubernetes中是否有以下设置的建议。
我有一个kubernetes集群(在私有云中,而不是AWS或其他什么的),运行着作为应用程序“网关”的一系列吊舱。这些是我负责的java应用程序,我可以完全控制它们。但我确实认为,在生产过程中,有一种简单的方法可以在需要时“扩展”网关实例。
通过设计,这些网关将接收来自“代理”的连接--在各种客户端machines.These应用程序上运行在我的kubernetes集群之外的应用程序也是产品的一部分(我的团队将编写它们),但可能有许多(可能数百万).The互连是由web套接字(wss)完成的,这样每个代理在启动时将连接到网关,并通过双向连接接收来自服务器的命令,代理将执行这些命令并响应网关。如果由于网络不稳定而断开连接,则代理应该发出新的web套接字连接。
将在其上安装代理的客户端应用程序将具有“标识符”(如客户端id)。如果客户端应用程序本身将托管在N台不同的机器上,它将配置N个不同的代理(每个客户机服务器一个代理),它们都将共享相同的“客户端id”。
现在来了一个有趣的部分:
我希望共享同一个客户机id的所有代理都由同一个网关实例pod来处理。网关也可以管理多个客户端,但是一个客户端应该只由一个网关管理。
我的场景的典型用法是:我从我的应用程序的操作符获得一个命令,听起来像是“对于所有拥有客户端id 123456的代理运行命令X,例如,”计算代理配置用于监视的客户端机器上的文件夹中的文件“,合并结果并将统一的结果返回给操作符”。我的应用程序的操作符将有一个UI,从他/她的角度来看,流程应该是同步的。因此,在理想的情况下,我只想调用一个网关,而不是每个呼叫的所有可用网关,就像这样。
我有两个可能的“方向”:
方向1:
理想情况下,当代理启动并连接到某种负载均衡器时,我可以将客户机id作为连接头传递,以便kubernetes能够将请求“路由”到网关,但是网关列表可以是动态的(扩展/in),这样我就可以维护网关或其他什么的注册中心,但是我不知道如何在kubernetes级别执行如此聪明的路由。

方向2:
另一种选择是向所有代理公开所有网关的“IP”,以便每个代理通过负载均衡器将“通过http”与“任何网关”联系,并询问“网关的IP是什么,可以为我的客户端id服务”吗?网关将在某种数据库中基于内部维护的注册表(目前所有正在运行的网关实例之间共享)计算响应,并将响应类似于“您应该与IP对话”1.2.3.4这样的内容,以便代理可以直接建立与"1.2.3.4“的WS连接。但是,我如何从k8s的角度公开”网关的每个端口的IP“?

我认为应该要求的最后一点是,如果我在第一个方向使用某种路由逻辑,我希望建立一个“直接”WS连接(可能是通过IP表或其他什么的),这样数据就不会被传输到负载均衡器,然后才会传输到网关之一,因为WS连接是持久化的,负载平衡器很快就会成为瓶颈。
我想知道kubernetes是否能够支持这样的“混合”设置,如果支持,我应该定义哪些k8s组件来使这个场景(任何方向)工作?
发布于 2021-06-29 05:16:03
如果代理可以在请求url中设置网关id或名称,则可以使用ALB并将请求路由到集群中的特定网关服务。您必须在ALB中定义基于路径的规则。
或者您可以在负载均衡器后面设置trarfik入口控制器,该控制器可以将流量路由到特定的网关服务。
https://stackoverflow.com/questions/68172653
复制相似问题