在使用Kong API Gateway(API網關)時,理解其核心概念是掌握其工作原理的基礎。這些概念既體現了Kong的設計哲學,也決定了它如何適配復雜的API管理場景(如微服務、多團隊協作等)。本文將系統梳理Kong的核心概念,解析它們的定義、作用及相互關系。
一、基礎實體:API流量的“基本單元”
Kong通過幾個核心實體(entity)抽象API管理的關鍵要素,這些實體是配置和管理的基礎。
1. Service(服務)
Gateway Service entities are abstractions of each of your own upstream services
定義:Service是對后端業務服務(如用戶服務、訂單服務)的抽象,代表一個需要被Kong代理的上游(upstream)服務。
作用:Service存儲了后端服務的核心信息,例如服務的協議(HTTP、gRPC、TCP等)、主機地址(域名或IP)、端口等,是Kong轉發請求的“目標地址”。
舉例:假設后端有一個用戶服務,地址為http://user-service:8080
,則在Kong中創建一個Service,配置protocol: http
、host: user-service
、port: 8080
,即可代表該服務。
2. Route(路由)
A Route defines rules to match client requests, and is associated with a Service.
定義:Route是客戶端訪問Service的“入口規則”,用于將客戶端請求(通過URL、方法、頭部等條件)匹配到對應的Service。
作用:Route定義了“如何訪問Service”,通過匹配規則將外部請求路由到正確的后端Service。一個Service可以關聯多個Route(多入口),一個Route只能關聯一個Service。
核心配置:
paths
:匹配請求的URL路徑(如/api/v1/users
);methods
:匹配請求的HTTP方法(如GET、POST);hosts
:匹配請求的Host頭部(如api.example.com
);headers
:匹配請求的特定頭部(如X-API-Version: v1
)。
舉例:為用戶Service配置兩個Route:
- Route1:
paths: /users
,匹配http://api.example.com/users
的請求; - Route2:
paths: /v1/users
,匹配http://api.example.com/v1/users
的請求;
兩者最終都會轉發到用戶Service。
3. Consumer(消費者)
Consumers are the end users of a service.
定義:Consumer是對API調用方(如客戶端應用、用戶)的抽象,用于標識請求的來源身份。
作用:通過Consumer可以實現精細化的權限控制、流量限制、計費等功能(結合插件)。例如,為不同Consumer配置不同的限流閾值,或僅允許特定Consumer訪問某Route。
關聯方式:客戶端請求需通過某種方式(如API密鑰、JWT令牌)與Consumer關聯,Kong通過驗證令牌中的身份信息,識別對應的Consumer。
二、流量處理:從請求到轉發的“中間層”
Kong作為網關,核心功能是處理客戶端到后端服務的流量,以下概念描述了流量處理的關鍵環節。
4. Upstream(上游)
An Upstream represents a virtual hostname and can be used to load balance incoming requests over multiple Services.
定義:Upstream是對一組后端服務實例(如多個用戶服務節點)的抽象,用于實現負載均衡(load balancing)和故障轉移(failover)。
作用:當后端服務有多個實例(如微服務架構下的集群部署)時,Upstream通過負載均衡策略將請求分發到不同實例,避免單節點過載。
與Service的關系:Service可以直接關聯單個后端地址(簡單場景),也可以關聯Upstream(集群場景)。例如,用戶Service的host
配置為Upstream名稱,而非具體IP,即可啟用負載均衡。
5. Target(目標)
A target is an IP address/hostname with a port that identifies an instance of a backend service.
定義:Target是Upstream下的具體后端服務實例(如192.168.1.100:8080
),代表一個可接收請求的節點。
作用:Target是Upstream的“組成單元”,Upstream通過管理Target的狀態(在線/離線)實現流量分發。例如,當某個Target故障時,Kong會自動將流量轉發到其他健康Target。
健康檢查:Kong支持對Target進行主動/被動健康檢查(如HTTP狀態碼、響應時間),自動剔除故障節點。
6. Plugin(插件)
Plugins allow you to extend Kong’s capabilities with features like rate limiting, authentication, and logging.
定義:Plugin是Kong的“功能擴展模塊”,通過嵌入請求處理生命周期,為API添加額外功能(如認證、限流、監控等)。
作用:插件無需修改網關核心代碼,即可擴展Kong的能力,是Kong靈活性的核心。
生效范圍:插件可以綁定到Service、Route、Consumer或全局(Global),實現不同粒度的功能生效。例如:
- 綁定到Route:僅對該Route的請求生效;
- 綁定到Consumer:僅對該Consumer的請求生效。
常見類型:JWT(認證)、Rate Limiting(限流)、Prometheus(監控)等(前文已詳細介紹)。
三、架構組件:Kong的“運行骨架”
Kong采用“控制平面+數據平面”的分離架構,以下概念描述其運行時的核心組件。
7. Data Plane(數據平面)
定義:Data Plane是處理實際API流量的節點(Kong Gateway實例),負責請求轉發、插件執行、負載均衡等實時操作。
作用:直接與客戶端和后端服務交互,是流量的“處理中樞”。數據平面節點可橫向擴展(部署多個實例),通過負載均衡器分擔流量壓力。
8. Control Plane(控制平面)
定義:Control Plane是管理全局配置的中樞,負責接收和存儲配置(如Service、Route、插件規則),并將配置同步到所有Data Plane節點。
作用:實現“配置一次,全局生效”,避免逐個節點修改配置的繁瑣。控制平面不處理業務流量,僅負責配置管理。
9. Admin API
定義:Admin API是Kong的管理接口,用于通過HTTP請求創建、修改、刪除各類實體(Service、Route、插件等)。
作用:是用戶與Kong交互的主要方式(除圖形化界面Kong Manager外)。例如,通過POST /services
創建Service,通過PUT /routes/{id}
修改Route規則。
安全性:Admin API默認僅監聽本地地址,生產環境需配置認證(如密鑰)和網絡隔離,防止未授權訪問。
四、概念關系:一張圖看懂Kong的工作流
這些概念的協作流程可簡化為:
- 客戶端發送請求(如
GET http://api.example.com/users
); - 請求到達Data Plane節點,Kong通過Route的匹配規則(
paths: /users
)找到對應的Service; - Service關聯到Upstream,Kong根據負載均衡策略將請求轉發到某個健康的Target(后端實例);
- 轉發過程中,綁定到Route/Service的插件(如JWT認證、限流)在請求生命周期的特定階段執行(如
access
階段驗證令牌); - 后端服務處理請求并返回響應,經Kong返回給客戶端;
- 所有配置(Route、Service、插件等)通過Control Plane同步到Data Plane,確保集群一致性。
結語
Kong的核心概念圍繞“抽象實體”和“分層架構”設計:
- 通過Service/Route抽象API的“目標”與“入口”
- 通過Upstream/Target實現集群流量分發
- 通過Plugin擴展功能
- 通過控制平面/數據平面分離實現高效管理
理解這些概念,是靈活配置Kong、應對復雜API管理場景的基礎。無論是簡單的單服務代理,還是大規模微服務架構,這些概念都是構建Kong配置的“積木”。