Kong Gateway 实操实例:代理上游服务并配置限流插件 - 指南

news/2025/10/13 14:54:18/文章来源:https://www.cnblogs.com/lxjshuju/p/19138489

假设已满足以下前置条件

  1. Kong Gateway 已部署完成(以开源版为例),默认监听:
    • Admin API 端口:8001(用于配置管理)
    • 代理流量端口:8000(HTTP 流量)/ 8443(HTTPS 流量)
  2. 准备一个上游服务(如本地启动的简单 HTTP 服务,地址:http://192.168.1.100:3000,提供 /api/hello 接口,返回 {"message":"Hello from upstream"}
  3. 工具:curl(命令行)或 Postman(可视化),用于调用 Kong API 和测试代理效果

一、核心目标

通过 Kong 实现两个核心能力:

  1. 流量代理:让客户端请求通过 Kong 网关(http://kong-ip:8000)转发到上游服务(http://192.168.1.100:3000
  2. 插件限流:为该代理路径配置 rate-limiting 插件,限制单客户端每分钟最多请求 10 次(防止上游服务过载)

二、具体操作步骤

步骤 1:创建 Kong「Service」(关联上游服务)

Kong 中的「Service」是对上游服务的抽象,用于定义“要代理到哪个后端服务”。通过调用 Kong Admin API 创建 Service:

执行命令(curl):
curl -X POST http://kong-ip:8001/services \
-H "Content-Type: application/json" \
-d '{
"name": "my-upstream-service",  # Service 名称(自定义,唯一)
"url": "http://192.168.1.100:3000"  # 上游服务的实际地址
}'
预期响应(成功时):

返回 Service 的详细配置,包含 id(UUID)、nameurl 等字段,示例:

{
"id": "5f8d2a9e-7d3b-4c1a-8e9f-1234567890ab",
"name": "my-upstream-service",
"url": "http://192.168.1.100:3000",
"protocol": "http",
"host": "192.168.1.100",
"port": 3000,
"created_at": 1718000000
}
验证配置:

查询已创建的 Service,确认是否存在:

curl http://kong-ip:8001/services/my-upstream-service

步骤 2:创建 Kong「Route」(定义请求匹配规则)

Kong 中的「Route」是请求入口规则,用于定义“哪些客户端请求会被转发到指定的 Service”(如通过路径、域名、HTTP 方法匹配)。

我们希望:客户端访问 http://kong-ip:8000/my-api/* 时,转发到上游服务的 /* 路径(即 http://192.168.1.100:3000/*)。

执行命令(curl):
curl -X POST http://kong-ip:8001/services/my-upstream-service/routes \
-H "Content-Type: application/json" \
-d '{
"name": "my-api-route",  # Route 名称(自定义,唯一)
"paths": ["/my-api"],     # 匹配的客户端请求路径(前缀匹配,/my-api/xxx 均会命中)
"methods": ["GET", "POST"],  # 允许的 HTTP 方法(可选,默认所有方法)
"protocols": ["http"]     # 支持的协议(http/https,默认两者)
}'
预期响应(成功时):

返回 Route 的配置,包含 idpathsservice(关联的 Service 信息)等字段,示例:

{
"id": "a1b2c3d4-e5f6-7890-abcd-1234567890ef",
"name": "my-api-route",
"paths": ["/my-api"],
"methods": ["GET", "POST"],
"protocols": ["http"],
"service": {
"id": "5f8d2a9e-7d3b-4c1a-8e9f-1234567890ab",
"name": "my-upstream-service"
},
"created_at": 1718000100
}
验证配置:

查询已创建的 Route:

curl http://kong-ip:8001/routes/my-api-route

步骤 3:测试基础代理功能(无插件)

此时 Kong 已配置好“Route → Service → 上游服务”的转发链路,测试客户端请求是否能通过 Kong 代理到上游服务:

执行测试命令:
# 客户端请求 Kong 网关的 /my-api/hello 路径
curl http://kong-ip:8000/my-api/hello
预期结果:

Kong 会将请求转发到上游服务的 http://192.168.1.100:3000/hello,返回上游服务的响应:

{"message":"Hello from upstream"}
  • 若失败:检查 Kong 与上游服务的网络连通性(如防火墙、上游服务是否正常启动),或 Route/Service 的配置是否正确。

步骤 4:为 Route 配置「rate-limiting」插件(限流)

Kong 自带 rate-limiting 插件,可基于“客户端 IP”“用户 ID”等维度限制请求频率。此处配置:基于客户端 IP,每分钟最多允许 10 次请求,超过则返回 429 Too Many Requests

执行命令(curl):

my-api-route 路由绑定插件(也可绑定到 Service 或全局,此处按路由粒度配置):

curl -X POST http://kong-ip:8001/routes/my-api-route/plugins \
-H "Content-Type: application/json" \
-d '{
"name": "rate-limiting",  # 插件名称(Kong 自带,固定)
"config": {
"minute": 10,           # 每分钟最大请求数
"policy": "ip",         # 限流维度(ip:基于客户端 IP;还支持 consumer 等)
"limit_by": "ip",
"fault_tolerant": true  # 若插件内部出错,是否允许请求继续(建议开启)
}
}'
预期响应(成功时):

返回插件的配置信息,包含 idnameroute(关联的 Route 信息)、config(限流参数)等字段。

验证插件配置:

查询该 Route 已绑定的插件:

curl http://kong-ip:8001/routes/my-api-route/plugins

步骤 5:测试限流插件效果

连续发送请求,验证超过 10 次后是否触发限流:

1. 前 10 次请求(正常):
curl -i http://kong-ip:8000/my-api/hello  # 加 -i 显示响应头
  • 响应状态码:200 OK
  • 响应头包含限流信息(便于客户端感知剩余配额):
    X-RateLimit-Limit-Minute: 10
    X-RateLimit-Remaining-Minute: 9  # 每次请求后递减
2. 第 11 次请求(触发限流):
curl -i http://kong-ip:8000/my-api/hello
  • 预期响应状态码:429 Too Many Requests
  • 响应体:
    {"message":"API rate limit exceeded"}
  • 响应头:
    X-RateLimit-Limit-Minute: 10
    X-RateLimit-Remaining-Minute: 0
    Retry-After: 45  # 建议多少秒后重试(基于当前剩余时间)

三、常见扩展操作

1. 查看所有配置(全局视角)

2. 修改配置(如调整限流阈值)

通过插件 ID 修改限流参数(先通过 GET /plugins 获取插件 ID):

curl -X PATCH http://kong-ip:8001/plugins/插件ID \
-H "Content-Type: application/json" \
-d '{"config": {"minute": 20}}'  # 改为每分钟 20 次

3. 删除配置(清理资源)

  • 删除 Route:curl -X DELETE http://kong-ip:8001/routes/my-api-route
  • 删除 Service:curl -X DELETE http://kong-ip:8001/services/my-upstream-service
  • 删除插件:curl -X DELETE http://kong-ip:8001/plugins/插件ID

4. 配置 HTTPS 代理

  1. 通过 certificates API 上传 SSL 证书(公钥 + 私钥):
    curl -X POST http://kong-ip:8001/certificates \
    -F "cert=@{本地公钥文件路径}.pem" \
    -F "key=@{本地私钥文件路径}.key" \
    -F "snis=api.example.com"  # 绑定的域名
  2. 修改 Route 的 protocols["https"],后续通过 https://kong-ip:8443/my-api/hello 访问。

四、关键概念回顾

组件作用
Service抽象上游服务,定义“代理目标”(如后端 API 地址)
Route定义“请求匹配规则”(如路径、域名),将请求路由到对应的 Service
Plugin附加功能(如限流、认证、日志),可绑定到 Route/Service/全局,实现功能扩展
Admin APIKong 的配置入口,用于创建/修改/删除所有资源(生产环境需做好权限控制)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/936165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年最新二手手机交易公司推荐排行榜:聚焦企业的专业与诚信实力,为消费者精选可靠选择

随着循环经济理念深入人心,二手手机交易市场迎来爆发式增长,但行业乱象也随之凸显。信息不透明导致消费者常遭遇 “货不对板”,电池健康度虚标、硬件隐患暗藏等问题频发;售后体系缺失让维权之路举步维艰,故障维修…

项目管理中的批量更新如何帮助节省时间和工作量?

批量更新(或批量编辑)是许多项目管理工具中的一项功能,允许您一次性更改多个项目(任务、问题、项目等)。此功能在管理项目时(尤其是大型或复杂的项目)可带来诸多益处。 您无需逐个打开每个任务或项目并更改字段…

深入解析:云服务器磁盘空间管理:binlog导致磁盘快速增长的应对策略与自动化实践

深入解析:云服务器磁盘空间管理:binlog导致磁盘快速增长的应对策略与自动化实践2025-10-13 14:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overf…

第三届大数据与数据挖掘国际会议(IEEE BDDM 2025)

数字经济浪潮中,全球数据量指数级增长,大数据与数据挖掘技术成为行业变革核心引擎。二者深度融合,通过高效处理海量复杂数据、提取关键信息辅助决策,在各领域创新应用不断涌现,创造巨大社会与经济效益。 在此背景…

CSS学习日记

2025.10.13 打卡 1. CSS选择器有五类:简单选择器(根据名称、id、类来选取元素) 组合器选择器(根据它们之间的特定关系来选取元素) 伪类选择器(根据特定状态选取元素) 伪元素选择器(选取元素的一部分并设置其样…

基于MATLAB的波导杆超声波传播仿真程序集设计与实现

1. 系统模型与核心算法 波导杆超声波传播的数值模拟需结合波动方程与波导边界条件,主要流程如下:几何建模:定义波导杆的几何参数(半径、长度、材料分层等)。 波动方程离散化:采用有限差分法(FDM)或有限元法(F…

for 循环中range的部分

range()函数的基本语法 range()函数用于生成一个指定范围内的数字序列,其基本语法如下: range(start, stop, step) Python start:可选参数,表示起始数字(默认为0)。 stop:必填参数,表示终止数字,不包括该数字…

2025中国不锈钢反应釜厂家TOP5权威推荐(附技术参数对比)

2025中国不锈钢反应釜厂家TOP5权威推荐(附技术参数对比)随着新能源产业与高端制造业的加速升级,反应釜设备作为化工、医药、锂电池材料等领域的核心生产载体,其性能稳定性与工艺适配性成为企业产能升级的关键。据智…

中电金信 :源启数据建模平台:自定义功能上线,实现高效模型管理

源启数据建模平台是源启数据资产平台面向企业模型统一管控而打造的多功能、全场景企业级模型设计与管理平台,支持企业级业务数据模型、应用系统模型及数据仓库模型的设计与管理。平台基于Web模式的画布界面,可实现逻…

国产软件项目管理革命:Gitee PPM如何重塑开发效率

国产软件项目管理革命:Gitee PPM如何重塑开发效率 在数字化转型浪潮席卷全球的当下,软件项目管理正面临前所未有的变革机遇。随着国内软件产业规模突破8万亿元大关,企业对高效、智能的项目管理工具需求呈现爆发式增…

网关本质论

Web应用网关:本质属于代理模式服务,将用户前端请求,通过代理服务,真实映射到真实物理服务器服务 代理层,得到HTTP请求后,可以做很多事情,例如身份认证、鉴权、API权限控制,限流,日志等

用最通俗易懂的方式解读以太坊的dAI团队和ERC-8004标准

给未来AI发“身份证”:以太坊的dAI计划为何让人兴奋? 想象一下,未来世界不再仅仅由人类上网冲浪、购物、工作,而是由无数个AI助手(我们叫它们“AI代理”)在为我们奔波。它们可以帮你比价购物、管理投资、甚至代表…

赋能智慧农业:ISUP协议视频平台EasyCVR智慧农业视频远程监控管理方案

赋能智慧农业:ISUP协议视频平台EasyCVR智慧农业视频远程监控管理方案在当今快速发展的农业领域,智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快,智慧…

集成开发工具 IDEA下载

集成开发工具IDEA搜索官方网站 IDEA官方网站找到对应的语言集成开发工具 拿java举例如:Java的IDEA)点击进入官网点击下载安装如图![如图]()会有两个版本一个旗舰版和社区版 “旗舰版收费,社区版免费。根据自…

10.12一周观察

这一周情绪起伏很大,不是在低谷就是高涨,几乎没有平稳的时刻。身体也出现各种不适:胃胀、早晨腹痛、头晕、眼疲劳,下巴的痘痘冒个不停。整个人乏力没精神,手脚冰凉,对什么都提不起兴趣。虽然睡得着,但总觉睡不够…

视频融合平台EasyCVR在智慧水利中的实战应用:构建全域感知与智能预警平台

视频融合平台EasyCVR在智慧水利中的实战应用:构建全域感知与智能预警平台随着物联网、大数据、人工智能等技术的飞速发展,智慧水利建设已成为保障水安全、优化水资源配置、提升水灾害防御能力的关键路径。本文将深入…

数据流图和uml九张图 - f

数据流图与 UML 九大图:软件设计的 “沟通语言” 做软件开发的同学大概率有过这样的困惑:需求会上和产品经理聊得 “心有灵犀”,转头写设计文档时,开发同事看了却满脸问号;或是项目上线后改 bug,对着自己半年前画…

03_mysql运维核心基础

03_mysql运维核心基础 1.启动,关闭mysql 脚本启动,是后台启动 systemctl start/stop/restart mysqldservice mysqld start /etc/init.d/mysqld start 其实脚本也依然是mysql提供的二进制命令启动的[root@db-51 /www.…

2025.10.13+7

2025.10.13 Week 笔记2025.10.13 Luogu P4168 & LOJ 6285 \(10^9\) 但是最多只有 \(40000\) 种不同的众数结果,考虑离散化。统计整块的区间众数和每个数的出现次数,我们每次只需要考虑零散块两边的数就可以了,如…

Adobe Animate 2025 中文破解版下载|HTML5 动画开发 + 2D 交互设计工具(附安装教程)

在 2D 动画设计、Flash 创作及网页交互素材开发领域,Adobe Animate 始终是行业主流工具。本次为大家分享Adobe Animate 2025 中文破解版(AN2025 最新版) ,不仅保留官方版核心功能,还针对国内用户需求做了多项优化…