定向灰度是什么
权重分流之外的精确控制:按请求 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:爬虫与直连流量并不携带,实际灰度比例与直觉不符,评估影响面时要单独计算这部分。
先让团队走新版本再打开权重:出问题时受影响的是可解释人群,反馈链路也最短,适合作为放量前的第一步。