在 K8s 中考虑 src IP 和 src 端口的粘性会话

Sticky sessions considering src IP and src port in K8s

我有一个 lift 'n shift 部署类型(即绝不是云原生),我想设置粘性会话,以便请求继续由同一个 pod 处理(如果可用)(来自客户的角度)。

Client --> LB --> Ingress --> Service --> Deployment

由于 LB 执行 SNAT,我认为 service.spec.sessionAffinityConfig.clientIP 会起作用,但是因为所有请求都来自负载均衡器的相同源 IP,所以工作负载不会真正平衡部署中的所有 pods。

你能想出任何方法来考虑粘性会话行为中的源 IP 和端口对吗?

编辑 1:部署在 Oracle Cloud 中运行。我们在纯 TCP 模式(即 OSI 第 4 层)下使用 Oracle Cloud Loadbalancer 服务。

题目描述的其实是K8s默认的流量管理行为。每个 TCP 会话中的数据包都以同一个 pod 为目标。 TCP 会话从特定的源 IP(在我们的例子中是 LB)和源端口(每个会话都不同)发起,并且该会话在整个持续时间内保持“粘性”。