Kong自定义插件
Kong 是一个流行的开源 API 网关,它为微服务架构提供了一个前端层。Kong 基于 NGINX,使用 Lua 语言进行扩展,最初在 2015 年由 Mashape(现称为 Kong Inc.)发布。它设计用于处理高并发的 API 请求、路由、安全性、监控和扩展性问题。Kong 可以在任何基础设施上运行,包括云环境和本地服务器,支持 RESTful 和 GraphQL API。
kong的生态
Kong 的生态系统包括以下几个关键部分:
- Kong Gateway:主要的开源项目,为企业提供核心的 API 网关功能。
- Kong Enterprise:商业版本,提供额外的管理功能、安全性增强和分析工具。
- Kong Studio:API 设计和测试平台,支持 API 的生命周期管理。
- Kong Brain 和 Kong Immunity(企业版功能):为 Kong 提供自动化的 API 流量分析、异常检测和智能文档生成。
- Kong Konnect:云服务平台,提供 Kong 的所有功能作为服务,让用户无需自行管理底层基础设施。
- Kong Ingress Controller for Kubernetes:利用 Kong 作为 Kubernetes 集群的入口控制器,实现 API 网关的功能。
编写Kong插件的准备工作
- 有一定的Lua基础(语法不是很复杂,所以并不需要你有多高的Lua编程水平就可以完成一个kong插件的开发工作)
- kong插件的层级结构以及生命周期
- 环境以及CI/CD
- 层级结构
Kong 插件通常包括以下几个主要组件:
- handler.lua:这是插件逻辑的核心文件,其中定义了插件在不同的请求处理阶段应该执行的操作。
- schema.lua:定义了插件配置的数据模式,用于验证和存储插件配置。
- migrations/(可选):如果插件需要执行数据库操作,如添加新的表或字段,这里将包含数据库迁移脚本。
- 执行阶段
Kong 插件可以在请求/响应生命周期的不同阶段进行介入,每个阶段对应不同的处理函数。这些阶段包括:
- certificate:在 SSL/TLS 握手阶段执行,用于动态地处理证书。
- rewrite(仅限于 0.10.x 以上版本):在接收到请求后、路由解析前执行,用于改写请求。
- access:在请求被处理前执行,用于控制访问或修改请求。
- header_filter:在发送响应头之前执行,用于修改响应头。
- body_filter:在发送响应体之前执行,用于修改响应体。
- log:在最后响应发送完毕后执行,用于日志记录。
案例实操
下面我们来实现一个将请求响应的信息写入到mongodb的插件
handler.lua 文件
1 |
|
schema.lua 文件
1 |
|
CI/CD
官方也是提供了基础的deb包以及样例,我们在此基础上,将插件复制到指定的位置
1 |
|
Kong自定义插件
https://www.xinyublog.com/tools/kong/