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 分流适合先验证功能,权重分流适合验证稳定性,两者可组合使用。
注解值类型要按文档写:布尔与数字常以字符串形式给出,类型写错规则不生效。