使用istio实现权重路由
istio概述
**概述:**Istio 是一个开源的 服务网格(Service Mesh)解决方案,主要用于管理、保护和监控微服务架构中的服务通信。它为微服务提供了基础设施层的控制功能,不需要更改应用程序的代码,从而解决服务之间的安全性、流量管理、可观察性等问题
**工作机制:**通过在每个服务的旁边部署一个 Sidecar Proxy(通常是 Envoy)。这个代理会拦截所有进出该服务的流量,并将其发送到 Istio 的控制平面进行管理和监控。应用程序本身不需要进行修改,所有的功能都通过配置管理
K8S版本要求:https://istio.io/latest/zh/docs/releases/supported-releases/#support-status-of-istio-releases
| Version | Currently Supported | Release Date | End of Life | Supported Kubernetes Versions | Tested, but not supported |
|---|---|---|---|---|---|
| master | No, development only | 1.29, 1.30, 1.31, 1.32 | 1.23, 1.24, 1.25, 1.26, 1.27, 1.28 | ||
| 1.24 | Yes | November 7, 2024 | ~Aug 2025 (Expected) | 1.28, 1.29, 1.30, 1.31 | 1.23, 1.24, 1.25, 1.26, 1.27 |
| 1.23 | Yes | Aug 14, 2024 | ~May 2025 (Expected) | 1.27, 1.28, 1.29, 1.30 | 1.23, 1.24, 1.25, 1.26 |
| 1.22 | Yes | May 13, 2024 | ~Jan 2025 (Expected) | 1.27, 1.28, 1.29, 1.30 | 1.23, 1.24, 1.25, 1.26 |
| 1.21 | Yes | Mar 13, 2024 | Sept 27, 2024 | 1.26, 1.27, 1.28, 1.29 | 1.23, 1.24, 1.25 |
| 1.20 | No | Nov 14, 2023 | Jun 25, 2024 | 1.25, 1.26, 1.27, 1.28, 1.29 | 1.23, 1.24 |
| 1.19 | No | Sept 5, 2023 | Apr 24, 2024 | 1.25, 1.26, 1.27, 1.28 | 1.21, 1.22, 1.23, 1.24 |
| 1.18 | No | Jun 3, 2023 | Jan 4, 2024 | 1.24, 1.25, 1.26, 1.27 | 1.20, 1.21, 1.22, 1.23 |
| 1.17 | No | Feb 14, 2023 | Oct 27, 2023 | 1.23, 1.24, 1.25, 1.26 | 1.16, 1.17, 1.18, 1.19, 1.20, 1.21, 1.22 |
| 1.16 | No | Nov 15, 2022 | Jul 25, 2023 | 1.22, 1.23, 1.24, 1.25 | 1.16, 1.17, 1.18, 1.19, 1.20, 1.21 |
| 1.15 | No | Aug 31, 2022 | Apr 4, 2023 | 1.22, 1.23, 1.24, 1.25 | 1.16, 1.17, 1.18, 1.19, 1.20, 1.21 |
| 1.14 | No | May 24, 2022 | Dec 27, 2022 | 1.21, 1.22, 1.23, 1.24 | 1.16, 1.17, 1.18, 1.19, 1.20 |
| 1.13 | No | Feb 11, 2022 | Oct 12, 2022 | 1.20, 1.21, 1.22, 1.23 | 1.16, 1.17, 1.18, 1.19 |
安装istio
参考链接:https://istio.io/v1.17/zh/docs/setup/getting-started/#download
1.下载指定版本的Istio,以K8S1.23版本为例安装istio1.17.8
[root@master231 06-istio]# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.8 TARGET_ARCH=x86_64 sh -2.配置Istioctl工具的环境变量
[root@master231 06-istio]# tar xf istio-1.17.8-linux-amd64.tar.gz
[root@master231 06-istio]#
[root@master231 06-istio]# ll
total 26504
drwxr-xr-x 3 root root 4096 Aug 14 11:30 ./
drwxr-xr-x 8 root root 4096 Aug 14 11:24 ../
drwxr-x--- 6 root root 4096 Oct 11 2023 istio-1.17.8/
-rw-r--r-- 1 root root 27127663 Jun 21 17:39 istio-1.17.8-linux-amd64.tar.gz[root@master231 06-istio]# echo 'export PATH="$PATH:`pwd`/istio-1.17.8/bin"' > /etc/profile.d/istio.sh
[root@master231 06-istio]# source /etc/profile.d/istio.sh
[root@master231 06-istio]# istioctl --help3.安装Istio
[root@master241 ~]# istioctl install --set profile=demo -y # 安装demo的配置[root@master241 ~]# istioctl profile dump demo|default|minimal|... # 查看你想要查看的配置即可。在安装 Istio 时所能够使用的内置配置文件。这些配置文件提供了对Istio控制平面和Istio数据平面Sidecar的定制内容。
可以从Istio内置配置文件的其中一个开始入手,然后根据您的特定需求进一步自定义配置文件。当前提供以下几种内置配置文件:- default:根据 IstioOperator API 的默认设置启动组件。 建议用于生产部署和 Multicluster Mesh 中的 Primary Cluster。您可以运行 istioctl profile dump 命令来查看默认设置。- demo:这一配置具有适度的资源需求,旨在展示 Istio 的功能。 它适合运行 Bookinfo 应用程序和相关任务。 这是通过快速开始指导安装的配置。此配置文件启用了高级别的追踪和访问日志,因此不适合进行性能测试。- minimal:与默认配置文件相同,但只安装了控制平面组件。 它允许您使用 Separate Profile 配置控制平面和数据平面组件(例如 Gateway)。- remote:配置 Multicluster Mesh 的 Remote Cluster。- empty:不部署任何东西。可以作为自定义配置的基本配置文件。- preview:预览文件包含的功能都是实验性。这是为了探索 Istio 的新功能。不确保稳定性、安全性和性能(使用风险需自负)。参考链接:https://istio.io/v1.17/zh/docs/setup/additional-setup/config-profiles/https://istio.io/v1.17/zh/docs/setup/getting-started/#download 温馨提示:此环节可能下载镜像失败,需要手动解决。成功的输出如下:
[root@master231 06-istio]# istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete Making this installation the default for injection and validation.Thank you for installing Istio 1.17. Please take a few minutes to tell us about your install/upgrade experience! https://forms.gle/hMHGiwZHPU7UQRWe9
[root@master231 06-istio]# 6.查看istio的版本号
[root@master231 06-istio]# istioctl version
client version: 1.17.8
control plane version: 1.17.8
data plane version: 1.17.8 (2 proxies)7.添加自动补全
[root@master231 06-istio]# source istio-1.17.8/tools/istioctl.bash l
手动注入pod
在安装完毕istio组件后,创建一些业务pod,然后在注入istiopod
cat > 00-test_istio.yaml <<eof
apiVersion: v1
kind: Namespace
metadata:name: wzyluckyboy
---apiVersion: apps/v1
kind: Deployment
metadata:name: deploy-appsnamespace: wzyluckyboy
spec:replicas: 3selector:matchLabels:app: v1template:metadata:labels:app: v1spec:containers:- name: c1image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1ports:- containerPort: 80
eof
2.待pod创建完毕后再手动注入
istioctl kube-inject -f 00-test_istio.yaml | kubectl -n wzyluckyboy apply -f -
3.可以查看到带有istio标签的pod
[root@master23101-istio]# kubectl -n wzyluckyboy get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
deploy-apps-858765cd5c-pmbpm 2/2 Running 0 29s app=v1,pod-template-hash=858765cd5c,security.istio.io/tlsMode=istio,service.istio.io/canonical-name=v1,service.istio.io/canonical-revision=latest
deploy-apps-858765cd5c-w8gxf 2/2 Running 0 54s app=v1,pod-template-hash=858765cd5c,security.istio.io/tlsMode=istio,service.istio.io/canonical-name=v1,service.istio.io/canonical-revision=latest
deploy-apps-858765cd5c-zkbfk 2/2 Running 0 51s app=v1,pod-template-hash=858765cd5c,security.istio.io/tlsMode=istio,service.istio.io/canonical-name=v1,service.istio.io/canonical-revision=latest
查看pod的init容器:kubectl -n wzyluckyboy get pods -o yaml
istio实现权重路由
istio实现灰度发布
# 相关配置文件说明
01-deploy-apps.yaml # 部署了2个pod,对应要灰度发布的应用
02-svc-apps.yaml # 2个svc,关联到2个pod
03-deploy-client.yaml # 仅用于业务访问测试
04-vs-apps-svc-all.yaml # 虚拟服务,影响权重的操作在这个文件
1.流量管理之路由(权重路由模拟灰度发布)
cat > 01-deploy-apps.yaml <<EOF
apiVersion: v1
kind: Namespace
metadata:name: wzyluckyboy
---apiVersion: apps/v1
# 注意,创建pod建议使用deploy资源,不要使用rc资源,否则istioctl可能无法手动注入。
kind: Deployment
metadata:name: apps-v1namespace: wzyluckyboy
spec:replicas: 1selector:matchLabels:app: xiuxian01version: v1auther: wzyluckyboytemplate:metadata:labels:app: xiuxian01version: v1auther: wzyluckyboyspec:containers:- name: c1ports:- containerPort: 80image: busybox:1.36.1command: ["/bin/sh","-c","echo 'c1' > /var/www/index.html;httpd -f -p 80 -h /var/www"]
---apiVersion: apps/v1
kind: Deployment
metadata:name: apps-v2namespace: wzyluckyboy
spec:replicas: 1selector:matchLabels:app: xiuxian02version: v2auther: wzyluckyboytemplate:metadata:labels:app: xiuxian02version: v2auther: wzyluckyboyspec:containers:- name: c2ports:- containerPort: 80image: busybox:1.36.1command: ["/bin/sh","-c","echo 'c2' > /var/www/index.html;httpd -f -p 80 -h /var/www"]
EOF
2.创建3个service,分别关联不同的pod,其中一个svc管理之前创建的所有pod
cat > 02-svc-apps.yaml <<EOF
apiVersion: v1
kind: Service
metadata:name: apps-svc-v1namespace: wzyluckyboy
spec:selector:version: v1ports:- protocol: TCPport: 80targetPort: 80name: http---apiVersion: v1
kind: Service
metadata:name: apps-svc-v2namespace: wzyluckyboy
spec:selector:version: v2ports:- protocol: TCPport: 80targetPort: 80name: http---apiVersion: v1
kind: Service
metadata:name: apps-svc-allnamespace: wzyluckyboy
spec:selector:auther: wzyluckyboyports:- protocol: TCPport: 80targetPort: 80name: http
EOF
3.创建一个客户端用户业务测试
cat > 03-deploy-client.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:name: apps-clientnamespace: wzyluckyboy
spec:replicas: 1selector:matchLabels:app: client-testtemplate:metadata:labels:app: client-testspec:containers:- name: c1image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1 command:- tail- -f- /etc/hosts
EOF
4.注入影响路由权重
cat > 04-vs-apps-svc-all.yaml <<eof
apiVersion: networking.istio.io/v1beta1
# apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: apps-svc-all-vsnamespace: wzyluckyboy
spec:# 指定vs关联的后端svc名称hosts:- apps-svc-all# 配置http配置http:# 定义路由信息- route:# 定义目标- destination:host: apps-svc-v1# 指定权重weight: 90- destination:host: apps-svc-v2weight: 10
eof
3.手动注入Istio-proxy1.注入前
[root@master241 yinzhengjie]# kubectl get pods -n wzyluckyboy
NAME READY STATUS RESTARTS AGE
apps-client-f84c89565-kmqkv 1/1 Running 0 31s
apps-v1-9bff7546c-fsnmn 1/1 Running 0 32s
apps-v2-6c957bf64b-lz65z 1/1 Running 0 32s
[root@master241 yinzhengjie]#
2.开始手动注入
[root@master241 yinzhengjie]# istioctl kube-inject -f 03-deploy-client.yaml | kubectl -n wzyluckyboy apply -f -
deployment.apps/apps-client configured
[root@master241 yinzhengjie]#
[root@master241 yinzhengjie]# istioctl kube-inject -f 01-deploy-apps.yaml | kubectl -n wzyluckyboy apply -f -
namespace/yinzhengjie unchanged
deployment.apps/apps-v1 configured
deployment.apps/apps-v2 configured
[root@master241 yinzhengjie]#
3.注入后
[root@master241 yinzhengjie]# kubectl get pods -n wzyluckyboy
NAME READY STATUS RESTARTS AGE
apps-client-5cc67d864-g2r2v 2/2 Running 0 41s
apps-v1-85c976498b-5qp59 2/2 Running 0 30s
apps-v2-5bb84548fc-65r7x 2/2 Running 0 30s
[root@master241 yinzhengjie]#
5.4.开始测试
[root@master231 ~]# kubectl -n wzyluckyboy exec -it apps-client-5f579696d5-s7nvc -- sh
/ # while true; do curl http://apps-svc-all;sleep 0.1;done
c1
c1
c1
c1
c1
c1
c1
c1
c1
c1
c1
c1
c1
c1
c2
相关文章:
使用istio实现权重路由
istio概述 **概述:**Istio 是一个开源的 服务网格(Service Mesh)解决方案,主要用于管理、保护和监控微服务架构中的服务通信。它为微服务提供了基础设施层的控制功能,不需要更改应用程序的代码,从而解决服…...
M. Triangle Construction
题目链接:Problem - 1906M - Codeforces 题目大意:给一个 n 边形, 每一个边上有a[ i ] 个点, 在此多边形上求可以连的三角形有多少个, 每个点只能用一次。 输入: 第一行是一个整数 N ( 3 ≤ N ≤ 200000…...
每天学点小知识之设计模式的艺术-策略模式
行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解模板方法模式 模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基…...
机试题——到邻国目标城市的最短距离
题目描述 A国与B国是相邻的两个国家,每个国家都有很多城市。国家内部有很多连接城市的公路,国家之间也有很多跨国公路,连接两个国家的边界城市。两个国家一共有N个城市,编号从1到N,一共有M条公路,包括国内…...
Python + Tkinter + pyttsx3实现的桌面版英语学习工具
Python Tkinter pyttsx3实现的桌面版英语学习工具 在多行文本框输入英文句子,双击其中的英文单词,给出英文读音和中文含义和音标。 本程序查询本地词典数据。通过菜单栏"文件"->"打开词典编辑器"进入编辑界面。 词典数据存储…...
【Vite + Vue + Ts 项目三个 tsconfig 文件】
Vite Vue Ts 项目三个 tsconfig 文件 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件?首先我们先了解什么是 tsconfig.json ? 为什么 Vite Vue Ts 项目会有三个 tsconfig 文件? 在使用 Vite 创建 vue-ts 模板的项目时,会发现除了 ts…...
AI时代IT行业职业方向规划大纲
一、引言 AI时代的颠覆性影响 ChatGPT、Midjourney等生成式AI对传统工作模式的冲击 案例:AI编程助手(GitHub Copilot)改变开发者工作流程 核心问题:IT从业者如何避免被AI替代,并找到新机遇? 二、AI时代…...
Mac M1 Comfyui 使用MMAudio遇到的问题解决?
问题1: AssertionError: Torch not compiled with CUDA enabled? 解决办法:修改代码以 CPU 运行 第一步:找到 /ComfyUI/custom_nodes/ComfyUI-MMAudio/mmaudio/ext/autoencoder/vae.py文件中的下面这两行代码 self.data_mean nn.Buffer(t…...
大语言模型深度研究功能:人类认知与创新的新范式
在人工智能迅猛发展的今天,大语言模型(LLM)的深度研究功能正在成为重塑人类认知方式的关键力量。这一突破性技术不仅带来了工具层面的革新,更深刻地触及了人类认知能力的本质。本文将从认知科学的角度出发,探讨LLM如何…...
[SAP ABAP] 性能优化
1.数据库编程OPEN SQL方面优化 1.避免使用SELECT *,只查询需要的字段即可 尽量使用SELECT f1 f2 ... (具体字段) 来代替 SELECT * 写法 2. 如果确定只查询一条数据时,使用 SELECT SINGLE... 或者是 SELECT ...UP TO 1 ROWS ... 使用语法 UP TO n ROWS 来…...
并行计算、分布式计算与云计算:概念剖析与对比研究(表格对比)
什么是并行计算?什么是分布计算?什么是云计算?我们如何更好理解这3个概念,我们采用概念之间的区别和联系的方式来理解,做到切实理解,深刻体会。 1、并行计算与分布式计算 并行计算、分布式计算都属于高性…...
ASP.NET Core Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
doris:删除操作概述
在 Apache Doris 中,删除操作(Delete)是一项关键功能,用于管理和清理数据,以满足用户在大规模数据分析场景中的灵活性需求。 Doris 提供了丰富多样的删除功能支持,包括:DELETE 语句、删除标记&…...
【思维导图】redis
学习计划:将目前已经学的知识点串成一个思维导图。在往后的学习过程中,不断往思维导图里补充,形成自己整个知识体系。对于思维导图里的每个技术知识,自己用简洁的话概括出来, 训练自己的表达能力。...
申博经验贴
1. 所谓申博,最重要的就是定制的海投 分成两个部分 1. 定制 要根据每个教授去写不同的,一定不要泛泛的去写,一定要非常非常的具体,要引起教授的兴趣。每个教授每天都会收到几十封邮件,所以要足够的引起教授的注意&a…...
.Net Core笔记知识点(跨域、缓存)
设置前端跨域配置示例: builder.Services.AddCors(option > {option.AddDefaultPolicy(policy > {policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();});});var app builder.Build();app.UseCors(); 【客户端缓存】接…...
YOLOV11-1:YoloV11-安装和CLI方式训练模型
YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境,其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…...
自学习记录-编程语言的特点(持续记录)
我学习的顺序是C -> python -> C -> Java。在讲到某项语言的特点是,可能会时不时穿插其他语言的特点。 Java 1 注解Annotation Python中也有类似的Decorators。以下为AI学习了解到的: Java的Annotation是一种元数据(metadata)&a…...
TypeScript (TS) 和 JavaScript (JS)
TypeScript (TS) 和 JavaScript (JS) 的区别主要在于 TypeScript 是 JavaScript 的一个超集,它在 JavaScript 基础上增加了类型系统和一些高级功能。让我们详细看看两者的区别和关系: 类型系统: TypeScript 最大的特点是 静态类型。在 TypeSc…...
【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三
目录 1 -> 绘制图形 1.1 -> 绘制基本几何图形 1.2 -> 绘制自定义几何图形 2 -> 添加动画效果 2.1 -> animateTo实现闪屏动画 2.2 -> 页面转场动画 3 -> 常见组件说明 1 -> 绘制图形 绘制能力主要是通过框架提供的绘制组件来支撑,支…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
