Kong 简介
Kong 是一款基于 OpenResty 的 API 网关平台,在客户端和(微)服务之间转发 API 通信。Kong 通过插件的方式扩展自己的功能,其中包括身份验证、安全控制、流量控制、熔断机制、日志、黑名单、API 分发等等众多功能。下图是官网给出的传统项目架构和使用 Kong 的架构:
Next-Generation API Platform for Modern Architectures。
可以看到,使用 Kong 之后,内部服务开发者只需要 focus 具体业务的实现,网关层提供 API 分发、管理、维护等功能,开发者只需要简单的配置就可以把自己开发的服务发布出去,同时置于网关的保护之下。
OpenResty 简介
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
Kong 三大组件
- Kong Server :基于 nginx 的服务器,用来接收 API 请求。
- Apache Cassandra/PostgreSQL:用来存储操作数据,本文以 PostgreSQL 为例进行讲解。
- Kong dashboard:UI 管理工具。
Kong 特性
- 可扩展:通过简单地添加机器来进行水平扩展,可以用较低的负载处理任何请求。
- 模块化:通过 RESTful API 安装和配置插件。
- 在任何基础设施上运行:Kong 可以部署在云端、机房、或者混合环境,包括单个或多个数据中心。
安装以及使用
Kong 可以安装运行在大部分 Linux 分布式平台和 macOS 上。全部安装方式请查看 安装 Kong 社区版。
macOS Homebrew
(1) 安装 Kong
1 | $ brew tap kong/kong |
(2) 准备数据库
安装 PostgresSQL,在 Kong 启动之前指定数据库和用户。
1 | $ CREATE USER kong; CREATE DATABASE kong OWNER kong; |
由于对 Postgres 并不熟悉,我使用 GUI 工具 pgAdmin4 完成 User 和 Database 的创建。
(3) 准备 kong 配置文件
kong 默认使用 /etc/kong/kong.conf 作为启动的配置文件,因此我们在 /etc/kong/ 目录下创建 kong.conf 文件,内容如下:
1 | database = postgres |
全部 kong 的配置文件你可以查看 kong.conf.default。
(4) 启动 kong
1 | $ kong migrations up |
这个时候 kong 就启动起来了。然后我们可以通过下面的命令测试:
1 | $ curl -i http://localhost:8001/ |
(5) 更多 kong 的命令
1 | $ kong check /etc/kong/kong.conf # 检验 kong 配置文件是否正确 |
(6) kong 启动后监听了 4 个端口
- 8000: Kong 监听来自客户端的 HTTP 请求的,并将此请求转发到上游服务。
- 8443: 与 8000 端口相同,不过只监听 HTTPS 请求。
- 8001: 管理员对 Kong 进行配置管理的端口。
- 8444: 管理员监听 HTTPS 请求的端口。
Docker
(1) 创建一个名为 kong-net 的 network
1 | $ docker network create kong-net |
(2) 启动数据库(PostgreSQL)
1 | $ docker run -d --name kong-database \ |
这个时候命令行会显示 Unable to find image 'postgres:9.6' locally,然后会自动帮我买下载 postgres 的 image。
(3) 准备数据库
1 | $ docker run --rm \ |
(4) 启动 Kong
1 | $ docker run -d --name kong \ |
(5) 使用 Kong
1 | $ curl -i http://localhost:8001/ |
更详细的内容可以查看 5 分钟快速开始
kong-dashboard
Kong dashboard 是一个基于 node 实现的管理 Kong 网关设置的 GUI 工具。
使用 npm:
1 | # Install Kong Dashboard |
使用 Docker:
1 | # Start Kong Dashboard |
Kong 使用
本质上 Kong 是作用于请求和响应之间的一层代理,我们可以通过 RESTful 的形式管理 API。
添加一个 API
使用 curl 命令行:
1 | $ curl -i -X POST \ |
或者使用 kong-dashboard,在 http://localhost:8080/#!/apis 编辑查看:
这时,Kong 已经做好了对 HOST 是 example.com 的 api 的代理请求,并且将其代理到 https://lz5z.com 上。
1 | $ curl -i -X GET \ |
总结
以上只是 Kong 简单的安装和工具的使用,由于之前对 docker、PostgresSQL 等周边工具并不熟悉,所以学习起来需要扩展的东西比较多,暂时先写到这里吧。关于 Kong 插件的使用已经编写,用户操作、授权、负载均衡、熔断等信息,这里先埋坑,后面有时间再补上吧。