本地限速
限速用于控制网络接口控制器发送或接收的请求速率,这有助于防止 DoS 攻击并限制网络抓取。
Envoy 支持本地(非分布式)和全局限速,以及两种类型的本地限速
通过 本地限速过滤器 进行 L4 连接
通过 HTTP 本地限速过滤器 进行 HTTP 请求
此沙箱提供了 L4 连接限速的示例。
步骤 1:启动所有容器
更改到 examples/local_ratelimit
目录并启动 docker 组成。
$ pwd
envoy/examples/ratelimit
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ratelimtit_envoy-stat_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp,:::10000->10000/tcp, 0.0.0.0:9901->9901/tcp,:::9901->9901/tcp, 0.0.0.0:9902->9902/tcp,:::9902->9902/tcp
ratelimtit_service_1 /docker-entrypoint.sh ngin ... Up 80/tcp
步骤 2:测试上游服务的限速
沙箱配置了 10000
端口用于上游服务。
如果请求达到限速,Envoy 将添加 x-local-rate-limit
标头并拒绝连接,并返回 429 HTTP 响应代码,内容为 local_rate_limited
。
现在,使用 curl
对受限上游服务发出五个请求
$ for i in {1..5}; do curl -si localhost:10000 | grep -E "x-local-rate-limit|429|local_rate_limited"; done
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
前两个请求获得响应,其余请求被拒绝,并返回预期响应。
步骤 3:测试 Envoy 统计信息的限速
沙箱配置了两个端口用于提供 Envoy 的管理和统计信息接口
9901
公开标准管理接口9902
公开管理接口的限速版本
使用 curl
对端口 9901
上的无限制统计信息发出五个请求,它不应包含任何限速响应
$ for i in {1..5}; do curl -si localhost:9901/stats/prometheus | grep -E "x-local-rate-limit|429|local_rate_limited"; done
现在,使用 curl
对受限统计信息发出五个请求
$ for i in {1..5}; do curl -si localhost:9902/stats/prometheus | grep -E "x-local-rate-limit|429|local_rate_limited"; done
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
HTTP/1.1 429 Too Many Requests
x-local-rate-limit: true
local_rate_limited
另请参见
- 全局限速
Envoy 的全局限速参考文档。