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

【06】VirtualService高级流量功能

5.3 weight

  1. 部署demoapp v10v11版本

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:labels:app: demoappv10version: v1.0name: demoappv10
    spec:progressDeadlineSeconds: 600replicas: 3selector:matchLabels:app: demoappversion: v1.0template:metadata:labels:app: demoappversion: v1.0spec:containers:- image: ikubernetes/demoapp:v1.0imagePullPolicy: IfNotPresentname: demoappenv:- name: "PORT"value: "8080"ports:- containerPort: 8080name: webprotocol: TCPresources:limits:cpu: 50m
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:labels:app: demoappv11version: v1.1name: demoappv11
    spec:progressDeadlineSeconds: 600replicas: 2selector:matchLabels:app: demoappversion: v1.1template:metadata:labels:app: demoappversion: v1.1spec:containers:- image: ikubernetes/demoapp:v1.1imagePullPolicy: IfNotPresentname: demoappenv:- name: "PORT"value: "8080"ports:- containerPort: 8080name: webprotocol: TCPresources:limits:cpu: 50m
    ---
    apiVersion: v1
    kind: Service
    metadata:name: demoapp
    spec:ports:- name: httpport: 8080protocol: TCPtargetPort: 8080selector:app: demoapptype: ClusterIP
    ---
  2. 定义subset

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:name: demoapp
    spec:host: demoappsubsets:- name: v10labels:version: v1.0- name: v11labels:version: v1.1
    
  3. 定义基于weight的virtualservice

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: weight-based-routingroute:- destination:host: demoappsubset: v10weight: 90- destination:host: demoappsubset: v11weight: 10
  4. 测试

    访问http://demoapp:8080

    在这里插入图片描述

    kiali查看拓扑
    在这里插入图片描述

5.4 rewrite

  1. 定义demoapp v1.0demoapp v1.1版本和subset的dr规则。参考weight中定义

  2. 定义rewrite的virtualservice

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: rewritematch:- uri:prefix: /canaryrewrite:uri: /route:- destination:host: demoappsubset: v11- name: defaultroute:- destination:host: demoappsubset: v10
  3. 测试

    访问:http://demoapp:8080/canary

    在这里插入图片描述

    访问:http://demoapp:8080

    在这里插入图片描述

5.5 header

  1. 定义demoapp v1.0demoapp v1.1版本和subset的dr规则。参考weight中定义

  2. 定义header规则

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: canarymatch:- headers:x-canary:exact: "true"route:- destination:host: demoappsubset: v11headers:request:set: User-Agent: Chrome   #set字段修改request的value的值response:add:x-canary: "true"  # 在reponse中利用add字段进行添加- name: defaultheaders:response:add:X-Envoy: testroute:- destination:host: demoappsubset: v10
  3. 测试功能

    按照定义的header的vs规则:

    • 当请求demoapp:8080会匹配上default规则,并且在response的header加上x-Envoy: test的标头

      / $ curl -I demoapp:8080
      HTTP/1.1 200 OK
      content-type: text/html; charset=utf-8
      content-length: 114
      server: envoy
      date: Tue, 22 Aug 2023 09:14:02 GMT
      x-envoy-upstream-service-time: 2
      x-envoy: test
      
    • 当请求demoapp:8080加上x-canary: true 的标头,会在reponse中增加标头,以及会将request的User-Agent: Chrome修改

      / $ curl -I -H "x-canary: true" demoapp:8080
      HTTP/1.1 200 OK
      content-type: text/html; charset=utf-8
      content-length: 116
      server: envoy
      date: Tue, 22 Aug 2023 09:18:06 GMT
      x-envoy-upstream-service-time: 2
      x-canary: true
      
      / $ curl -H "x-canary: true" demoapp:8080/user-agent
      User-Agent: Chrome
      / $ 
      

5.6 fault injection

  1. 定义demoapp v1.0demoapp v1.1版本和subset的dr规则。参考weight中定义

  2. 定义fault injection的规则

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: canarymatch:- uri:prefix: /canaryrewrite:uri: /route:- destination:host: demoappsubset: v11fault:         # 故障注入的一种方式abort,会在发往v11版本的20%的流量上注入abort故障,返回的http code为555abort:percentage:value: 20httpStatus: 555- name: defaultroute:- destination:host: demoappsubset: v10fault:delay:              # 故障注入的另外一种方式延迟,会在发往v10的版本上20%的流量上注入delay故障,延迟时间为3秒percentage:value: 20fixedDelay: 3s
    
  3. 测试

    • 当访问demoapp:8080/canary的时候,按照上诉定义的规则,会有20%的比例注入abort故障:

      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-vxmgv, ServerIP: 172.16.140.87!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-vxmgv, ServerIP: 172.16.140.87!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-vxmgv, ServerIP: 172.16.140.87!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      iKubernetes demoapp v1.1 !! ClientIP: 127.0.0.6, ServerName: demoappv11-77755cdc65-k2xzl, ServerIP: 172.16.196.145!
      / $ curl demoapp:8080/canary
      fault filter abort/ $ 
    • 当访问demoapp:8080的时候,按照规则,会有20%的流量注入延迟3秒的故障

      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-f9vfv, ServerIP: 172.16.140.88!
      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-fglcx, ServerIP: 172.16.140.86!
      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-qfnw5, ServerIP: 172.16.196.146!
      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-fglcx, ServerIP: 172.16.140.86!
      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-f9vfv, ServerIP: 172.16.140.88!
      / $ curl demoapp:8080
      iKubernetes demoapp v1.0 !! ClientIP: 127.0.0.6, ServerName: demoappv10-b5d9576cc-f9vfv, ServerIP: 172.16.140.88!
      / $ curl demoapp:8080
      ^C

5.7 retry

  1. 定义demoapp v1.0demoapp v1.1版本和subset的dr规则。参考weight中定义

  2. 定义proxydeploymentgateway 以及virtualservice

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: proxy
    spec:progressDeadlineSeconds: 600replicas: 1selector:matchLabels:app: proxytemplate:metadata:labels:app: proxyspec:containers:- env:- name: PROXYURLvalue: http://demoapp:8080image: ikubernetes/proxy:v0.1.1imagePullPolicy: IfNotPresentname: proxyports:- containerPort: 8080name: webprotocol: TCPresources:limits:cpu: 50m
    ---
    apiVersion: v1
    kind: Service
    metadata:name: proxy
    spec:ports:- name: http-80port: 80protocol: TCPtargetPort: 8080selector:app: proxy
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:name: proxy-gatewaynamespace: istio-system        # 要指定为ingress gateway pod所在名称空间
    spec:selector:app: istio-ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- "fe.icloud2native.com"
    ---
    
  3. demoapp中定义fault

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: canarymatch:- uri:prefix: /canaryrewrite:uri: /route:- destination:host: demoappsubset: v11fault:         # 故障注入的一种方式abort,会在发往v11版本的20%的流量上注入abort故障,返回的http code为555abort:percentage:value: 50httpStatus: 555- name: defaultroute:- destination:host: demoappsubset: v10fault:delay:              # 故障注入的另外一种方式延迟,会在发往v10的版本上20%的流量上注入delay故障,延迟时间为3秒percentage:value: 50fixedDelay: 3s
    
  4. 定义retry机制

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: proxy
    spec:hosts:- "fe.icloud2native.com"                     # 对应于gateways/proxy-gatewaygateways:- istio-system/proxy-gateway       # 相关定义仅应用于Ingress Gateway上- mesh                             # 应用在网格内所有的sidercar上http:- name: defaultroute:- destination:host: proxytimeout: 1sretries:attempts: 5   # 加上第一次请求,在log里面看到的应该是请求了6次。perTryTimeout: 1s # 每次重试超过1s,就会发起第二次重试retryOn: 5xx,connect-failure,refused-stream
    
  5. 测试

    上述定义的规则是:后端demoapp注入了abort和delay的故障,前端服务proxy请求demoapp的时候,在proxy中定义了retry,当请求后端出现5xx,connect-failure,refused-stream的时候,会进行retry机制。在前端的log里面看到的应该是请求了6次。

5.8 Traffic mirror

场景:有时候想要用线上真实流量来测试将要上线的服务,这样更能模拟出真实的线上测试效果。所以会将线上真实流量mirror到测试环境。

  1. 定义demoapp v1.0demoapp v1.1版本和subset的dr规则。参考weight中定义

  2. 定义traffic mirror的virtualservice规则

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:name: demoapp
    spec:hosts:- demoapphttp:- name: traffic-mirrorroute:- destination:host: demoappsubset: v10mirror:host: demoappsubset: v11
    
  3. 测试

    我们在客户端请求curl demoapp:8080,虽然请求到了v10 版本,但是我们在v11版本的pod里面看到了有流量进入。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

相关文章:

【06】VirtualService高级流量功能

5.3 weight 部署demoapp v10和v11版本 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: demoappv10version: v1.0name: demoappv10 spec:progressDeadlineSeconds: 600replicas: 3selector:matchLabels:app: demoappversion: v1.0template:metadata:labels:app…...

322. 零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...

【大模型-第一篇】在阿里云上部署ChatGLM3

前言 好久没写博客了,最近大模型盛行,尤其是ChatGLM3上线,所以想部署试验一下。 本篇只是第一篇,仅仅只是部署而已,没有FINETUNE、没有Langchain更没有外挂知识库,所以从申请资源——>开通虚机——>…...

2023-11-14 mysql-主从复制-相关文档

摘要: 2023-11-14 mysql-主从复制-相关文档 官方文档: MySQL :: MySQL 8.0 Reference Manual :: 17 Replication MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication 相关参数: mysql> show variables like %repl%; +-----------------------------------------…...

ios 对话框 弹框,输入对话框 普通对话框

1 普通对话框 UIAlertController* alert [UIAlertController alertControllerWithTitle:"a" message:"alert12222fdsfs" pr…...

(论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking

文献阅读笔记(分层卷积特征) 简介 题目 Hierarchical Convolutional Features for Visual Tracking 作者 Chao Ma, Jia-Bin Huang, Xiaokang Yang and Ming-Hsuan Yang 原文链接 arxiv.org/pdf/1707.03816.pdf 关键词 Hierarchical convolution…...

基于IGT-DSER智能网关实现GE的PAC/PLC与罗克韦尔(AB)的PLC之间通讯

工业自动化领域的IGT-DSER智能网关模块支持GE、西门子、三菱、欧姆龙、AB等各种品牌的PLC之间通讯(相关资料下载),同时也支持PLC与Modbus协议的工业机器人、智能仪表等设备通讯。网关有多个网口、串口,也可选择WIFI无线通讯。无需编程开发,只…...

创建符合 Web 可访问性标准的 HTML 布局

人们常说网络可访问性是当今万维网的“必须”。“Web 可访问性”一词定义了开发人员需要遵循的一组准则,以使残障人士和 Web 应用程序的交互更加方便。任何网站的内容、UI/UX 设计和布局都应该易于访问。在本文中,Logicify团队为 HTML/CSS 开发人员提供了…...

SQL学习(CTFhub)整数型注入,字符型注入,报错注入 -----手工注入+ sqlmap注入

目录 整数型注入 手工注入 为什么要将1设置为-1呢? sqlmap注入 sqlmap注入步骤: 字符型注入 手工注入 sqlmap注入 报错注入 手工注入 sqlmap注入 整数型注入 手工注入 先输入1 接着尝试2,3,2有回显,而3没有回显…...

数字人部署之VITS+Wav2lip数据流转处理以提高实时性

一、模型 VITS模型训练教程VITS-从零开始微调(finetune)训练并部署指南-支持本地云端 Wav2lip是2D数字人,可参考训练嘴型同步模型Wav2Lip PS:以上模型都是开源可用。 二. VITS数据处理问题 VITS模型的输出为一维的numpy类型数据&#xff…...

GPT 学习法:复杂文献轻松的完美理解、在庞大的不确性中找到确定性

GPT 学习法:复杂文献轻松的完美理解、在庞大的不确性中找到确定性 复杂文献 - 基础理解GPT 理解法 - 举例子、归纳、逻辑链推导本质、图示、概念放大器GPT 分析法 - 二分、矩阵、公式、要素、过程 做复杂题:在庞大的不确性中找到确定性思维追踪&#xff…...

前端简单的爱心形状

首先需要创建一个 HTML 文件&#xff0c;然后在其中添加 CSS 样式和 JavaScript 代码。以下是一个简单的示例&#xff1a; 创建一个名为 loveheart.html 的文件 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><…...

acwing算法基础之数学知识--求数a的欧拉函数值phi(a)

目录 1 基础知识2 模板3 工程化 1 基础知识 数a的欧拉函数 ϕ ( a ) \phi(a) ϕ(a)&#xff1a;表示1~n中与n互质的数的个数。其中两个数互质&#xff0c;是指这两个数的最大公约数为1。 根据定义&#xff0c;我们可以写出如下方法&#xff0c; int gcd(int a, int b) {retu…...

Jenkins的介绍与相关配置

Jenkins的介绍与配置 一.CI/CD介绍 &#xff11;.CI/CD概念 ①CI 中文意思是持续集成 (Continuous Integration, CI) 是一种软件开发流程&#xff0c;核心思想是在代码库中的每个提交都通过自动化的构建和测试流程进行验证。这种方法可以帮助团队更加频繁地交付软件&#x…...

开源网安受邀参加网络空间安全合作与发展论坛,为软件开发安全建设献计献策

​11月10日&#xff0c;在广西南宁举办的“2023网络空间安全合作与发展论坛”圆满结束。论坛在中国兵工学会的指导下&#xff0c;以“凝聚网络空间安全学术智慧&#xff0c;赋能数字经济时代四链融合”为主题&#xff0c;邀请了多位专家及企业代表共探讨网络安全发展与数字经济…...

arcgis提取栅格有效边界

方法一&#xff1a;【3D Analyst工具】-【转换】-【由栅格转出】-【栅格范围】 打开一幅栅格数据&#xff0c;利用【栅格范围】工具提取其有效边界&#xff08;不包含NoData值&#xff09;&#xff1a; 方法二&#xff1a;先利用【栅格计算器】将有效值赋值为1&#xff0c;得到…...

后端接口性能优化分析-问题发现问题定义

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…...

中国首个通过ASIL D认证的IP发布,国产芯片供应商的机会来了

来自智能汽车的“芯”安全需求正在快速爆发。 一方面&#xff0c;随着智能汽车ADAS的快速迭代与逐渐普及化&#xff0c;以及越来越多元化智能座舱功能的快速上车&#xff0c;由此带来的车辆信息安全场景也在与日俱增&#xff0c;例如云端链接、设备身份认证、自动驾驶安全保障…...

[单片机课程设计报告汇总] 单片机设计报告常用硬件元器件描述

[单片机课程设计必看] 单片机设计报告常用描述 硬件设计 AT89C51最小系统 AT89C51是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS16位单片机&#xff0c;片内含4k bytes的可反复擦写的只读程序存储器和128 bytes的随机存取数据存储器&#xff0c;期间采用ATMEL公司的高…...

Docker学习——⑧

文章目录 1、什么是 Docker Compose(容器编排)2、为什么要 Docker Compose&#xff1f;3、Docker Compose 的安装4、Docker Compose 的功能和使用场景5、Docker Compose 文件&#xff08;docker-compose.yml&#xff09;5.1 文件语法版本5.2 文件基本结构及常见指令 6、Docker …...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...