1.前言
Kong 是一款主流的网关服务, 基于 OpenResty
, 拥有极高的并发性能。
OpenResty
By taking advantage of various well-designed Nginx modules (most of which are developed by the OpenResty team themselves), OpenResty® effectively turns the Nginx server into a powerful web app server, in which the web developers can use the Lua programming language to script various existing Nginx C modules and Lua modules and construct extremely high-performance web applications that are capable to handle 10K ~ 1000K+ connections in a single box.
摘自 OpenResty 官网
简单来说 OpenResty
是 基于Nginx + Lua 的代理服务器, 可以通过 Lua
来调用 Nginx 中的 C 模块。单机能支持 1W ~ 100W 的并发数!
OpenResty
并不是 Nginx
的分支, 它只是用 Nginx
作为它的一个组件。
Kong
Kong 是一个基于 OpenResty 构建的API网关管理
为什么需要 API 网关?
在现在的许多项目中都使用到了微服务的开发方式, 一个大应用被拆成了很多个小服务, 这些小服务各自构建和部署,可以独立对外提供服务。
在传统的单体应用中所有的服务都来自一个应用工程, 大概如下图所示
在微服务中应用被拆成多个小的服务,每个服务都提供了服务给客户端调用
如图所示则我们需要对外暴露
- 订单服务接口: order.api.com
- 商品服务接口: goods.api.com
- 用户服务接口: user.api.com
这样做的坏处:
- 不容易监控调用的流量
- 不好定位问题来源
- 无法集中管理,每个单独的服务都需要对客户端的请求进行鉴权,限流, 降级
这时候我们就需要用到网关
了, 网关可以帮我们把服务统一集中起来管理,用了网关后,服务连接如下图所示
首先所有客户端的请求都先会通过 网关
, 网关再根据服务标识将请求转发给相应的服务,最后在通过网关把响应丢给客户端。
这样做的好处:
- 可以集中管理,可以单独在网关进行鉴权,限流,降级
- 方便定位问题来源
- 服务不需要对外暴露接口
介绍完了网关的基本用途, 下面我们一起来安装Kong
网关
2.安装Kong
通过主机直接安装 Kong
, 这里仅做 Centos8
下的安装说明
2.1 Postgresql
Kong
需要使用数据库来存储 网关相应的 Service
Router
Upstream
Plugin
数据
这里我们使用Postgresql
# 安装postgresql-server
yum install postgresql-server
# 安装完成后,需要初始化数据库
postgresql-setup --initdb
# 将postgresql加入启动项
systemctl enable postgresql.service
# 启动postgresql
systemctl start postgresql.service
安装成功后默认用户为 postgres
我们需要切换到该用户操作
# 进入postgres的bash界面
sudo -i -u postgres
psql
# 创建 kong 数据库
create databae kong;
# 创建 kong 用户并授权kong数据库权限给kong用户
create user kong
2.2 安装 Kong
# 上github 搜索 kong 仓库 下载rpm包到本地
wget
# 安装
yum install kong.rpm
# 编辑kong的配置文件 /etc/kong/kong.conf
pg_user = kong
pg_password = kong
pg_database = kong
# 初始化 Kong 数据库
KONG_PASSWORD=<you password> /usr/local/bin/kong migrations bootstrap -c /etc/kong/kong.conf
# 启动Kong
/usr/local/bin/kong start -c /etc/kong/kong.conf
到了这一步,Kong网关就已经安装到你的机器上了, 下面我们验证一下 Kong 是否安装成功!
curl -i -X GET --url <http://localhost:8001/services>
这是如果出现 HTTP/1.1 200 OK
代表Kong已经正常安装到你的机器上了!
以上是 Kong 网关常规的安装方法, 有时候我们想要在其他机器上在部署一次 Kong,有可能会出现环境依赖库加载不正确的问题。
基于以上情况,我在介绍一下如何通过 Docker
安装。
3.Docker安装
通过 Docker
我们可以快速构建 Kong 网关, 首先我们需要先配置一下 Kong 网络
这里假设你的服务器上已经安装好了 Docker
# 首先创建 Kong 的容器网络
docker network create kong-net
部署 Postgresql
作为 Kong
的持久化存储
# 拉取镜像
docker pull postgres:9.6
# 运行镜像
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong"
-e "POSTGRES_PASSWORD=kong"
-e "POSTGRES_DB=kong"
-v /home/kong/data/posgres:/var/lib/postgresql/data
postgres:9.6
初始化 Kong
容器中的数据
docker run --rm \
--network=kong-net
-e "KONG_DATABASE=posgres"
-e "KONG_PG_HOST=kong-database"
-e "KONG_PG_PASSWORD=kong"
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database"
kong kong migrations up
启动 Kong
镜像
docker run -d --name kong \
--network=kong-net
-e "KONG_DATABSE=postgres"
-e "KONG_PG_HOST=kong-database"
-e "KONG_PG_USER=kong"
-e "KONG_PG_PASSWORD=kong"
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database"
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl"
-v /home/kong/data/log/kong:/var/log
-p 8000:8000
-p 8001:8001
-p 8443:8443
-p 8444:8444
kong:2.5
启动容器后,同理我们使用
curl -i -X GET --url <http://localhost:8001/services>
如出现 Http/1.1 200 OK
则证明 Kong
的环境已经构建完成!
注: 这里更好的方式可以通过 docker-compose
对 Kong
服务依赖环境进行编排!
总结
在大型的应用服务中一定要使用网关作为服务入口。
Kong
是一个简单易上手的API网关, 具有超高的灵活性和可扩展性,同时具有大量的插件对服务进行管理!
感谢
编写过程结合了自己的实际操作, 同时也借鉴了以下内容,非常感谢各位大佬无私的输出