上篇文章中,我们介绍了如何通过Kong网关来将API对外暴露服务,但是这样并没有体现Kong的优势。接下来我们就介绍几种API常见功能(限流、鉴权等),这些功能传统需要开发介入才能完成,我们看看Kong怎么免开发实现这些功能。
在Kong网关上实施API限流(rate limitting)是确保API正常运行并避免滥用的重要步骤。本文将介绍限流原理、Kong网关限流分类及实战等。
微服务系列传送门:
1、 为什么需要API网关
2、 Kong初探
3、 Kong安装配置
令牌桶算法是一种基于时间的限流算法。在固定的时间间隔内,向令牌桶中添加令牌。当请求到达时,需要从桶中获取一个令牌。如果令牌可用,请求将被处理;否则,请求将被拒绝。令牌桶算法可以实现精确的速率限制,并且可以根据需要调整令牌生成速率。
在Kong网关中,限流功能是通过配置rate-limiting插件来实现的。当客户端请求API时,Kong网关会检查已配置的限流规则。根据这些规则,如果请求速率超过限制,请求将被阻止或拒绝。
Kong网关提供了两种类型的限流:
1. 令牌桶算法:该方法使用一个令牌桶,在请求速率增加时分配令牌,并在速率降低时回收令牌。通过维护一个固定的速率,可以防止突发流量造成服务不可用。
2. 滑动窗口:滑动窗口技术根据时间窗口内的请求数量来限制速率。它可以适应于不同的时间段和请求模式,并提供更大的限流灵活性。这个功能需要Kong网关的License,我们就不再演示。
环境搭建参考文章:通过Kong网关来将API对外暴露服务
下面指令开启了单client IP维度所有请求的限流,现在每分钟5次请求,超过就限制
curl -i -X POST http://localhost:8001/plugins \
--data name=rate-limiting \
--data config.minute=5 \
--data config.policy=local
浏览器访问URL 5次后,即可看到error报错,效果得到验证
首先查找到上面规则的ID,然后调用API删除
# 查找插件ID
[root@VM-4-13-centos ~]# curl -s http://localhost:8001/plugins | jq
{
"data": [
{
"enabled": true,
"service": null,
"consumer": null,
"name": "rate-limiting",
"id": "cb7edc98-ae09-4668-b5b3-7cf0b9e79e56",
...
}
# 删除规则
[root@VM-4-13-centos ~]# curl -s -X DELETE http://localhost:8001/plugins/cb7edc98-ae09-4668-b5b3-7cf0b9e79e56
# 确认已删除
[root@VM-4-13-centos ~]# curl -s http://localhost:8001/plugins | jq
{
"data": [],
"next": null
}
使用同样的后端,创建service example_service_1并加入路由example_route_1
、path v2
[root@VM-4-13-centos kong]# curl -i -s -X POST http://localhost:8001/services --data name=example_service_1 --data url='http://127.0.0.1:8081'
[root@VM-4-13-centos kong]# curl -i -X POST http://localhost:8001/services/example_service/routes --data 'paths[]=/v2' --data name=example_route_1
curl -X POST http://localhost:8001/services/example_service/plugins \
--data "name=rate-limiting" \
--data config.minute=5 \
--data config.policy=local
在浏览器分别访问v1、v2接口,会发现v1会被限流、v2没有被限流,说明service级别的限流仅对service生效而不是全局生效。
由于v1、v2使用的是同一个后端,也说、说明了无需修改后端,即可通过Kong网关实现。
除了上面的限流方式外,还支持route级别限流(匹配路由后尽心该路由规则的整体i限流)、用户级别限流,这里就不一一测试了,感兴趣的读者可以自行测试。
Kong网关的API限流功能提供了一种有效保护服务免受滥用和攻击的方法。通过使用令牌桶算法和滑动窗口(商业版本才支持)等高级技术,可以实现更灵活和可扩展的限流功能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。