本文主要介绍如何使用 docker-compose 快速体验 Kong 微服务网关,先简单介绍基本概念,然后做了一个 Demo 测试使用,涉及到的相关话题有:
- Kong 简介;
- Konga 简介;
- 基于 docker-compose 容器化构建 Kong 微服务网关平台;
- 使用 Konga 可视化创建一个 Service 及路由;
Kong 简介
Kong 是微服务网关模式架构中连接服务消费方和服务提供方的中间件系统,即我们经常所说的微服务网关,网关将各自的业务系统的演进和发展做了天然的隔离,使业务系统更加专注于业务服务本身,同时微服务网关还可以为服务提供和沉淀更多附加功能。微服务网关的主要作用如下:
- 请求接入:管理所有请求接入,作为所有 API 接口的请求入口;
- 业务聚合:所有微服务后端可以注册在 API 网关,通过 API 网关统一暴露服务;
- 拦截策略:可以通过统一的安全、路由、流控等公共服务组件;
- 统一管理:提供统一的监控工具,配置管理工具等基础设施;
Kong 作为完全开源的微服务网关,基于 Nginx 实现,所以其性能表现是毋庸置疑的,另外和其他网关系统类似,也支持插件化扩展,提供了丰富的插件可供使用。Kong 进程启动后会启动多个端口,每个端口功能也不一样:
- 8001 端口:http 管理 API;
- 8444 端口:https 管理 API;
- 8000 端口:接收处理 http 流量;
- 8443 端口:接收处理 https 流量;
Kong 的使用特别简单,需要搞懂几个概念就可以快速使用了:
- Service:Service 是要对外暴露的上游服务,类似于 Nginx 反向代理配置的 upstream;
- Route:Route 定义了路由规则,外部流量如何路由到相应的 Service;
- Consumer:类似账号的概念,可以设置不同的 Consumer 对 API 的访问限制;
关于 Kong 数据持久化
Kong 有两种运行模式,以 db-less 模式运行时所有路由、Service 等信息都存储在内存中,这些信息都是通过 declarative 配置文件动态生成,然后加在到内存。另一种是以 db 模式运行,需要额外的数据库支持,用于存储路由、Service 等信息,这种方式是生产环境推荐的方式。Kong 支持两种数据库持久化:Postgres 或者 Cassandra。
Konga 简介
Konga 是一个第三方开源的针对 Kong 网关的 UI 管理界面,与 Kong 没有关系。通过 Konga 我们可以可视化配置 Kong 相关的配置,在没有可视化界面的情况下只能通过 curl 调用 Kong 提供的 Admin API 来管理 Kong 配置,相对于可视化配置来说复杂度是显而易见的。Konga 支持的主要特性如下:
- 管理所有 Kong Admin API 对象;
- 多个 Kong 节点管理;
- 使用快照备份、恢复 Kong 节点;
- 通过健康检查健康节点和 API 状态;
- 支持邮寄和 Slack 告警通知;
- 多用户管理;
- 支持数据库集成(MySQL,postgresSQL,MongoDB,SQL Server);
Konga 默认将用户信息和配置信息存在在本地磁盘文件,我们可以选择和数据库集成,将相关信息存储到数据库,这也是生产环境推荐的做法。
使用 docker-compose 容器化构建 Kong 微服务网关平台
使用 docker-compose 将 Kong 网关、Konga UI 管理页面、数据库三个服务组合起来,组成一个完整、可用的网关系统,Kong 网关和 Konga 服务共用一个 postgres 数据库。下面为启动整个系统完整的 docker-compose 文件,来自:https://gist.github.com/pantsel/73d949774bd8e917bfd3d9745d71febf 在其基础上对存在的问题进行了修复:
docker-compose.yml
version: "3"