登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
科技
›
K8s 灰度发布实战:通过 Ingress 注解轻松实现流量分割 ...
K8s 灰度发布实战:通过 Ingress 注解轻松实现流量分割与渐进式发布
[ 复制链接 ]
缄戈
2025-6-9 18:33:04
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
在现代微服务架构中,应用的更新和发布是一个高频且关键的操作。如何在不影响用户体验的前提下,安全、平稳地将新版本应用推送到生产环境,是每个开发者和运维团队必须面对的挑战。灰度发布(Gray Release)作为一种渐进式发布策略,能够有效降低发布风险,而 Kubernetes 的 Ingress 注解功能为我们提供了一种简单而强大的实现方式。
本文将带你深入浅出地了解如何通过
Ingress 注解
在 Kubernetes 中实现灰度发布,并逐步掌握流量分割、权重控制等核心技巧。无论你是 Kubernetes 新手还是资深用户,都能从本文中获得实用的知识和操作指南。
什么是灰度发布?
灰度发布,也称为金丝雀发布(Canary Release),是一种渐进式的应用发布策略。它的核心思想是:
将新版本应用逐步推送给一小部分用户,观察其运行状态,确认无误后再逐步扩大范围,最终完成全量发布
。
相比于全量发布,灰度发布具有以下优势:
降低风险
:通过小范围验证,避免因新版本问题导致全局故障。
快速回滚
:如果新版本出现问题,可以快速切换回旧版本。
用户体验优化
:逐步发布可以减少对用户的影响。
Kubernetes 中的灰度发布实现方式
在 Kubernetes 中,灰度发布可以通过多种方式实现,例如:
Deployment + Service
:手动控制流量切换。
Istio
:通过服务网格实现高级流量管理。
Ingress 注解
:通过 Nginx Ingress Controller 的注解功能实现流量分割。
本文将重点介绍
Ingress 注解
的实现方式,因为它简单易用,且无需引入额外的组件。
通过 Ingress 注解实现灰度发布
Nginx Ingress Controller 提供了丰富的注解(Annotations),可以轻松实现灰度发布。以下是具体步骤:
1. 部署新旧版本应用
首先,我们需要部署两个版本的应用程序:
旧版本(v1)
:当前正在运行的生产版本。
新版本(v2)
:待发布的新版本。
1.1 创建 v1 版本 Deployment 和 Service
# v1 版本 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-v1
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
version: v1
spec:
containers:
- name: my-app
image: my-app:v1
ports:
- containerPort: 80
# v1 版本 Service
apiVersion: v1
kind: Service
metadata:
name: my-app-v1
spec:
selector:
app: my-app
version: v1
ports:
- port: 80
targetPort: 80
复制代码
1.2 创建 v2 版本 Deployment 和 Service
# v2 版本 Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-v2
spec:
replicas: 3
template:
metadata:
labels:
app: my-app
version: v2
spec:
containers:
- name: my-app
image: my-app:v2
ports:
- containerPort: 80
# v2 版本 Service
apiVersion: v1
kind: Service
metadata:
name: my-app-v2
spec:
selector:
app: my-app
version: v2
ports:
- port: 80
targetPort: 80
复制代码
2. 配置 Ingress 实现灰度发布
通过 Nginx Ingress Controller 的 canary 注解,我们可以轻松实现流量分割。
2.1 创建 Ingress 资源
以下是一个示例配置:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true" # 启用灰度发布
nginx.ingress.kubernetes.io/canary-weight: "10" # 10% 流量到新版本
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v2 # 新版本服务
port:
number: 80
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v1 # 旧版本服务
port:
number: 80
复制代码
2.2 关键注解说明
nginx.ingress.kubernetes.io/canary: "true":启用灰度发布功能。
nginx.ingress.kubernetes.io/canary-weight: "10":将 10% 的流量分配到新版本(v2),剩余 90% 的流量继续使用旧版本(v1)。
3. 逐步调整流量权重
在灰度发布过程中,可以逐步增加新版本的流量比例。例如:
初始阶段:10% 流量到 v2。
验证通过后:将权重调整为 50%。
最终阶段:将权重调整为 100%,完成全量发布。
只需修改 canary-weight 注解的值即可:
nginx.ingress.kubernetes.io/canary-weight: "50" # 50% 流量到新版本
复制代码
4. 监控与回滚
在灰度发布过程中,务必监控新版本的运行状态,包括:
应用日志
:检查是否有错误或异常。
性能指标
:如响应时间、错误率等。
用户反馈
:收集用户的使用体验。
如果发现问题,可以通过调整 canary-weight 注解将流量切回旧版本:
nginx.ingress.kubernetes.io/canary-weight: "0" # 所有流量切回旧版本
复制代码
灰度发布的进阶用法
除了基于权重的流量分割,Nginx Ingress Controller 还支持以下灰度发布策略:
1. 基于请求头的流量分割
通过 nginx.ingress.kubernetes.io/canary-by-header 注解,将特定请求头的流量路由到新版本。
示例配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
nginx.ingress.kubernetes.io/canary-by-header-value: "true"
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v2
port:
number: 80
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v1
port:
number: 80
复制代码
说明
当请求头中包含 X-Canary: true 时,流量会被路由到新版本(v2)。
其他请求继续使用旧版本(v1)。
2. 基于 Cookie 的流量分割
通过 nginx.ingress.kubernetes.io/canary-by-cookie 注解,将特定 Cookie 的流量路由到新版本。
示例配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "canary"
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v2
port:
number: 80
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v1
port:
number: 80
复制代码
说明
当请求中包含 canary=true 的 Cookie 时,流量会被路由到新版本(v2)。
其他请求继续使用旧版本(v1)。
3. 组合使用
可以同时使用权重、请求头和 Cookie 实现更复杂的灰度发布策略。
示例配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"
nginx.ingress.kubernetes.io/canary-by-header: "X-Canary"
nginx.ingress.kubernetes.io/canary-by-header-value: "true"
nginx.ingress.kubernetes.io/canary-by-cookie: "canary"
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v2
port:
number: 80
- host: my-app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-v1
port:
number: 80
复制代码
说明
10% 的流量会被分配到新版本(v2)。
如果请求头中包含 X-Canary: true 或 Cookie 中包含 canary=true,流量也会被路由到新版本。
总结
通过 Kubernetes 的 Ingress 注解,我们可以轻松实现灰度发布,逐步将新版本应用推送给用户,降低发布风险。无论是基于权重的流量分割,还是基于请求头或 Cookie 的精细化控制,Nginx Ingress Controller 都提供了强大的支持。
灰度发布不仅是技术上的优化,更是对用户体验的尊重。希望本文能帮助你掌握这一重要技能,让你的发布过程更加平稳、可靠!
立即尝试
:在你的 Kubernetes 集群中部署一个灰度发布示例,感受渐进式发布的魅力吧!如果你有任何问题或想法,欢迎在评论区留言讨论!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
发布
K8s
灰度
实战
通过
相关帖子
Java 26 发布了, 我人麻了。。
Redis缓存实战:彻底解决缓存穿透、击穿、雪崩三大难题
Unity发布京东小游戏
Python AI爬虫实战:爬取张雪峰微博并进行情感分析与词云可视化
AI Coding 实战:10年祖传系统,54万行代码,2周重构结束
OpenClaw+优云智算Coding Plan:从灵感到成文,再到公众号发布的全流程AI自动化
团结引擎发布小游戏与js版本SDK的互相调用
团结引擎发布小游戏与js版本SDK的互相调用
团结引擎发布小游戏与js版本SDK的互相调用
Spring AI 1.1.3 正式发布,19 个新特性太顶了!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
Java 26 发布了, 我人麻了。。
0
691
窖咎
2026-03-24
安全
Redis缓存实战:彻底解决缓存穿透、击穿、雪崩三大难题
0
440
邹语彤
2026-03-24
业界
Unity发布京东小游戏
0
346
慕疼
2026-03-25
业界
Python AI爬虫实战:爬取张雪峰微博并进行情感分析与词云可视化
0
807
粹脍誊
2026-03-25
业界
AI Coding 实战:10年祖传系统,54万行代码,2周重构结束
0
981
胰芰
2026-03-25
业界
OpenClaw+优云智算Coding Plan:从灵感到成文,再到公众号发布的全流程AI自动化
0
485
墨佳美
2026-03-25
安全
团结引擎发布小游戏与js版本SDK的互相调用
0
557
杠氯
2026-03-25
安全
团结引擎发布小游戏与js版本SDK的互相调用
0
632
敖可
2026-03-25
安全
团结引擎发布小游戏与js版本SDK的互相调用
0
42
毋献仪
2026-03-25
安全
Spring AI 1.1.3 正式发布,19 个新特性太顶了!
0
9
决任愧
2026-03-26
回复
(38)
煞赶峙
2025-10-24 13:27:24
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
蒙飘
2025-10-26 01:15:57
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
任静柔
2025-10-30 00:46:47
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
豺独
2025-11-7 22:57:44
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
肿抢
2025-12-11 04:59:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
裴涛
2025-12-29 15:40:10
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
陆菊
2026-1-3 19:31:24
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
汤流婉
2026-1-15 22:02:25
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
寇秀娟
2026-1-20 06:30:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
喜欢鼓捣这些软件,现在用得少,谢谢分享!
苗嘉惠
2026-1-21 09:23:54
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
沃盼盼
2026-1-22 14:25:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
捐催制
2026-1-22 20:30:08
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
魁睥
2026-1-23 09:36:35
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
很好很强大 我过来先占个楼 待编辑
崔和美
2026-1-25 14:44:52
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,试用一下
粉押淫
2026-1-26 08:22:18
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
伯绮梦
2026-1-26 08:35:07
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
瞧蛀
2026-1-27 02:50:59
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
兼罔
2026-1-27 03:23:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
热心回复!
韶侪
2026-1-30 07:56:06
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
缄戈
2026-1-30 07:56:06
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9018
9
闰咄阅
9995
10
蓬森莉
9870
查看更多
今日好文热榜
398
图片防御与lvlm攻击论文阅读笔记
622
图片防御与lvlm攻击论文阅读笔记
117
二分查找力扣题(leetcode)
77
3分钟部署本地大模型,零成本实现 Token 自
195
Electron41+Vite8.0+DeepSeek桌面端AI助手|
674
OPUS编解码器在audio DSP上的移植和应用
470
SpringCloud进阶--Seata与分布式事务
987
大模型私有化部署指南:从“一键安装”到“
624
大模型私有化部署指南:从“一键安装”到“
886
SpringCloud进阶--Seata与分布式事务
171
SpringCloud进阶--Seata与分布式事务
786
Oracle SQL经典练习50题 | 附答案
206
gitru:一个由 Rust 打造的零依赖 Git 提交
929
gitru:一个由 Rust 打造的零依赖 Git 提交
266
gitru:一个由 Rust 打造的零依赖 Git 提交
855
gitru:一个由 Rust 打造的零依赖 Git 提交
426
gitru:一个由 Rust 打造的零依赖 Git 提交
694
ESP32S3 USB MSC 调试全过程记录
640
瑞芯微工业级芯加持,正点原子RK3562J开发
56
gitru:一个由 Rust 打造的零依赖 Git 提交