Kong网关如何为单个服务配置多套速率限流规则
Kong 多维度限流配置问题解答
问题根因
你遇到的同一插件类型仅最后一个生效的问题,是未配置插件唯一实例名导致的同作用域插件覆盖。
核心问题答复
- 开源Kong 2.3及以上版本原生支持同一作用域绑定同一插件的多个不同实例,该需求并非开源rate-limiting插件的固有局限,无需使用企业版高级限流插件即可实现。
- 仅2.3以下版本的Kong默认存在同作用域同类型插件只能绑定一个的限制。
适配方案
方案1:高版本Kong(2.3+)使用插件实例名配置
给两个限流插件分别添加唯一的实例名注解即可同时生效,修改后的配置如下:
- 组织维度限流插件配置
apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata: name: rate-limiting-myapp-org annotations: konghq.com/plugin-instance-name: org-rate-limit # 全局唯一的插件实例名 config: day: 8 # 按需求调整为单日限制 limit_by: header header_name: 'x-org-id' policy: local plugin: rate-limiting
- 用户维度限流插件配置
apiVersion: configuration.konghq.com/v1 kind: KongPlugin metadata: name: rate-limiting-myapp-user annotations: konghq.com/plugin-instance-name: user-rate-limit # 与上方实例名不同即可 config: day: 5 # 按需求调整为单日限制 limit_by: header header_name: 'x-user-id' policy: local plugin: rate-limiting
- Service注解配置保持引用两个插件即可:
konghq.com/plugins: rate-limiting-myapp-org, rate-limiting-myapp-user
配置后两个限流规则会同时生效,任意一个阈值触发都会返回429限流响应,完全满足用户+组织双维度限流需求。
方案2:低版本Kong兼容方案
如果使用的是2.3以下版本不支持插件实例名,可以将两个限流规则绑定到不同作用域避免覆盖:比如将组织维度限流绑定到对应Ingress资源,用户维度限流绑定到Service资源,二者作用域不同不会互相覆盖,也可以同时生效。
内容的提问来源于stack exchange,提问作者Abdul Razak AK
相关产品推荐
相关产品推荐

