说明
下面使用的 ingress-nginx 的版本是 0.26.1。
nginx-ingress作为K8S集群对外的流量入口,充当K8S集群内各个service的反向代理。日常工作中我们经常需要对服务进行版本更新升级,为此我们经常使用到的发布方式有滚动升级、分批暂停发布、蓝绿发布以及灰度发布等不同的发布操作。所以下面介绍下,通过配置nginx annotations来实现灰度发布。
ingress-nginx金丝雀
原有的 ingress 不需要改变
1 | apiVersion: extensions/v1beta1 |
创建 canary
1 | apiVersion: extensions/v1beta1 |
效果
1 | [root@ingress]# curl http://test.sy.com/abc/check_health.jsp |
上面的规则按优先顺序进行评估。优先顺序如下:canary-by-header -> canary-by-cookie -> canary-weight
注意:
当将入口标记为canary时,除了nginx.ingress.kubernetes.io/load-balance
和之外,所有其他非canary注释都将被忽略(从相应的主入口继承)nginx.ingress.kubernetes.io/upstream-hash-by
已知的限制 目前,每个Ingress规则最多可以应用一个canary入口。