Ingress进行灰度发布

本文详细介绍了如何使用 Kubernetes Ingress 实现灰度发布,通过配置权重策略,将60%流量导向新版本nginx服务,40%流向老版本,确保平稳过渡。涉及的配置包括 ingress 对两个版本服务的代理和canary功能的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在一些业务在有新版本上线时,通常新版本即使在自己本地测试后,发布到线上环境也可能会出现一些问题,就会回滚到老版本,现在我们新版本的上线都会采取灰度发布,先让一小部分的流量请求到新版本,其余流量请求到老版本,等新版本验证没问题,逐渐让流量都请求到新版本,然后下架老版本。
下面就用ingress来做下灰度发布,首先还是需要部署两个服务,一个代表老版本,一个代表新版本,我这边还是用nginx来测试,两个nginx服务部署如下:
在这里插入图片描述然后用ingress去分别代理这两个服务,我们这里采取权重的策略,来做流量的分发,达到灰度发布的效果:
ingress代理老版本的服务yaml如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress-limit
spec:
ingressClassName: nginx
rules:
- host: csh-limit.com
http:
paths:
- path: /index.html
pathType: Prefix
backend:
serviceName: nginx-svc
servicePort: 80

igress代理新版本服务yaml如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-cancry-v2
annotations:
nginx.ingress.kubernetes.io/canary: “true”
nginx.ingress.kubernetes.io/canary-weight: “60”
spec:
ingressClassName: nginx
rules:
- host: csh-limit.com
http:
paths:
- path: /index.html
pathType: Prefix
backend:
serviceName: nginx-svc-v2
servicePort: 80

注:nginx.ingress.kubernetes.io/canary: 用来打开ingress进行灰度发布的功能
nginx.ingress.kubernetes.io/canary-weight: 用来设置权重大小,默认100

最后将这两个ingress进行创建,并测试:
在这里插入图片描述如图已经有60%的流量请求到新版本。

Kubernetes Ingress-Nginx是一个用于管理Kubernetes集群中的Ingress资源的工具。它支持使用Ingress Annotations来实现不同场景下的灰度发布和测试。其中,Nginx Annotations支持基于Cookie的切分流量来实现灰度发布。具体实现方式是通过判断用户请求中的Cookie是否存在灰度标识Cookie来确定是否为灰度用户,从而决定是否返回灰度版本的服务。 在配置中,可以使用以下Annotations来实现灰度发布: - `nginx.ingress.kubernetes.io/canary`:可选值为true/false,表示是否开启灰度功能。 - `nginx.ingress.kubernetes.io/canary-by-cookie`:灰度发布Cookie的键。当键的值等于"always"时,灰度触发生效;其他值则不会走灰度环境。 例如,如果请求的Cookie中包含名为"vip_user"的键,并且值为"always",则会生效灰度配置,访问灰度版本的服务。 要实际执行灰度发布配置,可以使用以下命令: ``` kubectl apply -f ingress-gray.yaml ``` 如果想查看服务并获取Ingress的外部端口,可以使用以下命令: ``` kubectl -n ingress-nginx get service ``` 这将显示Ingress-Nginx控制器的服务信息,包括集群IP、外部IP和端口等。 #### 引用[.reference_title] - *1* [【云原生 | Kubernetes 实战】20、K8s Ingress 实现业务灰度发布](https://blog.youkuaiyun.com/weixin_46560589/article/details/128505651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [【Kubernetes】第十篇 - 灰度发布的介绍与实现](https://blog.youkuaiyun.com/ABAP_Brave/article/details/129220116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值