首页/开发/CI/CD 与发布速查/NGINX Ingress 金丝雀注解
发布策略60 条

NGINX Ingress 金丝雀注解

Ingress-NGINX 用注解实现金丝雀:给金丝雀 Ingress 设置 canary 标记与权重,按比例或 header/cookie 把请求分流到新版本服务。

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

NGINX Ingress 金丝雀注解是什么

Ingress-NGINX 用注解实现金丝雀:给金丝雀 Ingress 设置 canary 标记与权重,按比例或按请求头、Cookie 把请求分流到新版本服务。主 Ingress 与金丝雀 Ingress 指向不同 Service,新版本单独一组工作负载,回退只需把权重调回零或删除金丝雀 Ingress。权重按请求独立抽样,样本较小时实际比例会有波动,观察窗口要留足。负载均衡与健康检查按各自服务的配置执行,金丝雀与主版本互不影响。

基本信息

开启canary 注解设为 true
权重canary-weight 取 0 到 100
定向canary-by-header 与 canary-by-cookie
优先级头或 Cookie 命中优先于权重
回退权重归零或移除金丝雀 Ingress
组合权重与定向可同时配置,定向优先命中
验证方式带请求头直连网关,确认命中金丝雀实例

常用注解

注解作用取值
canary声明该 Ingress 为金丝雀true
canary-weight按比例分流0 到 100 的整数
canary-by-header按请求头定向头名,配合值使用
canary-by-cookie按 Cookie 定向Cookie 名

金丝雀 Ingress

金丝雀 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  # 声明为金丝雀并设置权重
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "10"
    # 定向:带指定请求头的流量优先进入
    nginx.ingress.kubernetes.io/canary-by-header: x-canary
    nginx.ingress.kubernetes.io/canary-by-header-value: "true"

典型使用场景

  • 小比例放量:先用个位数权重验证新版本,再逐步提高
  • 内部试用:用请求头把内部流量定向到新版本,外部用户不受影响
  • 定向验证:给测试账号设置 Cookie,验证登录后路径的新版本行为
  • 快速回退:权重归零即刻恢复全量走主版本
  • 多服务共用网关:每个服务各自声明金丝雀规则,互不影响
  • 功能预演:正式放量前用定向头单独走一遍新版本关键接口
  • 放量观测:观察请求指标中两版本的错误率与延迟,再决定下一步权重
主 Ingress 与金丝雀 Ingress 指向不同 Service:新版本单独一组工作负载,回退只需改权重。请求头与 Cookie 分流适合先验证功能,权重分流适合验证稳定性,两者可组合使用。
注解值类型要按文档写:布尔与数字常以字符串形式给出,类型写错规则不生效。

易错点

  • 注解值类型写错(布尔/字符串):规则不生效,流量全部走主版本
  • 金丝雀与主版本共用同一 Service:两版本混在同一负载内,比例不可控
  • 同一主机名下存在多条规则时优先级不明确:流量走向难以预测,先清理冲突规则再放量
  • 只改权重不看指标:放量节奏与观测脱节,问题发现滞后

数据来源与参考

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