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

Kong-网关核心基础概念(上游-消费者-服务-路由)及-key-auth、Basic-auth,Rate Limiting-插件使用配置
28.7的博客Kong网关部署与核心配置实践指南
1. 安装 Kong
2. Kong 核心概念
Kong 的核心模型围绕“上游-服务-路由-消费者”四层结构构建,实现请求从网关到后端服务的精准转发与管控。先明确各组件的定义与作用:
- 创建服务后,覆盖全局的路由-创建Route-将path置为空值 = 代理全部Server端点,这与Nginx无异。
- 创建服务后,补全某一个特定的path路径 = 仅针对于某个服务的路径生效,但是请注意,如果未定义的路由,则无法通过8000端口代理,否则就是如下反馈
1
2
3{
"message":"An invalid response was received from the upstream server"
}
2.1 整体框架如下
说明:8000 为 HTTP 流量代理端口(客户端访问入口),8001 为 HTTP 管理端口(网关配置入口)
2.1 上游(UPSTREAM)
上游是后端服务集群的逻辑分组,包含一组“服务实例”(Kong 中称为 Target),内置负载均衡、健康检查、超时控制等管理策略。
- 核心作用:隔离网关与具体服务实例,网关无需关心单个服务的 IP/端口变化,仅通过上游统一调度请求。
- 类比理解:上游 = “服务集群名称”(如“用户服务集群”),Target = 集群内具体服务器(如
192.168.1.100:8080)。 - 核心价值:通过内置策略解决后端服务的负载均衡、高可用、动态扩展问题,无需侵入业务代码。
2.2 服务(Service)
服务是 Kong 对后端 API/微服务的抽象定义,用于指定后端服务的访问地址(如 http://192.168.87.177:8080),是网关转发请求的“目标地址”。
- 核心作用:关联上游集群与路由规则。一个服务可对应一个上游(集群场景),也可直接指向单个服务实例(简单场景)。
2.3 路由(Route)
路由是请求匹配规则,定义“什么样的请求会转发到对应的服务”,支持通过路径、主机名、HTTP 方法等维度匹配。
- 核心作用:实现“一服务多路由”。例如将
/user/login和/user/info两个路径,均映射到“用户服务”。
2.4 消费者(Consumer)
消费者是使用 API 的客户端实体标识,可代表用户、应用程序、第三方系统等,是精细化 API 治理(认证、限流、授权)的基础。
- 核心作用:
- 绑定客户端身份,通过
custom_id字段关联业务系统用户; - 记录单个客户端的 API 使用情况(调用次数、响应时间),用于计费或监控;
- 对特定客户端执行差异化管控(如 VIP 用户更高限流额度)。
- 绑定客户端身份,通过
2.5 Kong 配置流程与管理端口
2.5.1 核心配置流程
所有 API 接入 Kong 需遵循以下三步(集群场景必走,单实例场景可省略“上游”):
- 定义上游(集群场景:管理后端服务实例集合);
- 创建服务(关联上游或直接指向后端服务地址);
- 为服务添加路由(配置请求匹配规则)。
2.5.2 管理端口说明
Kong 通过 8001/8444 端口暴露管理 API,所有配置操作(创建服务、路由、插件)均通过这些端口完成。各端口功能如下表:
| 端口号 | 类型 | 用途说明 |
|---|---|---|
| 8000 | 流量代理端口 | HTTP 协议:客户端访问 API 的入口 |
| 8001 | 管理端口 | HTTP 协议:配置网关(创建服务、插件等) |
| 8443 | 流量代理端口 | HTTPS 协议:客户端访问 API 的加密入口 |
| 8444 | 管理端口 | HTTPS 协议:配置网关的加密入口 |
3. 插件的三种启用方式
Kong 插件支持在“服务-路由-消费者”三个层级启用,核心区别在于作用范围与管控粒度,需根据业务场景选择。
3.1 三种启用方式核心差异
| 对比维度 | 服务级插件 | 路由级插件 | 消费者级插件 |
|---|---|---|---|
| 作用范围 | 全服务所有请求 | 仅匹配该路由的请求 | 仅该消费者的所有请求 |
| 配置粒度 | 粗粒度(服务整体) | 中粒度(单个接口) | 细粒度(个体客户端) |
| 配置复用性 | 高(覆盖服务下所有路由) | 中(仅覆盖当前路由) | 低(仅覆盖单个消费者) |
| 核心目标 | 保证服务规则一致性 | 接口差异化控制 | 客户端差异化服务 |
3.2 选择建议
- 需对服务所有接口统一管控(如全局限流、日志采集)→ 服务级插件;
- 需对单个接口特殊处理(如支付接口签名验证、敏感接口权限控制)→ 路由级插件;
- 需按客户端身份差异化管控(如 VIP 用户更高限流额度、特定客户端白名单)→ 消费者级插件。
实际场景中可多层结合,例如“服务全局限流 + 路由支付验证 + 消费者 VIP 额度”,实现精细化流量管理。
4. 后端服务准备(ThinkPHP8)
本次实践以 8080 端口运行的 ThinkPHP8 实例为后端服务,用于验证 Kong 代理与插件功能。操作步骤如下:
启动后端服务:确保 ThinkPHP8 服务正常运行在
8080端口,示例状态如下图:
说明:后端服务需能被 Kong 所在服务器访问(同网段或打通网络)直连测试:直接访问
http://[后端服务IP]:8080,确认服务正常响应,示例结果如下图:
说明:直连成功后,再通过 Kong 代理访问,避免后端服务本身故障影响测试
5. 核心配置实践(服务-路由-消费者)
5.1 创建消费者(Consumer)
消费者分“普通消费者”和“匿名消费者”:
- 普通消费者:绑定具体客户端身份(如用户、应用);
- 匿名消费者:用于未携带认证信息的请求(如公开接口临时访问)。
5.1.1 创建普通消费者
关键特性:消费者的认证凭据有效性与插件创建时间无关。即使先创建消费者并绑定凭据,后续为服务/路由添加认证插件后,该凭据仍可正常通过认证。
方式1:图形化界面(Konga)
- 进入 Konga 控制台 → 左侧菜单
Consumers→ 点击Add Consumer; - 填写核心参数:
username:Kong 内唯一标识(如basic-user);custom_id:业务系统用户唯一标识(如用户 ID、哈希值);
- 点击提交,示例配置如下图:
方式2:API 端点(curl 命令)
1 | curl -i -X POST \ |
创建成功响应示例:
1 | { |
5.2 创建服务(Service)
核心作用:关联后端 ThinkPHP8 服务,告诉 Kong “请求要转发到哪里”。
图形化界面配置(Konga)
- 进入 Konga 控制台 → 左侧菜单
Services→ 点击Add Service; - 填写核心参数(以 ThinkPHP8 为例):
Name:服务名称(Kong 内唯一,如tp8-service);Protocol:后端服务协议(如http);Host:后端服务 IP(如192.168.87.177);Port:后端服务端口(如8080);Path:默认请求路径(可选,如/,即根路径);
- 点击提交,示例配置如下图:
5.3 创建路由(Route)
核心作用:配置请求匹配规则,告诉 Kong “什么样的请求要转发到 tp8-service”。
图形化界面配置(Konga)
- 进入 Konga 控制台 → 左侧菜单
Routes→ 点击Add Route; - 先关联服务:在「Service」下拉框中选择已创建的
tp8-service; - 填写核心匹配规则:
Name:路由名称(如tp8-route);Paths:匹配路径(如/tp8,即访问KongIP:8000/tp8时触发);Methods:允许的 HTTP 方法(勾选GET、POST等);Protocols:支持的协议(勾选http);
- 点击提交,示例配置如下图:
代理测试
配置完成后,访问 http://[KongIP]:8000/tp8,Kong 会自动转发到后端 192.168.87.177:8080。测试成功示例如下图:
6.1 插件1:Basic Auth(基础认证)
基础认证(Basic Auth)是一种基于 HTTP 的简单认证机制,用于保护 API 或服务安全。它包含将用户名和密码编码为 Base64 格式,并将其作为 HTTP 请求头的一部分发送的过程。Kong 网关通过其插件支持基础认证,便于集成以保护服务安全。
步骤1:为消费者绑定 Basic Auth 凭证
方式1:图形化界面(Konga)
- 进入消费者详情页(如
basic-user)→ 切换到Credentials标签页; - 点击
Basic Auth→Add Credential; - 填写凭据:
username(如28.7Blog)、password(如202019); - 提交后示例如下图:
方式2:API 端点(curl 命令)
1 | curl -X POST http://[KongIP]:8001/consumers/basic-user/basic-auth \ |
步骤2:在服务/路由上启用 Basic Auth 插件
- 进入服务或路由详情页 → 切换到
Plugins标签页; - 点击
Add Plugin→ 搜索Basic Auth并选择; - 提交启用。
步骤3:测试认证效果
- 登陆认证后完成认证
- 认证完成后访问页面,header中增加认证头部
业务头部认证,刚才我们注意到,当我们认证完成后,header会出现
Authorization: Basic <Base64编码值>(编码规则:username:password)的键值对,如果我们将其存储在前端本地,当请求需要保护的资源时候附带此参数,那么也就直接通过了认证![]()
插件:Key Auth(密钥认证)
1. 创建信任用户
Key Authentication(密钥认证)插件可让你为网关服务(Gateway Service)或路由(Route)添加 API 密钥认证功能。之后,消费者(Consumers,即 API 使用方)需在查询字符串参数、请求头或请求体中添加其密钥,以验证其请求的合法性。
该插件的高级版本 ——Key Authentication Encrypted(密钥认证(加密版))支持密钥加密功能。密钥会在 Kong 网关的数据存储(data store)中以静态加密(at rest,指数据未被访问时)的形式存储。
- 进入服务/路由详情页 →
Plugins→Add Plugin→ 搜索Key Auth; - 核心配置:
config.key_names(密钥传递的请求头名称,默认apiKey,支持多个如['apiKey', 'X-API-Key']); - 提交启用。
当key name值为空时候,默认的键为
apikey
步骤4:测试认证效果
- 携带正确密钥:请求头添加
apiKey: 202019,访问http://[KongIP]:8000/tp8,成功响应示例如下图: - 携带错误密钥:请求头添加
apiKey: wrong-key,返回401 Unauthorized,示例如下图:
插件:Rate Limiting(频率限制)
Kong网关允许你限制在指定时间段内可发起的HTTP请求数量。
速率限制可应用于两个对象,具体场景如下:
- 应用于网关服务(Gateway Service)或单个路由(Route),目的是保护上游API(upstream API)。
- 应用于消费者(Consumer,即API使用方),目的是限制用户在指定时间段内调用API的次数。
Kong提供两类相关插件:
- 两款标准HTTP速率限制插件:Rate Limiting(基础速率限制)插件和Rate Limiting Advanced(高级速率限制)插件。
- 一系列专用插件:覆盖AI、网关服务、GraphQL及动态速率限制等领域。
在路由上启动插件
使用以下命令在路由上启用插件:
1 | curl -X POST http://127.0.0.1:8001/routes/TP8_Route/plugins \ |
返回参数示例
1 | { |
前端审计
超过阈值时的阻断效果
当请求次数超过设定阈值时,插件会触发阻断:










