Ingress-Nginx Canary灰度“无感微调”的关键在于权重配置的可控性、可观测性与可回退性;需满足host/path一致、独立Service、Controller≥v1.0.0三前提,按2%→5%→10%→20%→50%渐进调整,配合熔断、染色、标签隔离及探针优化。
要让 Ingress-Nginx 的 Canary 灰度发布真正支撑线上业务的“无感微调”,关键不在堆参数,而在于权重配置的可控性、可观测性与可回退性。流量权重(canary-weight)是最常用也最容易误用的方式——看似简单设个 5% 或 10%,但若缺乏配套机制,极易引发监控盲区、突发抖动或验证滞后。
不是所有 Ingress 都能直接开 canary-weight,需确保:
host 和 path 规则,仅通过注解区分行为svc-prod 和 svc-canary),且各自 Service 关联不同版本的 Deployment权重值本身是整数(0–100),但“无感”不等于“静态固定”,而应具备渐进性与上下文感知:
nginx.ingress.kubernetes.io/canary-weight: "2" 表示约 2% 流量进入灰度服务仅靠注解无法实现业务无感,必须联动以下能力:
5xx_rate_5m > 1% 或 p95_latency > 2× baseline,触发脚本自动将权重置 0 并告警X-Canary: "true" 响应头,便于后端日志识别灰度请求,避免问题归因混淆track: canary 标签,并在监控大盘中单独聚合该标签下的 QPS、错误率、延迟,与主干流量并列对比很多团队踩坑后才发现权重“没生效”或“切多了”,本质是规则冲突或配置遗漏:
canary-by-header 和 canary-weight:前者优先级更高,会覆盖权重逻辑 —— 若需混合策略,应明确 header 仅用于内部测试员,权重用于大众灰度