前言
kong 可用作api gateway,用起来比较灵活,插件也比较丰富
安装
创建docker 网络
docker network create kong-net
创建postgres容器
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
postgres:9.6
创建kong 容器
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=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
验证
curl -i http://localhost:8001/
反向代理
创建service
curl -i -X POST http://localhost:8001/services/ \
-d 'name=foo-service' \
-d 'url=http://www.baidu.com'
service_id为创建service响应中的id
创建route
curl -i -X POST http://localhost:8001/routes/ \
-d 'hosts[]=example.com' \
-d 'paths[]=/foo' \
-d 'service.id=d54da06c-d69f-4910-8896-915c63c270cd'
service_id为创建service响应中的id
验证
curl -H 'Host:example.com' http://localhost:8000/foo/
健康检查
分主动和被动两种
主动:
主动发送请求检测接口,会产生额外流量
被动:
根据Kong代理的请求执行的检查,不会产生额外的流量。
当目标变得无响应时,被动健康检查程序将检测到该目标并将目标标记为不健康,不再将流量路由到该目标.
如果已恢复,管理员可以通过Admin API端点手动通知运行状况检查器应该再次启用目标.
负载均衡
分dns负载均衡和环形负载均衡
dns负载均衡
解析域名获取ip列表均衡
环形负载均衡
每个upstream都有自己的ringbalancer。
每个upstream可以附加许多target条目,代理到“virtual hostname”的请求将在target上进行负载平衡。