route
根据paths
转发给相应的service
根据host
(upstream
的name
)转发给 upstream
负载均衡至targets
,这就是kong
的负载均衡执行流程,下面经过restApi
分别配置upstream
,service
,route
。后端
建立名为upstream.api
的upstream
api
curl -X POST localhost:8001/upstreams -d "name=upstream.api" // reponse { "created_at": 1553661443, "hash_on": "none", "id": "04c9c36c-eea8-4d58-8668-3bfa117c34fd", "name": "upstream.api", ... }
为upstream.api
添加后端服务器服务器
curl -X POST localhost:8001/upstreams/upstream.api/targets \ -d "target=192.168.20.6:8888" \ -d "weight=100" // reponse { "created_at": 1553663185.86, "upstream": { "id": "04c9c36c-eea8-4d58-8668-3bfa117c34fd" }, "id": "3386af25-8643-4c9c-aff5-bd30451ae24b", "target": "192.168.20.6:8888", "weight": 100 } curl -X POST localhost:8001/upstreams/upstream.api/targets \ -d "target=192.168.20.6:9999" \ -d "weight=100" // reponse { "created_at": 1553663185.86, "upstream": { "id": "04c9c36c-eea8-4d58-8668-3bfa117c34fd" }, "id": "3386af25-8643-4c9c-aff5-bd30451ae24b", "target": "192.168.20.6:9999", "weight": 100 }
等同于建立了以下配置:负载均衡
upstream upstream.api { server 192.168.20.6:8888 weight=100; server 192.168.20.6:9999 weight=100; }
建立名为service.api
的服务,并经过host
绑定相应的后端服务upstream.api
。curl
curl -X POST localhost:8001/services/service.api -d "name=service.api" -d "host=upstream.api" // { "host": "upstream.api",//绑定的upstream "created_at": 1553663485, "connect_timeout": 60000, "id": "5b93eda7-7ba5-4acc-a536-cf12f58a1144",//service.id "protocol": "http", "name": "service.api", "read_timeout": 60000, "port": 80, "path": "/api/v1", "updated_at": 1553663485, "retries": 5, "write_timeout": 60000 }
等同于url
http { server { listen 8000; location waiting-for-define { proxy_pass http://upstream.api; } } }
为服务service.api
绑定路由。须要理解,route
并不是一条url
,它是kong
的路由服务,能够为某个kong
服务管理管理一套路由集合
,route
就至关于 http > server
中的 location
规则集合。rest
#为service.api添加路由集合 curl -X POST localhost:8001/routes \ -d "name=route.api" \ -d "paths[]=/api/v1" \ -d "paths[]=/api/v2" \ -d "paths[]=/api/v3" \ -d "hosts[]=api.service.com" \ -d "hosts[]=service.com" \ -d "service.id=5b93eda7-7ba5-4acc-a536-cf12f58a1144" #或者经过 services 的接口 curl -X POST localhost:8001/services/service.api/routes \ -d "name=route.api" \ -d "paths[]=/api/v1" \ -d "paths[]=/api/v2" \ -d "paths[]=/api/v3" \ -d "hosts[]=localhost" \ -d "hosts[]=api.service.com" \ -d "hosts[]=service.com" \
咱们还同时指定了hosts
,至关于server_name
,顺手把虚拟主机也作了。
大体等同于以下配置:code
http { server { listen 8000; server_name localhost api.service.com service.com; location /api/v1 { proxy_pass http://upstream.api; } location /api/v2 { proxy_pass http://upstream.api; } location /api/v3 { proxy_pass http://upstream.api; } } }
这样咱们能够经过server
localhost:8000/api/v1 api.service.com:8000/api/v2 service.com:8000/api/v3
来访问 service.api
服务,此服务后端有两台服务器作 LB
。接口