前端灰度发布方案

2023/06/14

前端灰度发布方案

一.方案描述

前端发布过程中会优先发布一个auto-canary服务,auto-canary与正常服务相同,使用的是最新版本的镜像.除此之后会在auto-canary的容器nginx配置中添加 nginx配置add_header设置特定的Cookie键值对sp-canary=always,当请求进入auto-canary容器后,都会带上这个特定的Cookie.

然后我们在ingress-nginx 上配置nginx.ingress.kubernetes.io/canary-by-cookie,当带有sp-canary=always的Cookie时将该请求路由到auto-canary容器.

二.方案实施步骤

2-1.配置ingress-nginx的annotations

ingress-nginx中支持金丝雀发布,

  • nginx.ingress.kubernetes.io/canary: 是否启用金丝雀发布
  • nginx.ingress.kubernetes.io/canary-by-cookie: 判断是否进行金丝雀路由的Cookie名称,值为always时路由,never时不进行金丝雀路由
  • nginx.ingress.kubernetes.io/canary-weight: 应路由到金丝雀入口中指定的服务的随机请求的基于整数的(0-)百分比
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-cookie: "canary"
    nginx.ingress.kubernetes.io/canary-weight: "10"

相关ingress-nginx文档

PS: 使用nginx.ingress.kubernetes.io/canary之后,会导致其他非canary相关的annotations失效,除了 nginx.ingress.kubernetes.io/load-balance,

nginx.ingress.kubernetes.io/upstream-hash-by

session相关annotations

2-2.前端auto-canary容器发布时nginx增加cookies响应头

在前端canary服务的nginx容器中通过add_header设置Set-Cookie的响应头,将sp-canary的值设置为always

add_header会在响应码为 200, 201 , 204, 206, 301, 302, 303, 304, 307 , 308将我们指定字段添加到响应头中,可以加在 http, server, location, if in location中

add_header Set-Cookie "sp-canary=always"

Nginx示例:

http {

    add_header Set-Cookie "sp-canary=always";

    server {
    listen 8080;
    server_name ${domian};
    location / {
       root /app;
    }
  }

}

相关nginx文档

三.发布流程

3-1.容器的发布过程

容器的发布过程

3-2.发布过程中的流量变化

发布中的流量图

能摸鱼就很舒服

Show Disqus Comments
扫码关注公众号:纯洁的微笑
发送 290992
即可立即永久解锁本站全部文章