首页/开发/CI/CD 与发布速查/Istio 权重与灰度路由
发布策略60 条

Istio 权重与灰度路由

用 VirtualService 把流量按权重分给不同版本,或按 header、URI 等条件定向路由:支持逐步提权、内部用户先行与镜像流量。

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

Istio 权重与灰度路由

Istio 用 VirtualService 声明式描述流量路由:把请求按权重分给不同版本(route.weight),或按 headers、uri、method 等条件精确命中特定 subset;DestinationRule 先用标签把 Pod 划成 subset(如 v1、v2),路由目标就是这些 subset。典型灰度是组合两条规则:内部用户凭 header 精确进新版本,外部用户先小权重观测;另有镜像(mirror)能力把生产流量复制一份到新版本,副本响应被丢弃,用于上线前用真实流量压测。注意路由只作用于网格内流量(经 sidecar 或网关进入的请求),绕过网格直连 Pod 的调用不受控制。

基本信息

权重route.weight,按比例分配流量
条件匹配match 按 headers、uri、method 等
镜像mirror + mirrorPercentage,复制流量副本
前提DestinationRule 定义 subset(按标签选 Pod)
生效范围仅网格内流量,入口需纳入网格

典型使用场景

  • header 定向:内部测试用户带定制请求头先走新版本,问题早发现早回退。
  • 权重放量:5% 到 50% 再到 100% 逐步提权,每一步观测错误率与延迟。
  • 影子压测:mirror 把真实流量复制给新版本,验证容量与正确性而不影响线上响应。
  • 路径灰度:新增 API 路径单独路由到新版本,老路径保持不变。
  • AB 实验:按条件把流量分流到两个版本,对比业务指标后择优。
  • 发布预检:先用镜像流量跑一段,提前发现性能退化再开始正式放量。

header 定向 + 权重

header 定向 + 权重
http:
- match:
  - headers: {x-canary: {exact: "true"}}  # 内部用户精确命中
  route:
  - destination: {host: web, subset: v2}
- route:
  - destination: {host: web, subset: v1}
    weight: 95  # 稳定版本
  - destination: {host: web, subset: v2}
    weight: 5  # 新版本 5%

路由机制对比

机制关键字段用途
权重分配route.weight按比例放量
条件匹配match headers/uri/method精确人群或路径
镜像mirror/mirrorPercentage影子流量验证
超时重试timeout/retries抖动时降低错误率
权重建议合计为 100:不足 100 时剩余流量按比例分配,容易与预期不符。
版本标签要先打进 Pod(如 version: v2),subset 用标签选择器圈定;目标不存在的路由会直接报错。
镜像流量是发后不理:副本响应被丢弃,但副作用(写库、发消息)真实发生,慎对写路径开启。

易错点

  • subset 未定义或标签打错:路由目标不存在,请求 503;先查 DestinationRule 与 Pod 标签。
  • 权重总和不为 100:剩余流量被按比例摊掉,现实与预期不一致;显式凑满 100。
  • 缺少兜底路由:条件写错导致部分请求 404;末尾保留到稳定版本的默认路由。
  • 镜像开在写路径:副作用真实产生,可能造成重复写入;只对读路径或只读副本使用。
  • 以为直连 Pod 也受控:绕过网格的调用不经 VirtualService;入口统一走网关或网格代理。

数据来源与参考

  • Istio 文档《VirtualService》
  • Istio 文档《Traffic Management》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌