Kubernetes Ingress:通过请求中提供的 Header/Cookie 值实现负载平衡 + 会话粘性

Kubernetes Ingress:通过请求中提供的 Header/Cookie 值实现负载平衡 + 会话粘性

我的集群中存在以下场景:

我有一个 Spring Boot RestAPI,其中有 1 个 Pod 在运行,我们在该 Pod 上接收请求。每个请求都经过标准入口,该入口路由到 PowerShell HTTP 侦听器服务,该服务同时运行 10 个 Pod。

我想要实现的是,基于提供的名为“TenantId”的标头值/cookie,Ingress 应创建会话粘性,但也应进行负载平衡,以便每个不同的“TenantId”都落在单独的 PowerShell Pod 上。仅当每个可用 Pod 上都已分配“TenantId”时,它才应分配另一个(随机)并从那里开始。

背景是,我希望每个 PowerShell Pod 只具有尽可能少的租户,同时保持会话亲和性。我尝试使用 cookie,但那个当然只会用散列 cookie 进行响应,我必须在我的 Spring Boot 应用程序的以下请求中使用它。这样做的问题是,它不会进行负载平衡,并且会使 2 个不同的 TenantId 落在同一个 Pod 上,而我们还有 9 个其他 Pod 闲置。由于会话从该请求开始就处于粘性状态,因此会对我产生负面影响。

我是否可以以某种方式配置 Ingress 以查找提供的标头值并基于该值创建会话粘性/亲和性,同时使用“随机”或“循环”逻辑对不同的 TenantIds 进行负载平衡?或者考虑自定义路由器 pod 是一种更好的方法吗?如果是,我应该使用什么来使其在尺寸调整方面也有效?

相关内容