当前位置: 首页 > news >正文

[单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 负责外部流量的入口,它的端口用于监听外部请求(如 80443 或 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 文件。这个错误通常是由于网络连接问题、访问受限或路径配置错误导致的。让我们一步步分析并解决这个问题。 可能原因及解决方案: 网络连接问题&#xf…...

补码加/减运算的具体示例

补码加法运算示例 示例:计算两个十进制数的和,35 18,假设使用8位二进制表示。 1、求原码: 35的原码:00100011 18的原码:00010010 2、求补码(对于正数,补码与原码相同&#xff0…...

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

Java题集(从入门到精通)04

此系列文章收录大量Java经典代码题(也可以算是leetcode刷题指南),希望可以与大家一起努力学好Java。3、2、1,请看! 目录 一、北京地铁计价程序 二、人名币兑换 三、各位数字之和 一、北京地铁计价程序 【问题描述…...

《西北师范大学学报 (自然科学版)》

《西北师范大学学报》(自然科学版) (CN 62-1087/N, ISSN 1001-988X)是甘肃省教育厅主管、西北师范大学主办的综合性自然科学学术期刊,1942年3月创刊,双月刊,逢单月15日出版。主要刊登全国高校和科研院所在数学、计算机与信息科学、物理学、化…...

Oracle SQL语句没有过滤条件,究竟是否会走索引??

答案是:可能走索引也可能不走索引,具体要看列的值可不可为null,Oracle不会为所有列的nullable属性都为Y的sql语句走索引。 例子: create table t as select * from dba_objects; CREATE INDEX ix_t_name ON t(object_id, objec…...

Java中参数传递:按值还是按引用?

目录 1. 按值传递 vs 按引用传递 1.1 基本数据类型:按值传递 1.2 对象引用:按引用传递 2. 拓展知识:理解 Java 的内存模型 2.1 栈内存的作用 2.2 堆内存的作用 2.3 参数传递的底层机制 3. 总结 在软件开发的世界里,Java 是…...

Linux忘记root用户密码怎么重设密码

直接说步骤: 1.重启客户机 2.在选择内核页面快速按e键,进入编辑模式 进入后应该是这个样子 在这里只能按上下键切换行 找到Linux16这里 3.按右方向键切换到行尾,也就是UTF-8处,在后面添加一个空格,然后加上这段话 …...

【Web】复现n00bzCTF2024 web题解(全)

目录 File Sharing Portal 方法一: 方法二: Focus-on-yourSELF Passwordless File Sharing Portal 附件的Dockerfile给了这么一段 # Add the cron job to the crontab RUN mkdir /etc/cron.custom RUN echo "*/5 * * * * root rm -rf /app…...

仿RabbitMQ实现消息队列客户端

文章目录 客⼾端模块实现订阅者模块信道管理模块异步⼯作线程实现连接管理模块生产者客户端消费者客户端 客⼾端模块实现 在RabbitMQ中,提供服务的是信道,因此在客⼾端的实现中,弱化了Client客⼾端的概念,也就是说在RabbitMQ中并…...

CSS | 面试题:你知道几种移动端适配方案?

目录 一、自适应和响应式 二、为什么要做移动端适配? 三、当前流行的几种适配方案 (1) 方案一:百分比设置(不推荐) (2) 方案二:rem 动态设置 font-size px 与 rem 的单位换算 手动换算 less/scss函数 webpac…...

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击,由于与层叠样式表的缩写一样,因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格,导致攻击者可以将恶意的is/html代码注入到网页中&#x…...

JAVA基础语法 Day11

一、Set集合 Set特点:无序(添加数据的顺序和获取出的数据顺序不一致),不重复,无索引 public class demo1 {public static void main(String[] args) {//1.创建一个集合//HashSet特点:无序,不重…...