首页/开发/CI/CD 与发布速查/按 header / cookie 的定向灰度
发布策略60 条

按 header / cookie 的定向灰度

权重之外的精确分流:用 header、cookie 把内部人员与尝鲜用户先导到新版本,再叠加权重放量给普通用户。

CI/CD 与发布速查开发更新于 2026-10-13

定向灰度是什么

权重分流之外的精确控制:按请求 header 或 cookie 判断身份,把内部团队、受邀用户、特定客户端先导到新版本;与权重规则同时存在时,定向命中的请求优先进入灰度,其余流量再按百分比放量。落点常见于网关与服务网格:ingress-nginx 的金丝雀注解、Istio VirtualService 的 header 匹配、自研网关的规则引擎。

基本信息

载体请求 header(如 x-canary: true)或 cookie(如 canary=1)
命中对象内部员工、种子用户、指定 App 版本、排障账号
与权重关系定向命中优先评估,未命中者按权重分流
生效位置网关 / 负载均衡 / 服务网格的匹配规则
退场全量放量完成后删除定向规则,避免行为分叉

典型使用场景

  • 内部先行:让团队在日常使用中先走过新版本,早期问题反馈成本最低
  • 邀请制尝鲜:给种子用户发 cookie,收集真实反馈同时控制舆论面
  • 客户端联动:新 App 版本携带专用 header,配合服务端灰度放量
  • 问题复现:给排障账号打 header,固定路由到可疑版本做定位
  • 紧急止损:保留定向通道,回滚验证时先把关键账号导到旧版本

ingress-nginx 定向灰度

ingress-nginx 定向灰度
# Ingress 注解方式:header 命中进灰度
nginx.ingress.kubernetes.io/canary: 'true'
nginx.ingress.kubernetes.io/canary-by-header: 'x-canary'
nginx.ingress.kubernetes.io/canary-by-header-value: 'true'
# cookie 方式:携带指定 cookie 的请求进灰度
nginx.ingress.kubernetes.io/canary-by-cookie: 'canary'
# 权重放量:未命中定向规则的流量按比例分流
nginx.ingress.kubernetes.io/canary-weight: '5'

分流规则优先级

规则命中行为备注
header 匹配直接进灰度版本值与注解配置需一致
cookie 匹配直接进灰度版本客户端需先取得该 cookie
权重规则其余流量按百分比分流定向规则之后评估
均未命中留在旧版本权重分母是剩余流量
定向依赖客户端携带 header 或 cookie:爬虫与直连流量并不携带,实际灰度比例与直觉不符,评估影响面时要单独计算这部分。
先让团队走新版本再打开权重:出问题时受影响的是可解释人群,反馈链路也最短,适合作为放量前的第一步。

易错点

  • 不考虑无 cookie 流量(爬虫、直连、老客户端):实际比例与配置不一致,观测结论失真
  • 定向规则长期不清理:新老行为分叉长期存在,测试矩阵被越拖越大
  • 把内部账号规则当永久白名单:全量后仍有人走旧版本,事故定位时解释成本高
  • header 值不校验来源:外部伪造同名 header 可提前进入灰度版本

数据来源与参考

  • Ingress-NGINX 文档《Canary Deployments》
  • Istio 文档《VirtualService》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌