🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ### **灰度发布** ##### **概念** 根据HTTP请求的Header参数或Cookie来判断将请求转发到后端的哪个服务 说明:概念与截图取自阿里云容器服务文档 ![](https://img.kancloud.cn/36/75/3675a30d51ee8a1abfebde0d9d15cb97_410x524.png) ##### **目标** 使用app.com这个域名去访问灰度服务与在线服务;如果Http请求的Header中有“version: grey”这个key-value,那么就转发到灰度服务;否则转发到在线服务 ##### **实现方案** * 在线服务与灰度服务各自对应一套Deployment + Service + Ingress * 在线服务与灰度服务的Ingress要使用相同的域名与路径,即除了Header以外,其他的应该都是一致的 * 在线服务的Ingress不需要设置Annotation,灰度服务的Ingress要设置Annotation * 在线服务与灰度服务可以在不同的命名空间下 ##### **示例** * 发布生产服务(在线服务) ![](https://img.kancloud.cn/2b/7e/2b7e3b45c2da3b061977db459af05d15_660x329.png) * 发布灰度服务 ![](https://img.kancloud.cn/bb/61/bb61f459b7b6873cd283ba6cba769107_743x352.png) ##### **更多参数** * 目标: Header中包含key为“version”,value中包含“grey”字符串的请求将会分发给灰度服务 Annotation的配置应该为: ``` nginx.ingress.kubernetes.io/canary: “true” nginx.ingress.kubernetes.io/canary-by-header: “version” nginx.ingress.kubernetes.io/canary-by-header-pattern: “*grey*” ``` * 目标:Cookie中包含key为”version”,value为”grey”的请求将分发给灰度服务 说明:无法通过Annotation配置达到这个效果,但是Cookie的配置会有如下效果 配置: ``` nginx.ingress.kubernetes.io/canary: “true” nginx.ingress.kubernetes.io/canary-by-cookie: “version” ``` 效果:当cookie中包含version这个key,且它值为always时,该http请求将会转发到灰度服务,否则将转发到在线服务。 Cookie简介:Http的Header中有一个预留字段Cookie,该字段的值是多个key-value对,每个key-value对用分号隔开,比如 ``` $ curl x.x.x.x –H “Cookie: version=xx;region=bejing” ``` ### **蓝绿发布** ##### **概念** 按照一定的比例把请求分发到不同的后端服务 说明:概念与截图取自阿里云容器服务文档 ![](https://img.kancloud.cn/6d/21/6d21c230fe4fbdcbc1bedc54aa9a5521_449x503.png) ##### **目标** 30%的请求转发到灰度服务,70%的请求转发到在线服务 ##### **实现方案** 除了灰度服务的Ingress的Annotation不同外,其他的与灰度发布中的一样。 灰度的Ingress的Annotation的配置如下: ``` nginx.ingress.kubernetes.io/canary: “true” nginx.ingress.kubernetes.io/canary-weight: “30” ``` ### **参考** * https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#canary