Kong Gateway 安装 | 适合中小型服务的网关

1,987 阅读4分钟

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 网关?

在现在的许多项目中都使用到了微服务的开发方式, 一个大应用被拆成了很多个小服务, 这些小服务各自构建和部署,可以独立对外提供服务。

在传统的单体应用中所有的服务都来自一个应用工程, 大概如下图所示

image.png

在微服务中应用被拆成多个小的服务,每个服务都提供了服务给客户端调用

image.png

如图所示则我们需要对外暴露

这样做的坏处:

  • 不容易监控调用的流量
  • 不好定位问题来源
  • 无法集中管理,每个单独的服务都需要对客户端的请求进行鉴权,限流, 降级

这时候我们就需要用到网关 了, 网关可以帮我们把服务统一集中起来管理,用了网关后,服务连接如下图所示

image.png

首先所有客户端的请求都先会通过 网关, 网关再根据服务标识将请求转发给相应的服务,最后在通过网关把响应丢给客户端。

这样做的好处:

  • 可以集中管理,可以单独在网关进行鉴权,限流,降级
  • 方便定位问题来源
  • 服务不需要对外暴露接口

介绍完了网关的基本用途, 下面我们一起来安装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-composeKong 服务依赖环境进行编排!

总结

在大型的应用服务中一定要使用网关作为服务入口。

Kong 是一个简单易上手的API网关, 具有超高的灵活性和可扩展性,同时具有大量的插件对服务进行管理!

感谢

编写过程结合了自己的实际操作, 同时也借鉴了以下内容,非常感谢各位大佬无私的输出

Kong网关 | Docker部署

Kong官网 | Centos安装一章