文章目录
Kong
Kong 是一款由 Mashape 公司开源的 APIGW 软件,基于 OpenResty(Nginx + Lua 模块)实现,具有高可用、易扩展的特性。Kong 在 Mashape 上管理了超过 15,000 个 API,为 200,000 开发者提供了每月数十亿的请求支持。
- 官网:https://konghq.com/kong/
- Github:https://github.com/Kong/kong
- Docs:https://docs.konghq.com/
- 中文文档:https://github.com/qianyugang/kong-docs-cn
Kong 和 OpenResty 一起打包发行,其中已经包含了 lua-nginx-module。可以简单理解为:Kong > OpenResty > Nginx + lua-nginx-module。
Kong 的特性:
- 可扩展:Kong Server 支持水平扩展。
- 插件:Kong Server 实现了 Plugin 机制进行功能定制,通过 RESTful Admin API 安装和配置插件,
- 在任何基础设施上运行:Kong 可以部署在云端、机房、或者混合环境,包括单个或多个数据中心。
Kong 的功能:
- Cloud Native(云原生):与平台无关,Kong 可以从裸机运行到 Kubernetes。
- Dynamic Load Balancing(动态路由):Kong 的背后是 OpenResty + Lua,所以从 OpenResty 继承了动态路由的特性。
- Circuit Breaker(熔断)
- Health Checks(健康检查)
- Logging(日志):可以记录通过 Kong 的 HTTP,TCP,UDP 请求和响应。
- Security(安全访问):权限控制,IP 黑白名单,同样是 OpenResty 的特性。
- SSL:Setup a Specific SSL Certificate for an underlying service or API。
- 监控:Kong 提供了实时监控插件。
- 认证:支持 HMAC、JWT、Basic、OAuth2.0 等常用协议。
- Rate-limiting(限流):Block and throttle requests based on many variables。
- REST API:通过 Rest API 进行配置管理,从繁琐的配置文件中解放。
- 高可用性:天然支持分布式。
- Plugins(插件机制):提供众多开箱即用的插件,且有易于扩展的自定义插件接口,用户可以使用 Lua 自行开发插件。
Kong 有 3 个核心组件:
- Kong Server:主体程序,基于 Nginx 的 HTTP APIGW 服务器,用来接收 API 请求。
- Apache Cassandra/PostgreSQL:后端数据库。
- Kong Dashboard:UI 管理工具。
Kong 的分层架构:
- Nginx 层:Niginx Server。
- OpenResty 层:可以通过 Lua 模块来进行功能扩展是 Nginx 的一大特点,OpenResty 就是一组实现了 Web 平台的基础 Lua 模块,并与 Nginx 一起打包发布。
- Cluster & Data Store 层:持久化 Kong 所需要的配置和生产数据,目前支持 Apache Cassandra 和 PostgreSQL 两种后端数据库。Cassandra 是分布式的 NoSQL 数据库,天然支持高可用。
- Plugin 层:Kong 基于 OpenResty 可以继续实现各类 Plugin 继而满足 APIGW 的基本功能,且可以通过添加新的插件进行扩展,这些插件可以通过 RESTful Admin API 轻松配置。
- RESTful APIs 层:包括 RESTful Admin API 和 RESTful Proxy API。
可见,Kong 覆盖了 Nginx 的所有功能,包括:反向代理、负载均衡以及基本的缓存、安全的认证、限流限速等。同时还支持 Nginx 等 Web 服务器实现不了的功能,例如:动态上游、动态 SSL 证书、动态限流限速,以及主动/被动健康检查、服务熔断等。