前端灰度发布方案
一.方案描述
前端发布过程中会优先发布一个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"
PS: 使用nginx.ingress.kubernetes.io/canary之后,会导致其他非canary相关的annotations失效,除了 nginx.ingress.kubernetes.io/load-balance,
nginx.ingress.kubernetes.io/upstream-hash-by
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;
}
}
}
三.发布流程
3-1.容器的发布过程
3-2.发布过程中的流量变化
能摸鱼就很舒服
Show Disqus Comments
扫码关注公众号:纯洁的微笑
发送 290992
即可立即永久解锁本站全部文章