配置说明:
routes 是kong的路径匹配规则,通过routes,kong知道这个请求应该转发给哪个service;
A single Service can have many Routes.
service 通过host知道上游服务在哪里,其path属性是上游服务的路径;
upstream是上游服务,仅有一个名字属性;upstream 必须要配置health check ,要不,其中一个target挂掉了,kong依然把流量转发过去;有health check 的话,kong会自动切换流量。
target 是上游服务对应的物理服务地址,负载均衡就放到这里。
# upstreams
curl -i -X PATCH --url http://localhost:8001/upstreams --data 'name=tileserver'
--data 'algorithm=round-robin' --data 'healthchecks.active.type=http'
--data 'healthchecks.active.timeout=2' --data 'healthchecks.active.healthy.successes=2'
--data 'healthchecks.active.healthy.interval=10' --data 'healthchecks.active.unhealthy.tcp_failures=1'
--data 'healthchecks.active.unhealthy.timeouts=1'
--data 'healthchecks.active.http_path=/data/pgis_poi/15/26692/14218.pbf'
--data 'healthchecks.active.unhealthy.interval=3'
************
上面配置的是主动健康检查,--data 'healthchecks.active.healthy.interval=10'
代表10秒就发送一个请求,检测一次,主动健康检查占用流量。
**************
Active health checks
Active health checks 就是主动探测他们的健康状态。
当 upstream 实体启用活动健康检查时,Kong 将定期向 upstream 的每个 target 的配置路径发出 HTTP 或 HTTPS 请求。
这允许 Kong 根据探测结果自动启用和禁用 balancer 中的 target 。Active health checks 的周期性是可以被配置的,
当 target 是健康还是不健康。如果其中一个的interval值设置为零,则在相应的场景中禁用检查。如果两者都为零,则完全禁用活动健康检查。
Passive health checks
Passive health checks 是否基于由 Kong 代理的请求(HTTP/HTTPS/TCP)执行检查,而不生成额外的流量。
当 target 变得无响应时,被动健康检查器将检测到这一点,并将目标标记为不健康。
Ring-balancer 将开始跳过这个 target ,因此不会有更多的流量被路由到它。
# target
curl -i -X POST --url http://localhost:8001/upstreams/tileserver/targets --data 'target=192.168.1.7:8083'
**************
targets 无法删除,delete方法实际上是把它设置为weight=0
**************
下面是更新语法
curl -i -X PATCH --url http://localhost:8001/upstreams/tileserver/targets/192.168.1.7:8083
--data 'target=192.168.1.7:8083' --data 'weight=100'
curl -i -X PATCH --url http://localhost:8001/upstreams/tileserver/targets/192.168.1.7:8085
--data 'target=192.168.1.7:8085' --data 'weight=100'
# services
curl -i -X PATCH --url http://localhost:8001/services/1/ --data 'name=1'
--data 'protocol=http' --data 'host=tileserver' --data 'path=/data/1/'
curl -i -X PATCH --url http://localhost:8001/services/2/ --data 'name=2'
--data 'protocol=http' --data 'host=tileserver' --data 'path=/data/2/'
curl -i -X PATCH --url http://localhost:8001/services/3/ --data 'name=3'
--data 'protocol=http' --data 'host=tileserver' --data 'path=/data/3/'
curl -i -X PATCH --url http://localhost:8001/services/4/ --data 'name=4'
--data 'protocol=http' --data 'host=tileserver' --data 'path=/data/4/'
curl -i -X PATCH --url http://localhost:8001/services/5/ --data 'name=5'
--data 'protocol=http' --data 'host=tileserver' --data 'path=/data/5/'
# routes
curl -i -X PATCH --url http://localhost:8001/services/1/1/ --data 'name=1'
--data 'protocols[]=http' --data 'paths[]=/data/1/'
curl -i -X PATCH --url http://localhost:8001/services/2/2/ --data 'name=2'
--data 'protocols[]=http' --data 'paths[]=/data/2/'
curl -i -X PATCH --url http://localhost:8001/services/3/routes/3/ --data 'name=3'
--data 'protocols[]=http' --data 'paths[]=/data/3/'
curl -i -X PATCH --url http://localhost:8001/services/4/routes/4/ --data 'name=4'
--data 'protocols[]=http' --data 'paths[]=/data/4/'
curl -i -X PATCH --url http://localhost:8001/services/5/routes/5/ --data 'name=5'
--data 'protocols[]=http' --data 'paths[]=/data/5/'
# plugins
curl -i -X POST --url http://localhost:8001/services/1/plugins --data 'name=key-auth'
curl -i -X POST --url http://localhost:8001/services/2/plugins --data 'name=key-auth'
curl -i -X POST --url http://localhost:8001/services/3/plugins --data 'name=key-auth'
curl -i -X POST --url http://localhost:8001/services/4/plugins --data 'name=key-auth'
curl -i -X POST --url http://localhost:8001/services/5/plugins --data 'name=key-auth'
# consumers
curl -i -X POST --url http://localhost:8001/consumers --data 'username=agan' --data 'custom_id=001'
curl -i -X POST --url http://localhost:8001/consumers/agan/key-auth --data 'key=20200402'