[单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,双方将共同助力中国汽车行业开…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...