Rate Limiting用于控制发送到上游服务的请求速率。它可用于防止 DoS 攻击、限制网络抓取和其他形式的过度使用。如果没有速率限制,客户可以无限制地访问您的上游服务,这可能会对可用性产生负面影响。
Kong Gateway通过使用Rate Limiting插件对客户端施加速率限制。启用速率限制后,客户端在可配置的时间段内可以发出的请求数量受到限制。该插件支持将客户端识别为consumers或通过请求的客户端 IP 地址识别。
本教程使用Rate Limiting(免费)。还可以用的Rate Limiting Advanced(付费)。高级版本提供了额外的功能,例如支持滑动窗口算法和高级 Redis 支持以提高性能。
Global rate limiting
安装全局插件意味着对Kong Gateway的每个代理请求都将收受到Rate Limiting的强制执行。(初学者不要将时间配置的很长,不然有你受的)
启用Rate Limiting
curl -i -X POST http://localhost:8001/plugins \
--data name=rate-limiting \
--data config.minute=5 \
--data config.policy=local
此命令指示Kong Gateway对所有Routes和Services的每个客户端IP地址每分钟最多施加5个请求;
注意:这里需要了解,一旦你的这个插件生效,可能会波及到你的admin请求(包括但不限于上述的启用RateLimiting请求、查询service列表。。。等等这些)尤其是那些已经将8001代理了的情况;
...
"id": "fc559a2d-ac80-4be8-8e43-cb705524be7f",
"name": "rate-limiting",
"enabled": true
...
验证
配置速率限制后,您可以通过发送更多请求然后在配置的时间限制内允许来验证它是否配置正确并且正在工作。
在浏览器中打开http://localhost:8000/mock/request ,1分钟内刷新页面6次。
在第 6 个请求之后,您应该会收到 429“API rate limit exceeded”错误:
{
"message": "API rate limit exceeded"
}
Services Rate Limiting