联系笔者,点击阅读原文#
Kong Gateway解决了什么问题?#
看上图,常见的我们的服务之间通过rpc相互调用。
如上图的左部分,在没有引入网关之前,为了保障交互的安全,每个服务都需要自己实现一套权限校验(Auth)、日志、限流、监控等方案。这样就不太好,各种成本很高。
引入网关之后呢,像鉴权、监控、安全、限流、日志、缓存等等方案都可以统一由网关实现。各个服务只需要专注于自己的业务实现就OK。
Kong Gateway都有哪些模块?#
搞清楚下面的这四点OK:
一、上图中的最下面的两层是:Nginx、Openretry,它的意思是:kong是一款基于OpenRetry(Nginx + Lua) 编写的高可用、易扩展的API Gateway。其实我感觉你可以直接把Kong理解成是Nginx,但是Kong的功能不止于Nginx。
二、上图中间部分的Datastore的意思是:kong的配置文件可以支持化的存储在NoSQL中,可选:cassandra、postgreSQL。
三、上图中的plugin的意思是:如果想拓展kong的功能,只需要提供对应的插件就行。有一些现成的插件可以直接用,可以自定义插件。
四、上图中最上层的Restful的意思是:它支持通过Restful API的方式来操作操作和配置Kong(管理nginx的配置文件)。而且kong有专属的dashboard,支持在可视化的界面下和Restful API交互,实现对kong的可视化配置。
安装Kong#
官网doc:https://docs.konghq.com/enterprise/1.5.x/deployment/installation/docker/
选择安装1.5.X版本的kong,因为kong dashboard对高版本的kong还不支持
Step1:下载镜像
docker pull kong:1.5.0-alpine
Step2:给image打tag
~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE kong 1.5.0-alpine a79fdd990557 22 months ago 129MB ~]# docker tag a79fdd990557 kong-oss
Step3:创建一个专属的网络空间,kong及其相关的容器均加入到这个网络中,方便容器间的相互发现和互通
docker network create kong-ee-net
Step4:创建volume,用于将容器的目录挂载到宿主上,防止容器被删后,数据丢失。
docker volume create kong-volume
Step5:启动kong依赖的db容器:运行postgresql数据库
docker run -d --name kong-ee-database \ --network=kong-ee-net \ -p 5432:5432 \ -v kong-volume:/var/lib/postgresql/data \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ -e "POSTGRES_PASSWORD=kong" \ postgres:9.6
此时可以使用navicate尝试连接一下postgresql数据库,是可以联通的
Step6:初始化kong需要的数据库
docker run --rm --network=kong-ee-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-ee-database" \ -e "KONG_PG_PASSWORD=kong" \ -e "KONG_PASSWORD=kong" \ kong-oss kong migrations bootstrap
验收结果
Step7:启动Kong网关
docker run -d --name kong \ --network=kong-ee-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-ee-database" \ -e "KONG_PG_USER=kong" \ -e "KONG_PG_PASSWORD=kong" \ -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 \ kong-oss:latest
备注:
1、KONG_PG_HOST和KONG_PG_USER的值在Step6中可以找到
2、最后的kong-oss:latest,是kong的镜像
3、network是Step3中创建的网络空间
启动成功,验收:
因为我设置的启动参数是:8001:8001
而不127.0.0.1:8001:8001
,所以可以直接通过浏览器访问8001端口查看到kong的源数据信息,如下:
安装Konga#
konga提供了对kong的可视化管理能力。
konga本身也需要连接数据库持久化自己的一些数据,所以为它启动一个postgresql
Step1:创建存储卷
docker volume create konga-postgresql
Step2:启动konga
docker run -d --name konga-database \ --network=kong-ee-net \ -p 5433:5432 \ -v konga-postgresql:/var/lib/postgresql/data \ -e "POSTGRES_USER=konga" \ -e "POSTGRES_DB=konga" \ -e "POSTGRES_PASSWORD=konga" \ postgres:9.6
Step3:初始化该数据库
docker run --rm --network=kong-ee-net \ pantsel/konga:latest \ -c prepare \ -a postgres \ -u postgres://konga:konga@konga-database:5432/konga
Step4:启动Konga
docker run -d -p 1337:1337 \ --name konga \ --network=kong-ee-net \ -e "DB_ADAPTER=postgres" \ -e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \ -e "NODE_ENV=production" \ -e "DB_PASSWORD=konga" \ pantsel/konga
验收:http://10.4.7.103:1337/register
Step5:注册用户并登录
可以在konga数据库中看到注册的用户信息
Step6:Konga连接Kong
主页>Connections >NEW CONNECTION
Step7:激活白日梦Kong
Step8:激活后的界面如下: