登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
istio流量分发实战:从配置到踩坑全解析 ...
istio流量分发实战:从配置到踩坑全解析
[ 复制链接 ]
焦尔蕾
2026-2-4 15:25:01
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前言
上一小节,istio成功的安装,并且还解决了常见的426的问题,本节内容主要探讨一下istio关于流量转发的问题
按比例分发
配置
需要创建一个backend-v1,它与backend的selector都是app: backend,backend-v1部署完成之后,它会立即分走50%的流量,为了测试istio流控,我们需要在不改变任何配置的情况下实现9:1分流,也就是90%进入原backend,10%进入新的backend-v1
标记2个deployment,追加标签,backend为version: v0,backend-v1为version: v1
kubectl patch deployment backend -p '{"spec":{"template":{"metadata":{"labels":{"version":"v0"}}}}}'
kubectl patch deployment backend-v1 -p '{"spec":{"template":{"metadata":{"labels":{"version":"v1"}}}}}'
复制代码
创建istio资源:DestinationRule,该资源主要用来标记istio要往哪个地方转发
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: backend-dr
namespace: default
spec:
host: backend-service
subsets:
- labels:
version: v0
name: v0
- labels:
version: v1
name: v1
复制代码
创建istio资源:VirtualService,该资源用来确定转发的权重
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-vs
namespace: default
spec:
hosts:
- backend-service
http:
- route:
- destination:
host: backend-service
subset: v0
weight: 90
- destination:
host: backend-service
subset: v1
weight: 10
复制代码
调试
测试命令: for i in {1..10}; do curl -s 10.22.12.178:30785/test > /dev/null ; done
登录到k8s的istio-proxy控制台查看: kubectl logs -f -l app=backend -c istio-proxy
[2026-01-28T08:24:55.670Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:24:55.687Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:24:55.706Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:24:55.741Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=1ms route=default
[2026-01-28T08:24:55.751Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:24:55.759Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:24:55.696Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:24:55.716Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:24:55.725Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:24:55.734Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
复制代码
▶ kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
backend-86b958bdc-5zjgn 2/2 Running 0 21m 10.244.0.53 wilson <none> <none>
backend-v1-75ccff86dc-sl6bt 2/2 Running 0 119s 10.244.0.55 wilson <none> <none>
nginx-test-7d87875694-8vsrp 2/2 Running 0 30m 10.244.0.61 wilson <none> <none>
复制代码
明显不对,10.244.0.55与10.244.0.53的比例并没有呈现9:1,转发到backend要backend-v1还是5:5
修复
可以直接修改nginx的配置
server {
listen 80;
listen [::]:80;
server_name localhost;
location /test {
proxy_http_version 1.1;
# proxy_set_header Host $host; # 原配置
proxy_set_header Host backend-service.default.svc.cluster.local; # 新配置
proxy_pass http://backend-service:10000;
}
}
复制代码
重启之后再次测试:
[2026-01-28T08:30:59.968Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:30:59.988Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=1ms route=default
[2026-01-28T08:31:00.027Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=1ms route=default
[2026-01-28T08:31:00.037Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:31:00.048Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:31:00.056Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:31:00.008Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.55:10000 duration=0ms route=default
[2026-01-28T08:31:00.066Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:31:00.074Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
[2026-01-28T08:31:00.083Z] "GET /test HTTP/1.1" 200 - upstream=10.244.0.53:10000 duration=0ms route=default
复制代码
已经生效了,这次只有1次10.244.0.55:10000
疑问
有位大哥说了,如果这样配置的,明显影响了业务:
nginx的配置被修改了
所有的host被写死了,都成了:backend-service.default.svc.cluster.local,而后端业务是需要把客户端的host带入过去的,改了之后后端业务收到严重影响
确实,固定host属于粗暴简单的写法,还有更加惊喜的解决方法,调整VirtualService,添加hosts
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-vs
namespace: default
spec:
hosts:
- backend-service
- api.wilsontest.com # 新增
http:
- route:
- destination:
host: backend-service
subset: v0
weight: 90
- destination:
host: backend-service
subset: v1
weight: 10
复制代码
客户端访问的时候必须带上该域名: for i in {1..10}; do curl -s -H 'host: api.wilsontest.com' 10.22.12.178:30785/test > /dev/null ; done
这样也可以解决问题,不过坑点也来了,年久失修,从无数前人继承的祖传代码,就需要好好的梳理到底有哪些host来访问,否则漏掉host的话,就会出现配置问题。-_-!
再次凸显了istio之中,host是非常非常重要的,Istio 的路由决策、Service 的匹配完全依赖 Host 头
Istio 的 VirtualService 本质上是一个“增强版”的路由器。如果发现请求的 Host 是 backend-service,就按 90:10 分配。
之前的配置是$host,由于客户端没有传输host,当请求经过 Nginx 的 Sidecar时,它会检查Host,发现为空。由于路由表里没有对应的记录 ,sidecar并不认识,按普通 K8s 流量处理
按header分发
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-vs
namespace: default
spec:
hosts:
- backend-service
- api.wilsontest.com
http:
- match:
- headers:
hellotest:
exact: "true"
route:
- destination:
host: backend-service
subset: v1
- route:
- destination:
host: backend-service
subset: v0
复制代码
curl -s -H 'host: api.wilsontest.com' -H 'hellotest: true' 10.22.12.178:30785/test。只有header里面匹配了hellotest: true才会去v1,否则全部去v0
按前缀分发
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-vs
namespace: default
spec:
hosts:
- backend-service
- api.wilsontest.com
http:
- match:
- uri:
prefix: /test/v1
route:
- destination:
host: backend-service
subset: v1
- route:
- destination:
host: backend-service
subset: v0
复制代码
带有/test/v1前缀的都会去新版本v1,满足不了条件都会走默认的版本v0
url改写
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-vs
namespace: default
spec:
hosts:
- backend-service
- api.wilsontest.com
http:
- match:
- uri:
prefix: /test/v1
route:
- destination:
host: backend-service
subset: v1
- match:
- uri:
prefix: /test/v2
rewrite:
uri: /test
route:
- destination:
host: backend-service
subset: v0
- route:
- destination:
host: backend-service
subset: v0
复制代码
如果是/test/v1,就访问v1版本,/test/v2重写成/test并且访问v0版本,其余的默认都会走v0版本
蓝绿、金丝雀、灰度、A/B测试
关于流量分流的各种操作,大部分都集中在以下场景:
蓝绿:实现瞬间切换与零宕机回滚,消除发布期间的中间状态
金丝雀:像矿工用金丝雀探测毒气一样,先让一小部分用户(如1%~5%)访问新版本,观察系统指标(如错误率、延迟),若无问题再逐步扩大范围
灰度:将用户群体按比例或特定规则(如地域、设备)逐步切换到新版本(例如10%→30%→100%),持续观察反馈
A/B:同时向随机分组的用户展示不同版本(A组用旧版,B组用新版),通过统计指标(如点击率、转化率)判断哪个版本更优
蓝绿发布金丝雀发布灰度发布A/B测试主要目标零停机、瞬时回滚用真实流量快速发现技术风险平稳、可控地逐步替换所有用户验证不同版本的业务效果流量路由全量切换(100%→0%)极小比例引流(如1%-5%)按比例分阶段扩大(10%→50%→100%)按规则/随机分配(如50%/50%)关注重点系统可用性与回滚速度系统稳定性指标(错误率、延迟)发布过程平稳性与综合反馈业务指标(转化率、留存率)所需资源两套完整环境,成本高一套环境,新版本实例较少一套环境,新旧版本实例共存一套或多套环境,并行运行多个版本用户选择全体用户同时切换小部分用户随机或按基础设施选择用户按比例或属性逐步迁移用户随机分组或按属性定向分配持续时间极短(切换在几分钟内)短(几小时到一天)中长(几天到数周)长(数周到数月)典型场景关键业务大版本升级、基础设施更换后端服务、中间件、数据库变更前端功能、用户界面更新UI设计、文案、算法策略、定价优化
联系我
联系我,做深入的交流
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
istio
流量
分发
实战
配置
相关帖子
Linux iptables防火墙全攻略实战详解
OpenClaw 实战:让AI 页面“秒开即用”,实现 Vibecoding 真正闭环
从能用到性能: gcsfuse 中`CreateEmptyFile` 配置项的设计演进分析
.NET 代码保护实战:从混淆到虚拟机保护
PII与LLM隐私保护实战指南
我是如何配置当前这个炫酷的博客主题的
DeepWiki 优化实战:代码行号与确定性目录生成
Token 烧钱?OpenClaw 这几个配置让我省了一半开销
Vue3 + Iframe 实战:打造企业级流程配置中心(附完整代码)
记一次Webshell流量分析 | 添柴不加火
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
Linux iptables防火墙全攻略实战详解
0
232
韩素欣
2026-03-17
业界
OpenClaw 实战:让AI 页面“秒开即用”,实现 Vibecoding 真正闭环
0
841
岑韬哎
2026-03-17
业界
从能用到性能: gcsfuse 中`CreateEmptyFile` 配置项的设计演进分析
0
738
庾签
2026-03-18
安全
.NET 代码保护实战:从混淆到虚拟机保护
0
329
髭赌
2026-03-18
业界
PII与LLM隐私保护实战指南
0
239
嘀荼酴
2026-03-18
安全
我是如何配置当前这个炫酷的博客主题的
0
306
庾芷秋
2026-03-18
业界
DeepWiki 优化实战:代码行号与确定性目录生成
0
405
祖柔惠
2026-03-18
业界
Token 烧钱?OpenClaw 这几个配置让我省了一半开销
0
658
蓬森莉
2026-03-20
业界
Vue3 + Iframe 实战:打造企业级流程配置中心(附完整代码)
0
803
福清婉
2026-03-22
业界
记一次Webshell流量分析 | 添柴不加火
0
167
崔瑜然
2026-03-22
回复
(17)
饨篦
2026-2-8 23:37:51
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
任静柔
2026-2-9 02:56:02
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
骂治并
2026-2-9 03:06:11
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢楼主提供!
材部
2026-2-10 07:00:43
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
篙菠
2026-2-10 17:45:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
庞悦
2026-2-11 12:59:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
莠畅缕
2026-2-11 13:40:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
鞍注塔
2026-2-12 06:34:49
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
史华乐
2026-2-12 22:42:15
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢楼主提供!
骆贵
2026-2-16 04:02:17
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
用心讨论,共获提升!
溧久苟
2026-2-26 07:16:41
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
度阡舅
2026-3-6 04:26:58
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
丘奕奕
2026-3-8 07:36:19
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
碣滥
2026-3-8 09:16:04
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
谢谢分享,辛苦了
钱闲华
2026-3-8 11:31:13
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
喳谍
2026-3-11 05:46:29
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
全阳霁
2026-3-11 07:06:17
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
新版吗?好像是停更了吧。
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
软件
程序
科技
代码
签约作者
程序园优秀签约作者
发帖
焦尔蕾
2026-3-11 07:06:17
关注
0
粉丝关注
28
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
743
"Memory in the Age of AI Agents: A Surve
216
Prompt 焚诀——一个模板,终结你和 AI 的
510
【节点】[SampleTexture3D节点]原理解析与
166
记一次Webshell流量分析 | 添柴不加火
978
旧安卓手机部署openclaw
635
AI编程时代,35岁以上程序员将何去何从?
828
[Refactor]CPP Learn Data Day 1
2
Block Copy 的内存布局详解
616
把 Flask 搬进 ESP32,高中生自研嵌入式 We
7
渐得如意智能自动化办公平台——定义属于你
890
[AI/Agent/社交] AI Agent社交网络产品:Mo
526
C++协程入门
286
TCSSOFTDEPTCOPY.zip Can download source
803
Vue3 + Iframe 实战:打造企业级流程配置中
824
“你用AI,那我也会用AI,我还要你干什么?
623
自感痕迹论:先验意义场域与经验痕迹内外
9
一道KMP统考真题彻底讲透:nextval与滑动距
9
一道KMP统考真题彻底讲透:nextval与滑动距
743
从 Clubhouse 的崛起与陨落,看语聊房 RTC
245
老马失前蹄,竟然在数据库外键上翻车了,重