2

我正在尝试在 kubernetes 中部署具有负载平衡的应用程序

下面是我的预期部署图

在此处输入图像描述

理想情况下,应用程序由一组使用 k8s 部署的 pod 部署,类型为“后端”

通常,用户实例存储在存档中。并根据请求动态恢复到其中一个 pod,在那里停留 TTL 时间(比如 30 分钟),然后删除并备份到存档中。

理想情况下,负载平衡由一组使用 k8s 部署的 pod 部署,类型为“前端”。

理想情况下,前端配置为带有“sticky = host”的第 7 层会话粘性。主机等于后端 pod 的 UID

用户通过 SOAP 消息请求服务,该消息在其正文中包含参数“host”和“user”。

当 SOAP 消息到达前端时,会从消息正文中提取“主机”值。

如果“host”值有效,则 SOAP 消息被转发到相应的后端 pod(其 UID 等于主机值)。否则,分配一个随机的后端 pod。

(此处的处理是特定于应用程序的)在后端 pod 中,应用程序通过“user”的值检查用户实例的可用性。

如果已经存在,就使用它;否则,尝试从存档中恢复;如果恢复失败(新用户),则创建一个新用户实例。

我四处搜寻,并没有找到任何类似的例子。尤其是layer7会话粘性配置,以及自定义获取传入消息体粘性值的实现。

4

1 回答 1

0

这听起来像是一个通过前端负载均衡器进行身份验证的用例。你看过 Istio 和大使吗?似乎 Istio 和 Envoy 可以提供服务网格来将请求路由到 pod。然后,您必须在 Ambassador 中编写一个自定义插件模块,以创建您正在寻找的特定路由和身份验证机制。

大使自定义认证服务示例:https ://www.getambassador.io/user-guide/auth-tutorial

https://www.getambassador.io/user-guide/with-istio

这种自定义的粘性会话路由也可以使用其他 API 网关完成,但仍使用 Istio 路由到不同的 pod。但是,最好将 pod 定义为单独的服务,以便 API 网关(Ambassador、Kong、Nginx)根据消息正文的参数更轻松地进行分段。

于 2018-07-18T22:03:40.387 回答