1.Kong 介绍
Kong 是一款基于 OpenResty(Nginx + Lua 模块)编写的高可用、易扩展的,由 Mashape 公司开源的 API Gateway 项目。Kong 是基于 NGINX 和 Apache Cassandra 或 PostgreSQL 构建的,能提供易于使用的 RESTful API 来操作和配置 API 管理系统,所以它可以水平扩展多个 Kong 服务器,通过前置的负载均衡配置把请求均匀地分发到各个 Server,来应对大批量的网络请求。
Kong 主要有三个组件:
Kong Server :基于 nginx 的服务器,用来接收 API 请求。
Apache Cassandra/PostgreSQL :用来存储操作数据。
Kong dashboard:官方推荐 UI 管理工具,当然,也可以使用 restfull 方式 管理 admin api。
Kong 采用插件机制进行功能定制,插件集(可以是 0 或 N 个)在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,目前已有几个基础功能:HTTP 基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 Nginx 监控。
1.1 Kong 网关的特性
Kong 网关具有以下的特性:
可扩展性: 通过简单地添加更多的服务器,可以轻松地进行横向扩展,这意味着您的平台可以在一个较低负载的情况下处理任何请求;
模块化: 可以通过添加新的插件进行扩展,这些插件可以通过 RESTful Admin API 轻松配置;
在任何基础架构上运行: Kong 网关可以在任何地方都能运行。您可以在云或内部网络环境中部署 Kong,包括单个或多个数据中心设置,以及 public,private 或 invite-only APIs。
1.2 Kong 网关架构
Kong 核心基于 OpenResty 构建,实现了请求/响应的 Lua 处理化;
Kong 插件拦截请求/响应;
Kong Restful 管理 API 提供了 API/API 消费者/插件的管理;
数据中心用于存储 Kong 集群节点信息、API、消费者、插件等信息,目前提供了 PostgreSQL 和 Cassandra 支持,如果需要高可用建议使用 Cassandra;
Kong 集群中的节点通过 gossip 协议自动发现其他节点,当通过一个 Kong 节点的管理 API 进行一些变更时也会通知其他节点。每个 Kong 节点的配置信息是会缓存的,如插件,那么当在某一个 Kong 节点修改了插件配置时,需要通知其他节点配置的变更。
2.Kong 环境搭建
2.1 基于 centos7 搭建
环境: PostgreSQL 9.6 + CentOS 7
2.1.1 PostgreSQL
下载地址:https://www.postgresql.org/download/linux/redhat/
安装命令
选择 PostgreSQL 9.6 + CentOS 7 后获得安装方式:
启动 postgresql 后查看状态:
配置 postgresql
为了安全以及满足 Kong 初始化的需求,需要创建一个 Linux 用户 kong,并创建对应的 PostgreSQL 用户 kong 和数据库 kong
# 创建一个 Linux 用户 `kong`
复制代码
PostgreSQL 有四种身份认证方式:
trust:凡是连接到服务器的,都是可信任的。只需要提供 PostgreSQL 用户名,可以没有对应的操作系统同名用户。
password 和 md5:对于远程访问,需要提供 PostgreSQL 用户名和密码。对于本地连接,提供 PostgreSQL 用户名密码之外,还需要有操作系统访问权(用操作系统同名用户验证)。password 和 md5 的区别,就是远程访问时传输的密码是否用 md5 加密。
ident:对于远程访问,从 ident 服务器获得客户端操作系统用户名,然后把操作系统作为数据库用户名进行登录对于本地连接,实际上使用了 peer。
peer:对于本地访问,通过客户端操作系统内核来获取当前系统登录的用户名,并作为 PostgreSQL 用户名进行登录。
默认配置下,我们无法在本地或者远程使用 PostgreSQL 用户名和密码直接连接,因为本地使用 peer 认证方式,远程使用 ident 认证方式。解决方法比较简单,将本地和远程的认证方式修改成 trust 或者 password 即可。
修改 /var/lib/pgsql/9.6/data/pg_hba.conf 文件,注释掉所有默认配置,并添加一条 host all all 0.0.0.0/0 trust 默认,无论远程还是本地访问,任何 PostgreSQL 用户和数据库,都使用 trust 认证方式。
默认配置下,PostgreSQL 只允许本地连接,所以我们需要修改 /var/lib/pgsql/9.6/data/postgresql.conf 文件,添加 listen_address 配置项为 *,允许远程连接。
修改完成后,执行 sudo systemctl restart postgresql-9.6 命令,重启 PostgreSQL 数据库。
通过 Navicat 可以连接到 postgresql 数据库:
2.1.2 安装 kong
centos7 下安装 kong:
https://download.konghq.com/gateway-1.x-centos-7/Packages/k/
安装命令
sudo yum install kong-1.5.1.el7.amd64.rpm </code>
复制代码
配置 kong
Kong 的默认配置文件是 /etc/kong/kong.conf.default,使用 cp /etc/kong/kong.conf.default /etc/kong/kong.conf 命令,复制一份新的配置文件。
复制完成后,修改 /etc/kong/kong.conf 配置文件,设置使用 PostgreSQL 数据库。
执行 kong migrations bootstrap -c /etc/kong/kong.conf 命令,进行 Kong 的 PostgreSQL 数据库的表初始化。
navicat 中可以看到表信息