higress灰度发布功能:基于权重的金丝雀部署完整教程
在云原生应用部署中,如何安全地将新版本推向用户是一个关键挑战。金丝雀部署(Canary Deployment)作为灰度发布的一种重要模式,允许您将一部分流量路由到新版本,通过权重控制实现平滑过渡。本文将详细介绍如何使用 higress 网关实现基于权重的金丝雀部署,帮助您降低发布风险,提升系统稳定性。
什么是金丝雀部署?
金丝雀部署(Canary Deployment)是一种风险控制策略,通过将少量流量分配给新版本服务进行验证,逐步扩大流量比例,最终完成全量发布。higress 网关通过 canary-weight 注解实现流量权重分配,支持精确到百分比的流量控制。
准备工作
开始前请确保:
- 已安装 higress 网关(参考 README_ZH.md)
- 拥有两个版本的服务(如 v1 稳定版和 v2 金丝雀版)
- 具备 Kubernetes 集群操作权限
实现步骤
1. 部署基础服务
首先部署两个版本的后端服务,作为金丝雀部署的目标服务。
# 稳定版服务 (v1)
apiVersion: v1
kind: Service
metadata:
name: infra-backend-v1
namespace: higress-conformance-infra
spec:
selector:
app: backend-v1
ports:
- port: 8080
targetPort: 8080
---
# 金丝雀版服务 (v2)
apiVersion: v1
kind: Service
metadata:
name: infra-backend-v2
namespace: higress-conformance-infra
spec:
selector:
app: backend-v2
ports:
- port: 8080
targetPort: 8080
2. 配置金丝雀规则
通过 Ingress 资源的注解配置权重路由策略。higress 支持两种核心注解:
nginx.ingress.kubernetes.io/canary: "true"- 启用金丝雀功能nginx.ingress.kubernetes.io/canary-weight: "30"- 设置金丝雀流量权重(0-100)
示例配置
# 金丝雀版本 (30% 流量)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-echo-canary
namespace: higress-conformance-infra
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "30"
spec:
ingressClassName: higress
rules:
- host: canary.higress.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: infra-backend-v2
port:
number: 8080
---
# 稳定版本 (70% 流量)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-echo-stable
namespace: higress-conformance-infra
spec:
ingressClassName: higress
rules:
- host: canary.higress.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: infra-backend-v1
port:
number: 8080
3. 权重配置详解
higress 支持 0-100 之间的权重设置,对应不同的流量分配策略:
| 权重值 | 效果 | 应用场景 |
|---|---|---|
| 0 | 所有流量走稳定版 | 暂停金丝雀发布 |
| 1-99 | 按百分比分配流量 | 灰度验证阶段 |
| 100 | 所有流量走金丝雀版 | 完成金丝雀发布 |
完整配置示例可参考测试用例 test/e2e/conformance/tests/httproute-canary-weight.yaml。
4. 验证部署效果
部署完成后,可通过以下方式验证流量分配:
- 发送多次请求并统计响应来源:
for i in {1..100}; do curl http://canary.higress.io/version; done | sort | uniq -c
高级配置
结合 Header 路由
higress 支持同时使用权重和 Header 条件进行流量控制,例如:
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
nginx.ingress.kubernetes.io/canary-by-header-value: "always"
上述配置将:
- 20% 随机流量路由到金丝雀版本
- 携带
X-Canary: always头的请求强制路由到金丝雀版本
完整配置示例见 test/e2e/conformance/tests/httproute-canary-header.yaml。
流量标签插件
higress 提供专门的流量标签插件,支持更复杂的流量拆分策略。该插件位于 plugins/wasm-go/extensions/traffic-tag/,可基于用户标签、地理区域等维度进行精细化路由。
注意事项
- 权重总和:所有金丝雀规则的权重总和建议不超过 100
- 命名空间隔离:确保 Ingress 资源与服务在同一命名空间
- 版本回滚:如需紧急回滚,将
canary-weight设置为 0 即可 - 监控告警:建议配置流量比例监控,异常时及时告警
总结
通过 higress 的金丝雀部署功能,您可以安全地验证新版本服务,逐步将流量从旧版本迁移到新版本。这种基于权重的精细化流量控制,有效降低了发布风险,是 DevOps 流程中的关键一环。
更多高级用法可参考:
- 官方文档:docs/architecture.md
- 示例配置:samples/
- 插件开发:plugins/
如果您在使用过程中遇到问题,欢迎通过 CONTRIBUTING_CN.md 中的方式参与社区讨论。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考





