higress灰度发布功能:基于权重的金丝雀部署完整教程

higress灰度发布功能:基于权重的金丝雀部署完整教程

【免费下载链接】higress Next-generation Cloud Native Gateway | 下一代云原生网关 【免费下载链接】higress 项目地址: https://gitcode.com/GitHub_Trending/hi/higress

在云原生应用部署中,如何安全地将新版本推向用户是一个关键挑战。金丝雀部署(Canary Deployment)作为灰度发布的一种重要模式,允许您将一部分流量路由到新版本,通过权重控制实现平滑过渡。本文将详细介绍如何使用 higress 网关实现基于权重的金丝雀部署,帮助您降低发布风险,提升系统稳定性。

什么是金丝雀部署?

金丝雀部署(Canary Deployment)是一种风险控制策略,通过将少量流量分配给新版本服务进行验证,逐步扩大流量比例,最终完成全量发布。higress 网关通过 canary-weight 注解实现流量权重分配,支持精确到百分比的流量控制。

准备工作

开始前请确保:

  1. 已安装 higress 网关(参考 README_ZH.md
  2. 拥有两个版本的服务(如 v1 稳定版和 v2 金丝雀版)
  3. 具备 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. 验证部署效果

部署完成后,可通过以下方式验证流量分配:

  1. 发送多次请求并统计响应来源:
for i in {1..100}; do curl http://canary.higress.io/version; done | sort | uniq -c
  1. 预期结果:约 30% 响应来自 v2 版本,70% 来自 v1 版本。

  2. 通过 higress 控制台监控流量分布: 流量监控

高级配置

结合 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/,可基于用户标签、地理区域等维度进行精细化路由。

注意事项

  1. 权重总和:所有金丝雀规则的权重总和建议不超过 100
  2. 命名空间隔离:确保 Ingress 资源与服务在同一命名空间
  3. 版本回滚:如需紧急回滚,将 canary-weight 设置为 0 即可
  4. 监控告警:建议配置流量比例监控,异常时及时告警

总结

通过 higress 的金丝雀部署功能,您可以安全地验证新版本服务,逐步将流量从旧版本迁移到新版本。这种基于权重的精细化流量控制,有效降低了发布风险,是 DevOps 流程中的关键一环。

更多高级用法可参考:

如果您在使用过程中遇到问题,欢迎通过 CONTRIBUTING_CN.md 中的方式参与社区讨论。

【免费下载链接】higress Next-generation Cloud Native Gateway | 下一代云原生网关 【免费下载链接】higress 项目地址: https://gitcode.com/GitHub_Trending/hi/higress

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值