Istio中的全局限流方案

Istio中的全局限流方案

在k8s网格(istio)环境中, 可以通过创建Envfoyfilter的方式来配置限流。

在istio官方文档中,提供了两种限流方式:

  • 本地限流
  • 全局限流

本地限流的细节这里不再赘述, 主要讲解全局限流的配置方式。

基本原理

istio通过向pod中注入sidecar,并通过envoy来代理流量,完成对流量的控制。
在这里插入图片描述

sidecar中的envoy, 由polit-agent管理。通过监听k8s中资源的变化,并由XDS协议下发配置到envoy中。
在这里插入图片描述

本地限流之所以称之为本地,是因为它只能为单个pod限流。 它通过hash桶算法进行流量分配。优点是可以平滑流量。
在这里插入图片描述

全局限流解决的是一个服务有多个pod的情况下,如何进行统一的限流。全局限流是通过sidecar中的envoy调用ratelimit服务来实现的。

全局限流

全局限流通过外部服务ratelimit来进行流量的统一控制。
在这里插入图片描述

ratelimit服务是一个独立的服务,它通过gRPC协议提供限流服务。envoy通过gRPC协议调用ratelimit服务,来获取限流的配置。

ratelimit中的配置管理支持configmapXDS两种方式。我们开发了单独的ratelimit-configserver服务,用于管理、下发配置到ratelimit服务中。
在这里插入图片描述

这里不赘述ratelimit-configserver的实现, 主要讲解如何在istio中配置全局限流。

使用ConfigMap的架构是这样的
在这里插入图片描述

ratelimit服务部署

具体的部署方式以及示例使用, 在istio的官方文档中有详细的介绍。这里不再赘述。文档地址https://istio.io/latest/zh/docs/tasks/policy-enforcement/rate-limit/#global-rate-limit-advanced-case

这里需要提的是, 官方文档中使用的镜像版本较老,不支持XDS的方式获取配置, 建议自行拉取最新代码并打包镜像。

配置说明

配置的方式比较生涩, 难以理解, 这里会着重说明一下。

基础配置说明

  • domain 限流策略的唯一标识,与EnvoyFilter中的domain字段对应
  • descriptors 用于声明详细的规则, 是一个数组, 可以配置多个规则
  • descriptors.key 规则的标识, 可以简单理解为http请求中某个header的代号(这并不准确,暂时先这样理解)
  • descriptors.value 规则的值, 用于匹配请求中的某个header的值。 不指定时则匹配所有请求
  • descriptors.rate_limit.unit 限流的单位, 可以是second, minute, hour, day
  • descriptors.rate_limit.requests_per_unit 每个单位时间内的请求数
domain: ratelimitdescriptors:- key: PATHvalue: "/productpage"rate_limit:unit: minuterequests_per_unit: 1- key: PATHvalue: "api"rate_limit:unit: minuterequests_per_unit: 2- key: PATHrate_limit:unit: minuterequests_per_unit: 100

上面的配置表示:
对于/productpage路径的请求, 每分钟限流1次; 对于api路径的请求, 每分钟限流2次; 对于其他请求, 每分钟限流100次。

注意: /productpage 和 api 的请求次数会计入到100次的限流中。

官方文档示例中, 除了创建configmap外, 还有两个envoyfilter。 一个是用于配置ratelimit服务的地址(filter-ratelimit), 另一个是用于配置策略与请求之间的关系(filter-ratelimit-svc), 如KeyA对应的是请求头中的哪一个。

filter-ratelimit中我们主要关注typed_config这一项。

# type 声明当前使用的API版本
"@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
# domain与configmap中的配置匹配
domain: ratelimit
# failure_mode_deny 表示当ratelimit服务不可用时,是否拒绝请求。 
# 建议设为false, 这样即使我们的限流服务出现问题也不会影响业务服务的正常运行
failure_mode_deny: true
# timeout 速率限制服务RPC的超时(以毫秒为单位)。如果没有设置,则默认为20毫秒。
# 超时时间建议设的短一些, 这样可以快速失败,不会影响业务服务的正常运行
timeout: 10s
rate_limit_service:grpc_service:envoy_grpc:# 用于设置上游的ratelimit服务的端口号及地址# 这里测试时用ip会有问题 cluster_name: outbound|8081||ratelimit.default.svc.cluster.local# 会设置到authority标头中authority: ratelimit.default.svc.cluster.local# 用于设置请求携带的metadatainitial_metadata: {}transport_api_version: V3

filter-ratelimit-svc中我们主要关注rate_limits这一项。

rate_limits:
- actions: - request_headers:// 这里说明PATH这个key,会从:path这个header中读取数据匹配valueheader_name: ":path"descriptor_key: "PATH"- request_headers:// 可以有多个, 也可通过其他方式匹配请求。如参数、正则等,具体查看istio文档header_name: "x-header-key"descriptor_key: "KeyA"
// action也可以有多个

高级配置

着重于ratelimit中的配置, 参考ratelimit官方文档

  1. 对database为user和database为default的请求分别限制
    domain: mongo_cpsdescriptors:- key: databasevalue: usersrate_limit:unit: secondrequests_per_unit: 500- key: databasevalue: defaultrate_limit:unit: secondrequests_per_unit: 500
    
  2. 每个号码每天只允许100条信息; 且对message_type为marketing的信息, 每天每个号码只允许5条(算上5条,共在100条)
domain: messaging
descriptors:- key: message_typevalue: marketingdescriptors:- key: to_numberrate_limit:unit: dayrequests_per_unit: 5- key: to_numberrate_limit:unit: dayrequests_per_unit: 100
  1. 每个原地址(客户)允许10qps,"50.0.0.5"加入黑名单拒绝访问
domain: edge_proxy_per_ip
descriptors:- key: remote_addressrate_limit:unit: secondrequests_per_unit: 10- key: remote_addressvalue: 50.0.0.5rate_limit:unit: secondrequests_per_unit: 0

总之, descriptors字段中, 多个规则平级为and关系, 多个规则嵌套为or关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3030930.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

解双曲型非线性方程的Harden-Yee算法(TVD格式)

解双曲型非线性方程的Harden-Yee算法 先贴代码,教程后面有空再写 import matplotlib import math matplotlib.use(TkAgg) import numpy as np import matplotlib.pyplot as plt def Phiy(yy,epsi):#phi(y)if abs(yy) > epsi:phiyy abs(yy)else:phiyy (yy*yy…

VTK 数据类型:规则网格

VTK 数据类型:规则网格 VTK 数据类型:规则网格分类三种规则网格需要的设置实例 VTK 数据类型:规则网格 分类 VTK 有 3 种规则网格: vtkImageData:几何结构和拓扑结构都是规则的。vtkRectilinearGrid:几何…

AI大模型探索之路-训练篇20:大语言模型预训练-常见微调技术对比

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

MATLAB 基于格网的点云最低点采样 (69)

MATLAB 基于格网的点云最低点采样 (69) 一、算法原理二、算法实现1.代码2.效果三、数据链接一、算法原理 最低点格网采样是一种基于点云数据的简化技术。它通过将点云数据划分为网格,并在每个网格单元中保留最低的点来实现简化。以下是该方法的步骤: 1 定义格网尺度: 选…

AI绘画的基本原理是什么?

目录 一、AI绘画的基本原理是什么? 二、Python中有几个库可以用于AI绘画? 三、OpenCV画一个人形 四、AI画的红苹果 一、AI绘画的基本原理是什么? AI绘画的原理基于机器学习和人工智能技术,通过这些技术模型能够理解文本描述并…

【python】将json内解码失败的中文修改为英文(‘utf-8‘ codec can‘t decode,labelme标注时文件名未中文)

出现问题的场景: 语义分割数据集,使用labelme工具进行标注,然后标注图片存在中文名,导致json标签文件写入中文图片名,从而解析失败。 代码解析json文件时,出现报错: python脚本需求&#x…

汽车EDI:安通林Antolin EDI 项目案例

安通林(Antolin)是一家全球性的汽车零部件制造商,专注于汽车内饰系统和零部件的生产,致力于创新和采用先进的技术。近年来 安通林Antolin 推动其供应商部署EDI系统,使得双方能够通过EDI传输业务单据,极大提…

【oj题】环形链表

目录 一. OJ链接: 环形链表 【思路】 快慢指针 ​编辑【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题? ​编辑【扩展问题】快指针一次走3步,走4步,...n步行吗? 二. OJ链接&#xff1a…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题: 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本: sed -i s/old_string/new_string/g /path/to/file然而,当我在Mac OS X上尝试时,我得到: command i expects \ followed by text我以为我的Mac运行的是…

Liunx_DNS域名解析服务

目录 DNS术语 域名分层 顶级域名(Top-Level Domain, TLD) 二级域名(Second-Level Domain, SLD) 子域名(Subdomain) FQDN(Fully Qualified Domain Name) 域名分层的意义 域名…

【研发日记】Matlab/Simulink避坑指南(十二)——Initialize Function执行Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记,Matlab/Simulink避坑指南(七)——数据溢出钳位Bug》 见《研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug》 见《研发日记,Matlab/Simuli…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔?不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等,即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦,如果您是点击删除的人,情况会…

14 华三 Telent

AI 解读 09 华三 SSH-CSDN博客 华三 Telent是华为三号电信工程有限公司的简称,是一家专门从事电信网络工程建设的公司。该公司提供电信网络规划、设计、建设、维护等一系列服务,包括有线和无线网络设备的安装和调试、网络性能优化等。华三 Telent致力于…

word转pdf的java实现(documents4j)

一、多余的话 java实现word转pdf可用的jar包不多,很多都是收费的。最近发现com.documents4j挺好用的,它支持在本机转换,也支持远程服务转换。但它依赖于微软的office。电脑需要安装office才能转换。鉴于没在linux中使用office,本…

浅谈如何自我实现一个消息队列服务器(7)——编写服务器部分

文章目录 一、编写服务器代码1.1、分析一个服务器应具备的功能1.1.1、成员变量1.1.2、对外提供的接口 一、编写服务器代码 再次拿出这张图,前面我们已经将重要概念:VirtualHost、exchange、msgQueue、message、binding 都实现了,此时就可以开…

灯珠CCD或CMOS成像RGB数据 光谱重建

1. 源由 本文主要为了通过摄像头CCD或者CMOS传感器对灯珠成像数据分析、重建灯珠可见光范围光谱数据的研究,从原理和方法上论证可行性。 随着照明技术迅猛发展,LED技术日渐成熟。LED产品由于具备经久耐用、节能且价格低等优势,已成为照明行…

python中的数据可视化:二维直方图 hist2d()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python中的数据可视化: 二维直方图 hist2d() 选择题 关于以下代码输出结果的说法中正确的是? import matplotlib.pyplot as plt import numpy as np x np.random.normal(0, 1, …

如何打开远程桌面连接?

远程桌面连接是一项强大的功能,它允许我们远程访问其他计算机,并在远程计算机上进行操作。这对于远程办公、技术支持和远程培训等场景非常有用。本文将介绍如何在不同操作系统中打开远程桌面连接。 Windows系统 在Windows操作系统中,打开远程…

【动态规划】子数组、子串系列II|等差数列划分|最长湍流子数组|单词拆分|环绕字符串中唯一的子字符串

一、等差数列划分 413. 等差数列划分 算法原理 💡细节: 1.如果当前nums数组中i位置的数和前面两个数可以构成等差数列,那么当前位置所有子数组构成的等差数列个数dp[i]就等于前一个位置有子数组构成的等差数列个数1(这个1代表增加…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…