Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操作和配置API管理系统,所以它可以水平扩展多个Kong服务器,通过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。
Kong主要有三个组件:
Kong Server :基于nginx的服务器,用来接收API请求。
Apache Cassandra/PostgreSQL :用来存储操作数据。
Kong dashboard:官方推荐UI管理工具,当然,也可以使用 restfull 方式 管理admin api。
Kong采用插件机制进行功能定制,插件集(可以是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。
1.docker 安装kong
docker pull kong:3.0
2.docker 下载postgres
docker network create kong-net ##创建网络
docker pull postgres:9.6
注意:postgres的版本最好是9.6.x以下的。
3.启动postgres
docker run --privileged=true --name kong-database -e "POSTGRES_USER=kong" -e POSTGRES_PASSWORD=kong --network=kong-net -p 5432:5432 -v /my/local/path:/var/lib/postgresql/data -d postgres:9.6
然后使用docker ps查看是否启动成功
4.启动Kong
4.1 准备数据库
docker run --rm --network=kong-net -e "KONG_LOG_LEVEL=debug" -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" kong:3.0 kong migrations bootstrap
4.2 启动kong
docker run -d --name kong --network=kong-net -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_PORT=5432" -e "KONG_PG_PASSWORD=kong" -e "KONG_PG_DATABASE=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" -e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong:3.0
8000:对应的http请求代理端口
8001: http接口的管理端口
8443: 对应的https请求的代理端口
8444: https接口的管理端口
然后根据docker ps命令查看kong是否启动成功。
5.验证是否成功启动
curl -i http://localhost:8001
6.安装Konga可视化
docker pull pantsel/konga
docker run -d -p 1337:1337 \
--network kong-net \
--name konga \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgresql://kong:kong@kong-database/kong" \
pantsel/konga
konga默认端口是1337,这里也需要对外暴露
启动成功之后,输入http://ip:1337/register,检查konga是否安装成功
首先注册一个账号。
- Kong应用
7.1创建连接点
默认的端口是8001当然可以在启动kong的时候自己创建映射端口。
7.2 创建Upstreams
输入name,然后提交
点击刚添加的upstream点击DETAILS添加targets,然后点击ADD TARGET输入target(ip+port)后点击SUBMIT TARGET即可,ip为本地电脑ip保证kong容器内可访问,端口为本地服务端口,这个地方可以理解为你的springboot服务的ip+端口
7.3 配置对应的services和routes
输入name、host(可以与前面Upstreams的name保持一致)
protocol(协议类型,这里是http)
port这里是8000,kong启动之后,http的代理端口是8000
service保存后,点击service name进入详情页面,然后点击Routes添加路由规则
点击ADD ROUTE输入name、paths(输入转发规则需按回车才生效),Strip Path(是否把匹配成功的paths删除后在转发后端服务器.),Preserve Host(转发后端是否带host参数,默认不带,Protocols 只保留http即可,最后点击SUBMIT ROUTE
8.测试网关是否可用
配置网关前
配置网关后
9.命令行创建upstream、target、service、route
9.1配置 upstream
curl -X POST http://localhost:8001/upstreams --data "name=helloUpstream"
9.2 配置 target
curl -X POST http://localhost:8001/upstreams/helloUpstream/targets --data "target=后端微服务ip:端口" --data "weight=100"
9.3 配置service
curl -X POST http://localhost:8001/services --data "name=hello" --data "host=helloUpstream" --data "port=8000" --data "protocol=http"
9.4 配置route
以service id作为标识
curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=3650cc19-f314-4b87-a7e4-b07c63ad434e"
也可以后面加参数命名
curl -X POST http://localhost:8001/routes --data "paths[]=/hello" --data "service.id=3650cc19-f314-4b87-a7e4-b07c63ad434e" --data "name=dsds"