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
。接口