基于服务权重的 Canary Ingress 就简单了,直接定义需要导入的流量比例,这里以导入 10% 流量到 v2 版本为例 (如果有,先删除之前的 Canary Ingress):
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/canary: "true" nginx.ingress.kubernetes.io/canary-weight: "10" name: nginx-canary spec: rules: - host: canary.example.com http: paths: - backend: serviceName: nginx-v2 servicePort: 80 path: /测试访问:
$ for i in {1..10}; do curl -H "Host: canary.example.com" ; done; nginx-v1 nginx-v1 nginx-v1 nginx-v1 nginx-v1 nginx-v1 nginx-v2 nginx-v1 nginx-v1 nginx-v1可以看到,大概只有十分之一的几率由 v2 版本的服务响应,符合 10% 服务权重的设置。
存在的缺陷虽然我们使用 Nginx Ingress 实现了几种不同姿势的金丝雀发布,但还存在一些缺陷:
相同服务的 Canary Ingress 只能定义一个,所以后端服务最多支持两个版本。
Ingress 里必须配置域名,否则不会有效果。
即便流量完全切到了 Canary Ingress 上,旧版服务也还是必须存在,不然会报错。
总结本文全方位总结了 Nginx Ingress 的金丝雀发布用法,虽然 Nginx Ingress 在金丝雀发布这方面的能力有限,并且还存在一些缺陷,但基本也能覆盖一些常见的场景,如果集群中使用了 Nginx Ingress,并且发布的需求也不复杂,可以考虑使用这种方案。
参考资料Nginx Ingress 金丝雀注解官方文档:
在 TKE 上部署 Nginx Ingress: https://cloud.tencent.com/document/product/457/47293
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!