Kong-网关核心基础概念(上游-消费者-服务-路由)及-key-auth、Basic-auth,Rate Limiting-插件使用配置

Kong-网关核心基础概念(上游-消费者-服务-路由)及-key-auth、Basic-auth,Rate Limiting-插件使用配置
28.7的博客安装Kong
关于Kong的核心概念和插件
上游(UPSTREAM)
上游本质是后端服务集群的逻辑分组,包含一组具体的“服务实例”(Kong中称为Target),并附带对这组实例的管理策略(如负载均衡算法、健康检查、超时控制等)。
- 核心作用:作为Kong与后端服务的“中间层”,隔离网关与具体服务实例,让网关无需关心单个服务的IP/端口变化,只需通过上游统一调度请求。
- 类比理解:可将上游看作“服务集群的名称牌”(如“用户服务集群”“订单服务集群”);而集群中的每台服务器(如
192.168.1.100:8080、192.168.1.101:8080)就是该上游下的Target。
上游的核心价值在于通过内置策略,解决后端服务的负载均衡、高可用、动态扩展问题,无需侵入业务代码。
在Kong中添加API的流程如下:
- 首先需要添加服务(Service):Kong用Service来标识它管理的上游API和微服务。
- 为Service添加路由(Route):Route定义请求到达Kong后如何转发到对应的Service,一个Service可对应多个Route。
- 配置完成后,即可通过Kong代理请求。
Kong通过8001端口暴露RESTful管理API,所有配置操作(如添加Service和Route)都通过该API完成。
插件的三种启用方式
1 | # 1. 在服务上启用插件 |
name参数:设置为rate-limiting表示使用限流插件。config.second参数:设置每秒允许的请求次数(如1表示每秒1次)。config.limit_by参数:设置限流维度(如ip表示基于IP限流)。
后端服务准备(ThinkPHP8)
本次在后端8080端口运行一个ThinkPHP8实例。
直接访问8080端口测试:
创建消费者(Consumer)
概念介绍
在Kong中,消费者(Consumer) 用于标识和管理使用API的客户端实体(可以是用户、应用程序、第三方系统等),是实现精细化API治理(如认证、授权、限流、监控)的基础。
通过消费者,我们可以:
- 记录每个调用主体的API使用情况(如调用次数、响应时间),用于计费、监控或排查问题。
- 对特定消费者执行熔断、限流等操作。
创建普通消费者及凭证
或者使用api端点创建消费者
1 | curl -i -X POST \ |
或者使用api端点创建凭证
1 | curl -X POST http://localhost:8001/consumers/basic-user/basic-auth \ |
创建匿名消费者及凭证
创建服务(Service)
服务(Service) 是Kong对后端API/微服务的抽象,用于定义后端服务的访问地址(如http://192.168.87.177:8080),是Kong转发请求的目标。
创建路由(Route)
路由(Route) 定义了请求如何匹配到对应的Service(如通过路径、主机名、方法等规则),一个Service可关联多个Route。
配置完成后,即可通过Kong代理后端服务。例如,访问192.168.87.177:8000/tp8即可通过Kong转发到对应的后端服务(Kong支持通过不同路径映射不同服务)。
在Route中安装Basic Auth插件,用于验证用户身份。创建Basic Auth 我们可以使用消费者凭据进行认证,但是前提是需要创建消费者
图形化方法
需填入匿名用户的Consumer ID
配置后,直接访问代理服务会失败(未携带认证信息):
需在请求头中注入认证信息:
1 | Authorization: Basic <Base64编码的user:pass> |
这提示我们需要配置单点登录认证服务器,自动注入认证头部并标记唯一用户ID。
插件:Key Auth(密钥认证)
1. 创建信任用户
1 | curl -i -X POST \ |
返回数据:
1 | { |
2. 添加密钥(Key)
1 | curl -i -X POST \ |
若密钥已存在,返回错误:
1 | { |
插件说明:
config.key_names参数默认值为['apiKey'],表示请求时可通过apiKey头部(或其他指定头部)传递密钥,任意一个匹配即可。
3. 使用API Key访问
4. 使用错误密钥访问
插件:Rate Limiting(频率限制)
速率限制用于控制在指定时间段内(秒、分钟、小时、天、月或年)可发出的HTTP请求数量。
- 若底层网关服务或路由无身份验证层,将通过客户端IP地址识别客户端。
- 若已配置身份验证插件,则通过使用者(consumer)进行识别。
该插件的高级版本 Rate Limiting Advanced 提供更多功能:
- 支持在滑动或固定窗口中应用多个限制
- 包含Redis Sentinel和Redis集群支持
Kong还提供多个专门的速率限制插件,包括针对LLM和GraphQL查询的速率限制。详情可参考《Kong Gateway 中的速率限制》,选择最适合您用例的插件。
在路由上启动插件
使用以下命令在路由上启用插件:
1 | curl -X POST http://127.0.0.1:8001/routes/TP8_Route/plugins \ |
返回参数示例
1 | { |
前端审计
超过阈值时的阻断效果
当请求次数超过设定阈值时,插件会触发阻断:










