[单master节点k8s部署]28.Istio流量管理(四)
金丝雀发布实验
部署两个pod,他们分别是canary-v1和canary-v2。
随后进行service的部署:
apiVersion: v1
kind: Service
metadata:name: canary-svc34namespace: default
spec:selector:apply: canaryports:- port: 80protocol: TCPtargetPort: 80
进行gateway和virtualservice以及destinationRule的部署。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:name: canary-gateway34
spec:selector:istio: ingressgatewayservers:- port: number: 80name: httpprotocol: HTTPhosts:- "*"
可以看到上面的service是TCP协议的,而这里的gateway是HTTP协议的。因为service处于传输层,他只关注传输层流量,而istio处于应用层,它可以基于http的协议执行高级的流量管理,比如路由、负载均衡和超时等等。
实际上,virtualService处理的是来自service的流量,因此这里的host名称应该和service名称对应,所以这里的host名称是:canary-svc34.default.svc.cluster.local
piVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:name: canary
spec:gateways:- canary-gateway34hosts:- "*"http:- route:- destination:host: canary-svc34.default.svc.cluster.localport:number: 80subset: v1weight: 50- destination:host: canary-svc34.default.svc.cluster.localport: number: 80subset: v2weight: 50
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:name: canary
spec:host: canary-svc34.default.svc.cluster.localsubsets:- name: v1labels:app: v1- name: v2labels:app: v2
此时查看svc,是一个clusterIP,而这个服务在我们的istio的服务网格里面,所以我们可以通过
gateway、service、VirtualSerivce
Gateway
负责外部流量的入口,它的端口用于监听外部请求(如 80
、443
或 31400
)。这个端口不需要与 Kubernetes Service
的端口匹配。
VirtualService
负责流量路由,它将 Gateway
或其他服务的流量转发到集群内的 Kubernetes Service
。这里的 destination.port.number
必须与 Kubernetes Service
的端口匹配,因为这是服务监听流量的端口。如果你的 Kubernetes Service
是 canary-svc34
,它监听的是 80
端口,那么 VirtualService
的 destination.port.number
也应该是 80
。
virtualService资源清单
headers匹配
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews
spec:hosts:- reviewshttp:- match:- headers:end-user:exact: jason # 如果请求头中 end-user 的值为 "jason"route:- destination:host: reviewssubset: v2 # 将流量路由到 reviews 服务的 v2 版本- route:- destination:host: reviewssubset: v3 # 其他流量路由到 reviews 服务的 v3 版本
在virtualservice中可以设置很多的规则,比如上面这个例子中,就对用户请求头中的信息进行了匹配。注意这里http是一个层级,下面有两个并列的规则,一个是- match,另一个是 - route。
一般来说http请求头中会包含以下字段,都可以用来设置istio的match规则:
Host: 指定目标服务器的主机名。
User-Agent: 表明请求是由哪个客户端发出的(例如浏览器类型)。
Authorization: 用于携带身份验证信息。
Cookie: 用于传递与会话相关的数据。
但用户也可以自定义http请求头,设置end-user信息,一个可能的格式如下:
fetch('https://example.com/reviews', {method: 'GET',headers: {'end-user': 'jason' // 手动添加 end-user 请求头}
}).then(response => {// 处理响应
});
那么这样就可以进行流量的分流,只允许他们去review的v2版本。
从内容上讲除了headers匹配,还有uri匹配,queryParams 匹配(参数匹配)、方法匹配(GET/POST),从规则上讲,有prefix匹配、exact匹配和regex匹配(正则匹配)。
prefix匹配
kind: VirtualService
metadata:name: bookinfo
spec:hosts:- bookinfo.comhttp:- match:- uri:prefix: /reviewsroute:- destination:host: reviews- match:- uri:prefix: /ratingsroute:- destination:host: ratings
这里的uri可能格式如下:
GET /ratings/456 HTTP/1.1
Host: bookinfo.com
则可以匹配到/ratings规则,进入host为ratings的服务。
参数匹配
https://bookinfo.com/reviews?sort=asc&filter=popular
在这个 URL 中,/reviews
是路径。?sort=asc&filter=popular
是查询参数部分。sort=asc
是一个查询参数,表示进行升序排序。filter=popular
是另一个查询参数,表示只显示受欢迎的结果。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: bookinfo
spec:hosts:- bookinfo.comhttp:- match:- uri:prefix: /reviewsheaders:User-Agent:exact: "Mozilla/5.0"queryParams:sort:exact: ascroute:- destination:host: reviews- match:- uri:exact: /ratings/123method:exact: GETroute:- destination:host: ratings
正则匹配
- match:- uri:regex: "/reviews/[0-9]+"
这个配置表示:所有 URI 以 /reviews/ 开头,后面跟着一串数字的请求都会匹配规则,比如 /reviews/123、/reviews/456 等。
authority匹配
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: example-virtualservice
spec:hosts:- "*"http:- match:- authority:exact: "api.example.com"route:- destination:host: api-service
scheme匹配
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: example-virtualservice
spec:hosts:- "service.example.com"http:- match:- scheme:exact: "https"route:- destination:host: secure-service
sourceLabel匹配
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: example-virtualservice
spec:hosts:- "service.example.com"http:- match:- sourceLabels:app: "frontend"version: "v1"route:- destination:host: backend-service
端口匹配
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: example-virtualservice
spec:hosts:- "service.example.com"http:- match:- uri:prefix: "/api"port: 8080route:- destination:host: api-serviceport:number: 8080
相关文章:
[单master节点k8s部署]28.Istio流量管理(四)
金丝雀发布实验 部署两个pod,他们分别是canary-v1和canary-v2。 随后进行service的部署: apiVersion: v1 kind: Service metadata:name: canary-svc34namespace: default spec:selector:apply: canaryports:- port: 80protocol: TCPtargetPort: 80进行…...

Windows 11 安装配置 Git 教程
目录 Git Windows 11 环境安装配置 Git Git Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。Git是目前世界上最流行的版本控制系统,广泛应用于软件开发中。 以下是Git的一些关键特…...

Go基础学习11-测试工具gomock和monkey的使用
文章目录 基础回顾MockMock是什么安装gomockMock使用1. 创建user.go源文件2. 使用mockgen生成对应的Mock文件3. 使用mockgen命令生成后在对应包mock下可以查看生成的mock文件4. 编写测试代码5. 运行代码并查看输出 GomonkeyGomonkey优势安装使用对函数进行monkey对结构体中方法…...
PHP基础教程
PHP基础教程 1. PHP简介 PHP是一种广泛使用的开源服务器端脚本语言,它特别适用于网页开发,并可嵌入到HTML中使用。 2. PHP环境搭建 Windows: 可以使用XAMPP或WAMP。Mac: 可以使用MAMP。Linux: 可以使用XAMPP或LAMP。 3. 第一个PHP程序 创建一个名为…...

Python或R时偏移算法实现
🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…...

华为云LTS日志上报至观测云最佳实践
华为云LTS简介 华为云云日志服务(Log Tank Service,简称 LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、…...
Python--加载Hugging Face模型文件异常处理
尝试加载 Hugging Face 模型的配置文件时,无法从 https://huggingface.co 获取所需的 config.json 文件。这个错误通常是由于网络连接问题、访问受限或路径配置错误导致的。让我们一步步分析并解决这个问题。 可能原因及解决方案: 网络连接问题…...
补码加/减运算的具体示例
补码加法运算示例 示例:计算两个十进制数的和,35 18,假设使用8位二进制表示。 1、求原码: 35的原码:00100011 18的原码:00010010 2、求补码(对于正数,补码与原码相同࿰…...

macOS编译和运行prometheus2.54
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文详述了在macOS(M2芯片)上编译和运行prometheus2.54版本的过程,以及安装node_exporter和grafana并使用prometheus指标进行展示 本地…...
flume系列之:flume jmx页面导出flume、java进程等全部指标
flume系列之:flume jmx页面导出flume、java进程等全部指标 一、需求背景二、完整的jmx指标信息三、修改jmx指标导出规则四、启动jmx导出程序一、需求背景 目前jmx页面指标只导出了flume相关的指标,现在需要导出java相关的指标二、完整的jmx指标信息 主要有flume指标java进程指…...

(17)MATLAB使用伽马(gamma)分布生成Nakagami-m分布的方法1
文章目录 前言一、使用伽马分布生成Nakagami分布随机变量的方法一二、MATLAB仿真代码后续 前言 MATLAB在R2013a版本中引入Nakagami分布对象,可以用来生成Nakagami随机变量。但是在更早的MATLAB版本中,并没有可以直接生成 Nakagami分布的随机变量的内置的…...
NFT 是什么?
NFT 是什么? NFT,全称Non-Fungible Token,即“非同质化代币”,是一种基于区块链技术的独特数字资产。NFT的核心特性在于其唯一性、不可分割性和不可替代性,这使其与传统的加密货币(如比特币、以太坊等)形成了鲜明的对比。比特币等加密货币是同质化的,每个单位之间可以…...

mysql的学习
垂直连接union join是水平连接,UNION 是垂直连接,它是把两张表的结果集按列堆叠,行数增加了,但列数保持不变。 UNION 垂直连接的作用 在 MySQL 中,UNION 可以将两个具有相同列数且列数据类型兼容的查询结果合并在一…...

微服务之间的相互调用的几种常见实现方式对比
目录 微服务之间的相互调用的几种实现方式 一、HTTP HTTP/RESTful API调用工作原理 二、RPC 设计理念与实现方式 协议与传输层 RPC远程调用工作原理 应用场景与性能考量 特点 三、Feign 设计理念与实现方式 协议与传输层 Feign调用的基本流程 Feign调用的工作原理…...
FPGA时序分析和约束学习笔记-(1、FPGA基本原理)
FPGA时序分析和约束学习笔记-(1、FPGA基本原理) Field现场Programmable可编程Gate门Array阵列 1、FPGA基本资源组成 可编程逻辑功能块(logic elements ,缩写LE) 片内互联线(interconnect,缩写…...
华为仓颉语言入门(9):for-in表达式
for-in 表达式用于遍历序列,它会依次访问序列中的每个元素,直到遍历完成。它常用于处理列表、数组或其他集合类型,能够有效简化代码,减少重复劳动。其基本语法如下: for (循环变量 in 序列) {循环体 }在 for-in 表达式中,每次循环都会检查是否遍历了序列中的所有元素。如…...

Vue3中使用axios
Promise介绍 同步代码与异步代码 安装并引入axios npm install axios 此时package.json里面就多了axios依赖 引入axios 获取数据 Axios GET参数构成:axios.get(url,{config{},…{}…}) url: 字符串:目标服务器的地址,如 https://api.examp…...
国创——VR虚拟陪伴
VR虚拟陪伴 1.技术基础:利用VR技术创建虚拟人物,实现与用户的互动。 2.功能实现:在用户等待就诊或无聊时,可以启动VR虚拟陪伴功能,与虚拟人物进行聊天、唱歌等互动,缓解用户的紧张情绪。 3.创新点&#…...

【Android 源码分析】Activity生命周期之onPause
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。 – 服装…...

IAR全面支持国科环宇AS32X系列RISC-V车规MCU
全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司(以下简称”国科环宇”)联合宣布,最新版本IAR Embedded Workbench for RISC-V将全面支持国科环宇AS32X系列RISC-V MCU,双方将共同助力中国汽车行业开…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...