1. 什么是 API-Gateway ?什么是 Kong ?
API-Gateway 是微服务架构体系中一个比较重要的组件,它通常构成所有微服务的入口,它的职责比较多,其较为通用的一些功能是:
- 路由:路由是 API-Gateway 最重要的功能,基于路由 API-Gateway 通常能根据请求的特征,将流量导向不同的服务,或是不同服务的不同版本;或是同一服务的不同单元。
- 协议转换:在 API-Gateway 层可完成基本的协议转换,比如简单的 HTTPS 至 HTTP。
- 聚合数据:数据聚合的功能通常是指将不同 API-Gateway 后的服务返回后,统一返回。
- 认证:不同的服务之间常常有一些共有的逻辑需要处理,比如权限认证,由于 API-Gateway 恰巧在各个微服务的前端,可以在 API-Gateway 实现权限的认证,比如可以在 API-Gateway 层实现 Cookie 或 Token 的认证。
- 限流:可以做针对请求,针对服务的流量控制。
- 熔断:可以在后端服务异常时或者被限流保护时,进行统一的错误返回。
常见的 API-Gateway 的方案比较多,比较常见的有:TyK,Kong,Netflix zuul,api-umbrella 等。其中 Kong 是本文要介绍的主题。
Kong 是在客户端和(微)服务间转发 API 通信的 API 网关,通过插件扩展功能。Kong 有两个主要组件:
- Kong Server :基于 Nginx 的服务器,用来接收 API 请求。
- PostgreSQL:用来存储操作数据。
可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。
Kong 比较突出的一个特性是可以通过插件扩展已有功能,这些插件在请求响应循环的生命周期中被执行。插件使用 Lua 编写,而且 Kong 还有如下几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、限流、路由, 监控。
Kong 是一个在 Nginx 运行的 Lua 应用程序,由 lua-nginx-modul
e 实现。 Kong 和 OpenResty 一起打包发行,其中已经包含了 lua-nginx-module
。 OpenResty 不是 Nginx 的分支,而是一组扩展其功能的模块。
下面介绍 Kong 的部署过程。
2. 环境准备
- OS: CentOS 7.4
- 虚拟机:2CPU 4G内存 40G SSD本地存储
购买完成后,可通过下面的命令登录服务器,并用 sudo -i
命令切换到 root 账户:
✗ ssh dc2-user@116.85.13.208
The authenticity of host '116.85.13.208 (116.85.13.208)' can't be established.
ECDSA key fingerprint is SHA256:wXuuSeD9X/Zh4r5AXlkippP021oJKJnuDzShfK4vIRA.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '116.85.13.208' (ECDSA) to the list of known hosts.
dc2-user@116.85.13.208's password:
[dc2-user@10-254-108-83 ~]$ sudo -i
[root@10-254-108-83 ~]#
下面的操作步骤,均会基于此会话进行,按步骤做应该会得到同样的效果。
3. Kong 部署
Kong 的部署需要完成下面三个组件的部署:
- PostgreSQL 的安装及配置
- Kong Server 的安装
- Kong Dashboard 的安装
3.1 PostgreSql 安装及配置
3.1.1 安装
使用下面的命令,完成 postgresql-10 的安装:
# yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm
已加载插件:fa