如何将具有相同查询参数的请求路由到相同的后端服务器?

如何将具有相同查询参数的请求路由到相同的后端服务器?

我有三个安装了 ModSecurity 的 Nginx 反向代理服务器,充当将请求路由到我的 Kubernetes 集群的 WAF 服务器ingress-nginx,Istio 服务网格安装在 Kubernetes 集群上,Nginx 服务器和 ingress-nginx 都是免费版本。

我的大多数应用程序都存在于 Kubernetes 集群上,除了三台后端服务器,其中有一个特定的应用程序不能在 Kubernetes 集群上运行。

有如下 Web 套接字请求:

wss://some.domain.com/socket.io/app/?roomId=2

我想根据查询参数实现会话持久性,这意味着我需要将具有相同roomId查询参数的请求路由到 Kubernetes 集群之外的相同后端服务器,在搜索互联网后,我有几种解决方案,例如使用 HAProxy 粘表或升级到 Nginx Plus 以便我可以使用它的会话持久性功能,甚至使用 Istio 的动态路由,但是,我不知道最好的方法是什么。

我为每个后端服务器创建了一个endpoint如下所示的服务器:

apiVersion: v1
kind: Endpoints
metadata:
  name: backend-server-1
subsets:
  - addresses:
      - ip: 192.168.1.100
    ports:
      - port: 80

但是我不知道如何创建 Kubernetes 服务、Istio VirtualServices 和正确的 ingress-nginx 定义来实现我的目标,为每个后端服务器编写一个端点可能是一个错误,我不确定我是否走在正确的轨道上。

问题:如何将具有相同查询参数的请求发送roomId到不在 Kubernetes 集群上的同一后端服务器,以及我应该在哪一层配置它们(边缘 Nginx 节点、Ingress-nginx、Istio、添加的 HAProxy 层等)?

任何帮助都值得感激,提前致谢。如果需要更多信息,请告诉我,我为信息不足提前道歉。

相关内容