首页 > 其他分享 >envoy&istio 对接ratelimit 实现限流之envoy配置

envoy&istio 对接ratelimit 实现限流之envoy配置

时间:2024-04-02 19:01:29浏览次数:18  
标签:envoy istio actions ratelimit 限流 path type

envoy与ratelimit对接需要完成两步,1 启用ratelimit 过滤器,2 配置触发条件。

一、启用ratelimit 过滤器

envoy要与ratelimit服务对接,需要在lds的http_filter配置上启用ratelimit filter,启用方式如下

 1 http_filters:
 2                   - name: envoy.filters.http.ratelimit
 3                     typed_config:
 4                       "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
 5                       domain: rl
 6                       request_type: external
 7                       stage: 0
 8                       rate_limited_as_resource_exhausted: true
 9                       failure_mode_deny: false
10                       enable_x_ratelimit_headers: DRAFT_VERSION_03
11                       rate_limit_service:
12                         grpc_service:
13                           envoy_grpc:
14                             cluster_name: ratelimit
15                         transport_api_version: V3
16                   - name: envoy.filters.http.router
17                     typed_config:
18                       "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

对于七层协议,router filter一定要放在最后!

添加限流过滤器,指定限流服务器、domain、request_type
domain 与限流服务中定义的domain 保持一致,不一致不会报错,限流配置会失效。
request_type: 什么类型的请求使用限流服务,支持的配置 internal、external、both
判断规则,请求头中x-envoy-internal为true 则请求类型为internal,如果request_type 设置为external则不应用限流,反之亦然。
当request_type设置为both时 所有请求都应用限流(不一定触发,后面还有触发设置)
enableXRatelimitHeaders: 启用限流响应头类型,即当请求被限流后,envoy网关会在响应头中添加标头
X-RateLimit-Limit-:指示当前时间窗口中与客户端关联的请求配额,后跟配额策略的描述,例如:10, 10;w=1;name="per-ip", 1000;w=3600
X-RateLimit-Remaining-:当前时间窗口内剩余请求数量
X-RateLimit_Rest-: 限流重置剩余秒

完整配置如下图所示

二、配置触发规则

 1  - match:
 2       prefix: /test/testlimit/
 3     route:
 4       cluster: k8s_proxy
 5       rateLimits:
 6         - actions:
 7             - requestHeaders:
 8                 headerName: :path
 9                 descriptorKey: abc
10         - actions:
11             - requestHeaders:
12                 headerName: :path
13                 descriptorKey: minute100
14         - actions:  
15             - requestHeaders:
16                 headerName: userid
17                 descriptorKey: userid
18             - requestHeaders:
19                 headerName: :path
20                 descriptorKey: path
21         - actions:
22             - requestHeaders:
23                 headerName: userid
24                 descriptorKey: useridminute
25             - requestHeaders:
26                 headerName: :path
27                 descriptorKey: path

在vhds的路由配置中添加如上配置

该配置设置在路由层面,详细描述限流触发规则,每个actions 是同级别的代表它们同时生效。

actions内部是规则链,顺序很重要,例如示例中的 第三个actions 它触发的规则是 userid_useridvalue_path_pathvalue

参考地址 https://www.envoyproxy.io/docs/envoy/v1.28.0/api-v3/config/route/v3/route_components.proto#envoy-v3-api-msg-config-route-v3-ratelimit

特别备注

1. 对于每个请求,如果满足限流规则,envoy会将触发的key一次性传递给限流服务。
2. 如果限流服务不可用,则envoy直接放过请求,不做限流
3. 触发规则的统计是累加的,如果要放宽限制,要考虑累加的超限数量。 例如 10次/小时,如果超限了,客户端仍旧访问了100次即当前小时内该接口/服务被访问了110次/小时,业务找运维放宽限制至100次/小时,这个时候客户端访问依旧超限

标签:envoy,istio,actions,ratelimit,限流,path,type
From: https://www.cnblogs.com/pjjwpc/p/18111251

相关文章

  • Redis+lua脚本配合AOP限流
    限流Redis脚本限流脚本配合切面注解定义注解:@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceRateLimiter{/***限流key*/publicStringkey()defaultCacheConstants.RATE_LIMIT_KEY;/**......
  • Sentinel 的QPS限流和Redis流量风控
    目录Sentinel的QPS限流导入依赖:这个限制的时每秒的QPS为1:如果触发风控,设置降级策略。在代码中引入Sentinel注解控制流控规则。用Redis实现流量风控:lua脚本如下:配置过滤器器执行lua脚本,判断访问次数是否超过:我们可以通过这个过滤器得知,再timeWindow时间内,我们的访......
  • Istio
    Istio1、istio简介1.1 istio概念istio是一个服务网格形态的,用于云原生形态下,对服务进行治理的基础设施平台1.2 istio特点#可观察性#安全性#流量治理1.3istio功能通过边车模式,为服务注入一个代理,实现以下功能1、服务发现,对其代理的svc进行服务发现,svc后端通常存......
  • 平芯微PW1605,24V,30V,48V可调过压保护芯片,1A-5A可调限流芯片
    一般描述PW1605 是一款电流限制开关,具有可编程输入过压保护和输出电压箝位功能。集成保护N沟道FET具有极低的RDS(ON)功能,PW1605有助于降低正常工作期间的功率损耗。可编程软启动时间控制启动期间输出电压的压摆率。独立的使能控制允许复杂的系统排序控制。该器件还集成了......
  • 限流场景&限流方案的一些思考
    限流场景保护系统资源:限流可用于保护系统资源,防止系统被过度请求而导致资源耗尽或系统崩溃。例如,限制对数据库、缓存、消息队列等关键资源的访问速率,以确保系统的稳定性和可用性。防止恶意攻击:限流可用于防止恶意攻击和恶意请求,如暴力破解、DDoS攻击等。通过限制来自单个I......
  • Istio实战-01.环境部署
    目录环境说明操作说明下载Istio安装Istio部署应用对外暴露应用程序部署仪表板卸载删除BookInfo应用删除Istio删除命名空间删除Envoy边车代理的标签参考链接转载请注明出处环境说明Centos7.9Docker24.0.7Kubernetes1.23.5操作说明以下指令全部在Kubernetes......
  • 备考ICA----Istio实验4---使用 Istio 进行金丝雀部署
    备考ICA----Istio实验4—使用Istio进行金丝雀部署上一个实验已经通过DestinationRule实现了部分金丝雀部署的功能,这个实验会更完整的模拟展示一个环境由v1慢慢过渡到v2版本的金丝雀发布.1.环境清理kubectldeletegw/helloworld-gatewayvs/helloworlddr/helloworld......
  • 备考ICA----Istio实验3---Istio DestinationRule 实验
    备考ICA----Istio实验3—IstioDestinationRule实验1.hello服务说明这部分服务沿用Istio实验2的deployment和svc同时在上一个实验的deployment中分别加入了2个标签:app:helloworld两个deployment共有version:v1和version:v2两个deploymen不同详见:https://b......
  • k8s系列之十四安装Istio
    Istio是一个开源的服务网格(ServiceMesh),用于连接、管理和保护微服务。它提供了一组功能强大的工具,包括流量管理、安全性、监控和跟踪等,以帮助在微服务架构中更好地管理服务之间的通信。一些主要的Istio功能包括:流量管理:Istio可以对流量进行智能路由、负载均衡和故障......
  • 限流器(流控)+ 线程 C++实现
    在C++中,你可以使用互斥锁(mutex)和条件变量(conditionvariable)来实现一个简单的限流器(流控)以及线程。下面是一个简单的例子,它创建了一个限流器类,该类允许一定数量的线程同时访问某个资源。#include<iostream>#include<thread>#include<mutex>#include<condition_variable>......