Kong網關
一、kong網關核心概念
1. Upstream
upstream 對象表示虛擬主機名,可用於通過多個服務對傳入請求進行負載遠的
2. Target
目標ip地址/主機名,其端口表示后端服務的實例。每個上游都可以有多個Target,並且可以動態添加Target。
3. Service
服務實例是每個上游服務的抽象。服務的主要屬性是它的URL,其可以被設置為單個串或者通過指定其protocol,host,port和path。服務與路由相關聯(服務可以有許多與之關聯的路由)。路由是kong的入口點,並定義匹配客戶端請求的規則。一量匹配路由,kong就會將請求代理到其關聯的服務。
4. Route
路由實體定義規則以匹配客戶端的請求,每個Route與一個Service相關聯,一個服務可能有多個與之關聯的路由。與給定路由匹配的每個請求都將代理到其關聯的Service上。可以配置的字段有:
- hosts
- paths
- methods
Service和Route的組合提供了一種強大的路由機制,通過它可以在kong中定義細粒度的入口點,從而使基礎架構路由到不同上游服務。
5. Consumer
Consumer 對象表示服務的使用者或者用戶,你可以依靠kong作為主數據庫存儲,也可以將使用者列表與數據庫映射,以保持Kong與現有的主數據存儲之間的一致性。
6. Plugin
插件實體表示將在httpygfi/響應生命周期執行的插件配置。它是為在kong后面運行的服務添加功能的。
將插件配置添加到服務時,客戶端向該服務發出的每個請求都將運行所述插件。如果某個特定消費者需要將插件調整為不同的值,你可以通過 創建一個單獨的插件實例,通過service和consumer字段指定服務和消費者。
對應關系
Upstream : target -> 1:n
Service:Upstream -> 1:1 or 1:0 (service 可以直接指向具體的Target,相當於不做負載均衡)
Service:Route -> 1:n
Client 請求的流量通過Route指向與之相關的Service,如果配置插件的話就會作用插件,Service接到流量后給到相應的Upstream的服務上面。
二、kong API操作
配置服務
通過向Admin發送Http請求來向Kong添加服務
{
"connect_timeout":60000,
"created_at":1587869247,
"host":"test-service.com",
"id":"dddddddddddddddddddddddddddd",
"name":"test-service",
"path":"/",
"port":80,
"protocol":"http",
"read_timeout":60000,
"retries":5,
"updated_at":1587869247,
"write_timeout":60000
}
url參數是一個簡化參數,用於一次性添加protocol,host,port和path。
路由匹配規則
現在讓我們討論kong如何匹配針對路由的已配置host,path和methods屬性的請求。請注意,所有這三個字段都是可選的,但必須至少指定其中一個。
對於匹配路線的請求:
- 請求必須包含所有已配置的字段
- 請求中的字段必須至少與其中一個配置值匹配(當字段配置接收一個或者多個值時,請求只需要其中一個值被視為匹配)
- kong route 中的host的作用是什么,有什么意義哪些場景會用到設置多個host呢?


三、Kong運維
kong version #查看版本
1. 運行目錄
/usr/local/kong Kong的運行目錄
/usr/local/kong/pids/nginx.pid nginx-master進程號
/usr/local/kong/logs/access.log 數據口的訪問日志文件
/usr/local/kong/logs/admin_access.log 管理口的訪問日志
/usr/local/kong/logs/error.log 錯誤日志
2.監聽端口
#數據口:8000
curl http://127.0.0.1:8000
#管理口:8001
curl http://127.0.0.1:8001/
#查看連接數統計
curl http://127.0.01:8001/status 2>/dev/null | jq .server
{
"connections_writing": 1,
"total_requests": 13,
"connections_handled": 13,
"connections_accepted": 13,
"connections_reading": 0,
"connections_active": 1,
"connections_waiting": 0
}
#查看內存統計
curl http://127.0.01:8001/status 2>/dev/null | jq .memory
{
"workers_lua_vms": [
{
"http_allocated_gc": "0.05 MiB",
"pid": 1310
}
],
"lua_shared_dicts": {
"kong_rate_limiting_counters": {
"allocated_slabs": "0.08 MiB",
"capacity": "12.00 MiB"
},
"kong_locks": {
"allocated_slabs": "0.06 MiB",
"capacity": "8.00 MiB"
},
"kong_healthchecks": {
"allocated_slabs": "0.04 MiB",
"capacity": "5.00 MiB"
},
"kong_cluster_events": {
"allocated_slabs": "0.04 MiB",
"capacity": "5.00 MiB"
......
3. 監控指標
- 連接數
- 內存
- 錯誤日志
