一、Kong介绍
Kong 是在客户端和(微)服务间转发API通信的API网关,通过插件扩展功能。Kong 有两个主要组件:
1、Kong Server :基于nginx的服务器,用来接收 API 请求。
2、Apache Cassandra:用来存储操作数据。
你可以通过增加更多 Kong Server 机器对 Kong 服务进行水平扩展,通过前置的负载均衡器向这些机器分发请求。根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。
对于开源社区来说,Kong 中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,而且Kong还有如下几个基础功能:HTTP 基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 nginx 监控。
以上即是对kong网关的介绍,接下来直接进入实操环节。
二、在Docker上部署Kong
1、创建一个网桥
docker network create kong-net
2、创建数据库Postgresql容器
在命令中把数据库产生的数据文件挂在在硬盘上,防止容器奔溃数据丢失。
docker run -d --name kong-database --network=kong-net -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=123456" -v /home/postgresql/data:/var/lib/postgresql/data -v /etc/localtime:/etc/localtime --restart=always postgres:9.6
3、准备Kong的数据库,进行数据库初始化
docker run --rm --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" -e "KONG_PG_PASSWORD=123456" kong:latest kong migrations bootstrap
对于Kong<0.15:Kong版本低于0.15(最高0.14)的注意事项,请使用up子命令而不是bootstrap。另请注意,如果Kong <0.15,则不应同时进行迁移; 只有一个Kong节点应该一次执行迁移。对于0.15,1.0及以上的孔,此限制被取消。
三、Kong的Docker部署
1、Kong的安装部署
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_PASSWORD=123456" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-v /etc/localtime:/etc/localtime \
--restart=always \
kong:latest
四、kong-dashboard
Kong 网关的 Dashboard 目前有两个毕竟大的开源的Dashboard,分别是
A、 pgbi/kong
https://github.com/PGBI/kong-dashboard/commits/3.0
B、 pantsel/konga
https://github.com/pantsel/konga
从维护更新的频率来看,pgbi/kong 在走下坡路,而konga维护良好,建议大家使用konga,他们俩的操作界面大同小异,比如我目前使用的是Konga
注:需要注意的是0.10.x开始的KONGA只支持0.11版本以上的KONG。
1、为了方便,我们数据库使用跟kong一样的,因此我们先创建表,创建完后就可以退出。并且删除kong_dashboard
docker run -ti --network=kong-net -e "DB_ADAPTER=postgres" -e "DB_HOST=kong-database" -e "DB_PORT=5432" -e "DB_USER=kong" -e "DB_PASSWORD=123456" -e "DB_DATABASE=kong" -e "NODE_ENV=development" --name kong_dashboard pantsel/konga
注:如果要单独的创建一个数据库可以重复执行第一部分的创建数据库命令
2、运行konga
docker run -d -p 1337:1337 --network=kong-net -e "DB_ADAPTER=postgres" -e "DB_HOST=kong-database" -e "DB_PORT=5432" -e "DB_USER=kong" -e "DB_PASSWORD=123456" -e "DB_DATABASE=kong" -e "NODE_ENV=production" -v /etc/localtime:/etc/localtime --restart=always --name kong_dashboard pantsel/konga
3、打开KONGA
地址:http://192.168.75.161:1337
会跳转到先注册,需要创建管理员账号
账号:Louie 密码:123456789
4、创建与kong的连接
因为konga与kong是同在一个网桥中,因此可以直接使用网桥分配的IP进行连接
创建完后,显示出界面
五、总结
Kong网关的功能非常强大,可以适用于任何的大型项目,而且扩展方便。