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

如何使用Nginx Plus Ingress实现金丝雀部署中的粘性会话?

用Nginx Plus Ingress实现金丝雀部署与粘性会话

要在Nginx Plus Ingress中实现你需要的「金丝雀权重分配+已有会话粘性保留」效果,核心是通过Nginx Plus专属的Ingress注解组合配置,具体步骤如下:

1. 配置主服务Ingress(echo-v1)

先为主服务echo-v1创建Ingress,同时开启会话粘性,确保已有会话固定路由到v1,不受金丝雀规则影响:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: echo-main
  annotations:
    # 开启基于Cookie的会话粘性
    nginx.org/affinity: "cookie"
    # 自定义粘性Cookie名称,可按需修改
    nginx.org/affinity-cookie-name: "ECHO_SESSION"
    # 设置Cookie过期时间,示例为1小时
    nginx.org/affinity-cookie-expires: "1h"
    # Cookie生效路径
    nginx.org/affinity-cookie-path: "/"
spec:
  ingressClassName: nginx-plus # 指定使用Nginx Plus IngressClass
  rules:
  - host: echo.example.com # 替换为你的实际域名
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: echo-v1
            port:
              number: 80

2. 配置金丝雀服务Ingress(echo-v2)

为echo-v2创建金丝雀Ingress,通过权重控制新会话的流量分配,同时确保已有粘性会话的请求不会被路由到金丝雀服务:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: echo-canary
  annotations:
    # 标记当前Ingress为金丝雀实例
    nginx.org/canary: "true"
    # 设置金丝雀服务接收的新会话权重(0-100),示例为20%新流量走v2
    nginx.org/canary-weight: "20"
    # 基于Cookie过滤金丝雀流量:仅匹配无ECHO_SESSION Cookie的请求
    nginx.org/canary-by-cookie: "ECHO_SESSION"
    nginx.org/canary-by-cookie-value: "~^$" # 正则匹配空值或不存在的Cookie
spec:
  ingressClassName: nginx-plus
  rules:
  - host: echo.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: echo-v2
            port:
              number: 80

3. 权重调整与验证逻辑

  • 权重调整:直接修改金丝雀Ingress的nginx.org/canary-weight值即可:
    • 设为0:所有新会话都路由到echo-v1
    • 设为100:所有新会话都路由到echo-v2
    • 中间值(如50):按比例分配新会话流量
  • 验证效果:
    • 已有会话:携带ECHO_SESSION Cookie的请求,无论权重如何调整,始终返回echo-v1的版本号
    • 新会话:清除Cookie后发起请求,会按权重比例随机路由到echo-v1或echo-v2

核心注解说明

注解作用
nginx.org/affinity: cookie开启基于Cookie的会话粘性
nginx.org/affinity-cookie-name自定义用于粘性会话的Cookie名称
nginx.org/canary: "true"将Ingress标记为金丝雀实例,仅处理符合规则的流量
nginx.org/canary-weight控制金丝雀服务接收的新流量权重(范围0-100)
nginx.org/canary-by-cookie指定用于过滤金丝雀流量的Cookie名称
nginx.org/canary-by-cookie-valueCookie的匹配规则,这里用~^$匹配无Cookie或空Cookie的请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:20:41