我想将Kong用作我所有上游服务的API网关。而且我想使用API密钥,以便我的客户可以使用它们来使用允许他们使用的一些API。
有一个用于管理API密钥的插件:https://docs.konghq.com/hub/kong-inc/key-auth/
但是我想知道是否可以将属性添加到某些API密钥或将其链接到某些配置。
让我举例说明:
我有3个api
- API 1
- API 2
- API 3
在Kong API网关上,我要使用速率限制。所以我想为2个具有某些属性的客户生成API密钥
- 客户X:基本订阅,其API 1的速率限制为每分钟10个请求,API 2的速率限制为每分钟20个请求
- 客户Y:API 2的高级订阅,其速率限制为每分钟5000个请求和API 3的每分钟1000个请求
因此,在Kong中,我为这3个API创建了3个服务,并向其中添加了速率限制插件。是否有任何方法可以让速率限制插件(基于请求中发送的API密钥)知道对于刚刚输入的请求应该使用哪个限制?
在我看来,我每次都需要为具有特定值的特定速率限制的相同API创建新服务。与许多客户和api打交道时,这感觉有些难以控制。
是否可以根据传递的API密钥来获取速率限制值?
还是有解决方案?还是这是我们在API网关中想要的实际行为,如果可以,为什么?
答案 0 :(得分:0)
Kong Enterprise Edition有一个名为“ Rate Limiting Advanced”的插件,可以解决此问题。它允许您为每个速率限制插件指定一个“标识符”,对于这种特殊情况,您将使用“标识符:消费者”。如果您要为同一API和不同使用者使用两个不同的速率限制,例如
然后,您必须在使用者而非api上配置速率限制。
另外,在您的问题中,您指的是apis
;自v0.13.0起,不推荐使用FYI api
个对象,您应该移至route/service
个对象。
答案 1 :(得分:0)
您也可以在使用者级别配置插件。这有效地将适当的速率限制应用于每个使用者(API密钥)。
文档中的示例代码:
$ curl -X POST http://kong:8001/consumers/{consumer}/plugins \
--data "name=rate-limiting" \
\
--data "config.second=5" \
--data "config.hour=10000"
文档:https://docs.konghq.com/hub/kong-inc/rate-limiting/#enabling-the-plugin-on-a-consumer