You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于TenantId实现Ingress会话粘性与负载均衡的配置咨询

基于TenantId的会话粘性与负载均衡配置方案

核心需求回顾

通过请求Header/Cookie中的TenantId实现会话亲和,同时保证每个PowerShell Pod承载的租户数量最少;仅当所有Pod都分配了租户后,才将新租户随机分配到任意Pod。


Nginx Ingress 实现方案

Nginx Ingress可直接通过配置满足需求,利用一致性哈希算法基于TenantId分配请求,同时保证负载均匀。

配置思路

优先提取Header中的TenantId,无Header则取Cookie中的值作为哈希键,通过一致性哈希映射到后端Pod。该算法能保证不同TenantId均匀分散到各Pod,且Pod扩容缩容时仅少量租户的映射会变动。

具体Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: powershell-service-ingress
  annotations:
    nginx.ingress.kubernetes.io/configuration-snippet: |
      # 优先使用Header的TenantId, fallback到Cookie
      map $http_tenantid $tenant_hash_key {
        default $cookie_TenantId;
        ~.+ $http_tenantid;
      }
    nginx.ingress.kubernetes.io/upstream-hash-by: "$tenant_hash_key"
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /powershell
        pathType: Prefix
        backend:
          service:
            name: powershell-listener-service
            port:
              number: 80

HAProxy Ingress 实现方案

HAProxy同样支持基于TenantId的一致性哈希路由,适配现有集群环境。

配置思路

通过自定义ACL提取TenantId,使用一致性哈希算法将相同TenantId的请求固定到同一Pod,同时保证负载均衡。

具体Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: powershell-service-ingress
  annotations:
    haproxy.org/configuration-snippet: |
      # 提取TenantId作为哈希键
      http-request set-var(req.tenant_id) req.hdr(TenantId) if { req.hdr(TenantId) -m found }
      http-request set-var(req.tenant_id) req.cookie(TenantId) if { req.cookie(TenantId) -m found }
      balance hash var(req.tenant_id) consistent
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /powershell
        pathType: Prefix
        backend:
          service:
            name: powershell-listener-service
            port:
              number: 80

自定义路由Pod选型(若Ingress方案无法满足精细化需求)

如果需要更灵活的租户-Pod映射控制(比如动态调整负载阈值、实时监控租户分布),可以选择以下方案:

  • Envoy Proxy:作为独立路由Pod或Sidecar,通过Wasm插件或Lua脚本实现自定义路由逻辑。Envoy原生支持Kubernetes服务发现,弹性扩容只需调整Pod副本数,性能优异且生态成熟。
  • Spring Cloud Gateway:基于Java生态的网关服务,编写自定义过滤器即可实现TenantId的负载均衡与会话粘性。它天然适配Kubernetes,扩容简单,适合熟悉Spring技术栈的团队。
  • 轻量自定义服务:用Go/Node.js编写极简路由服务,维护租户-Pod映射表,新租户到来时分配到当前负载最低的Pod。这种方案灵活性最高,但需要自行实现服务发现和健康检查逻辑,适合有开发能力的团队。

内容的提问来源于stack exchange,提问作者Ayibogan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:10:25