Kong是由Mashape公司开源的可扩展的Api GateWay项目。它运行在调用Api之前,以插件的扩展方式为Api提供了管理。比如,鉴权、限流、监控、健康检查等,Kong是基于lua语言、nginx以及openResty开发的,所有拥有动态路由、负载均衡、高可用、高性能、熔断(基于健康检查)等。Kong提供了许多开箱即用的插件,用户也可以自定义规则使用lua开发插件。
Kong官方文档:https://docs.konghq.com/
Kong下载地址:https://konghq.com/install/
Docker官网下载:https://www.docker.com/products/docker-desktop
Kong在本地安装比较麻烦,容易出现很多问题,对于lua语言不熟悉的人,可能处理这些问题是相当头疼的。我推荐使用Docker去安装并运行Kong,比较容易。
2.1 Docker创建kong-network
docker network create kong-net
2.2 Docker安装并运行postgres,执行下面的命令可以直接拉取postgres的image,并运行postgres。
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
2.3 初始化postgres
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up
2.4 Docker拉取kong的image并运行kong,Docker上的kong目前最新版应该是0.14.x
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-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:latest
docker ps ,看看应用是否都启动了。
2.5 测试Kong
mac 终端命令: curl -i http://localhost:8001/ 效果如下
2.6 可视化界面:安装Konga,Kong v0.13.x之前是通过kong-dashboard,mac版本。目前kong最新版1.0.x还未有支持的UI管理(操作的话可以使用curl,PostMan)
docker run -p 1337:1337
--network kong-net
-e "DB_ADAPTER=postgres" \
-e "DB_HOST=your-ip-address" \
-e "DB_PORT=5432:5432" \ default
-e "DB_USER=kong" \ default
-e "DB_PASSWORD=kong" \ default
-e "DB_DATABASE=kong-database" \ default kong-database or kong
--name konga \
pantsel/konga
运行效果如下,我们可以看到Services、routes、 apis(版本1.3.0后废弃)、consumers、plugins、upStreams、certificates。这些其实都是kong提供的API,Konga通过实现API,提供了界面操作,在这里感谢开源大佬们的无私奉献。
3.1 Api的使用
虽然说1.3.x版本后,Api已经不推荐使用了,也可以了解下,下面我们用www.baidu.com来测试。
采用curl命令添加Api:
curl -i -X POST \
--url http://127.0.0.1:8001/apis/ \
--data 'name=example-baidu' \
--data 'hosts=example.baidu.com' \
--data 'upstream_url=https://www.baidu.com'
也可以到界面中添加: 按照说明填写即可,填hosts后调用需要在请求头部Header加该参数,填Uris,是在请求路径后再加uris的路径。
测试一下结果:
curl -i -H 'Host:example.baidu.com' http://localhost:8000
如果想在网页中访问,那么最好修改下配置,将Host配置修改为Uris,如下图所示。
下面我们在网页中请求: http://localhost:8000/baidu-example
3.2 Service、routes的使用
Service跟Api类似,Service是从Api中将路由配置route分离出来,成为了一个单独项,增强了灵活性和可用性,可以对不同的路由进行不同的插件配置,下面直接使用界面进行操作。
然后需要配置路由,在Konga界面操作路由的时候遇到了点问题。提示说的是Hosts、paths、methods 三选一,填写1、2、3项都试过,但是都通不过,感觉应该是界面判断有误。
既然界面操作不了,那么我们又回到命令行吧,先用该命令查找下ServiceId
curl -i http://localhost:8001/services
下面我们配置routes:
curl -i -X POST \
--url http://localhost:8001/services/c4eefed0-cfc4-4ceb-8eef-08c6b2c2c060/routes \
--data 'paths[]=/baidu'
这里我们使用的serviceId,也可用使用Service name,为了和之前区别,我们这里路径使用\baidu。
我们再次访问下: http://localhost:8000/baidu
本帖仅供学习参考。