KONG API Gateway中的核心概念

在使用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: httphost: user-serviceport: 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的工作流

這些概念的協作流程可簡化為:

  1. 客戶端發送請求(如GET http://api.example.com/users);
  2. 請求到達Data Plane節點,Kong通過Route的匹配規則(paths: /users)找到對應的Service;
  3. Service關聯到Upstream,Kong根據負載均衡策略將請求轉發到某個健康的Target(后端實例);
  4. 轉發過程中,綁定到Route/Service的插件(如JWT認證、限流)在請求生命周期的特定階段執行(如access階段驗證令牌);
  5. 后端服務處理請求并返回響應,經Kong返回給客戶端;
  6. 所有配置(Route、Service、插件等)通過Control Plane同步到Data Plane,確保集群一致性。

結語

Kong的核心概念圍繞“抽象實體”和“分層架構”設計:

  • 通過Service/Route抽象API的“目標”與“入口”
  • 通過Upstream/Target實現集群流量分發
  • 通過Plugin擴展功能
  • 通過控制平面/數據平面分離實現高效管理

理解這些概念,是靈活配置Kong、應對復雜API管理場景的基礎。無論是簡單的單服務代理,還是大規模微服務架構,這些概念都是構建Kong配置的“積木”。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91174.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題 摘要 在開發過程中,我們經常會遇到各種模塊安裝的問題,尤其是在使用PyCharm時,經常會遇到pip install時的…

3 運算符與表達式

運算符:對字面量或者變量進行操作的符號 表達式:用運算符把字面量或者變量連接起來符合java語法的式子就可以稱作表達式不同運算符連接的表達式體現的是不同類型的表達式int a 10; int b 20; int c a b;:運算符,并且是算術運算…

MySQL的單行函數:

目錄 函數的理解: MySQL的內置函數及分類: 單行函數: 數值函數: 基本函數: 角度與弧度互換函數: 三角函數: 指數與對數: 進制轉換: 字符串函數: 日…

設計模式(二十一)行為型:狀態模式詳解

設計模式(二十一)行為型:狀態模式詳解狀態模式(State Pattern)是 GoF 23 種設計模式中的行為型模式之一,其核心價值在于允許一個對象在其內部狀態改變時改變其行為,使得對象看起來像是修改了它的…

深入理解 Doris Compaction:提升查詢性能的幕后功臣

在 Doris 的數據存儲與查詢體系里,Compaction 是保障查詢效率、優化存儲結構的關鍵機制。如果你好奇 Doris 如何在高頻寫入后仍能高效響應查詢,或是想解決數據版本膨脹帶來的性能問題,這篇關于 Compaction 的深度解析值得收藏 👇 …

css 實現虛線效果的多種方式

使用邊框實現虛線 通過設置元素的邊框樣式來實現虛線效果。以下為示例代碼: .dashed {border: 1px dashed black; }使用 CSS 偽元素實現虛線 使用偽元素來模擬虛線的效果。以下為示例代碼: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事務:原理、流程與實踐

Apache RocketMQ 是一種分布式消息隊列系統,支持分布式事務消息,以確保在分布式系統中數據的一致性。它通過一種基于兩階段提交(2PC)的機制結合補償邏輯來實現分布式事務的最終一致性。以下是對 RocketMQ 分布式事務的詳細講解,包括其核心概念…

具身智能 自動駕駛相關崗位的技術棧與能力地圖

一、硬技能技術棧(優先級排序) 1. 核心領域技術(★★★★★)技術方向具體技能學習建議大模型實戰- VLA架構(RT-2、PaLM-E)開發/微調- 多模態對齊(CLIP、Flamingo)- 生成式策略&#…

實現了加載 正向 碰撞 雅可比 仿真

""" # 此示例從 URDF 文件中加載一個 UR10 機械臂的模型 # 隨后演示 Pinocchio 庫的基本功能,如正向運動學計算 # 雅可比矩陣計算、碰撞檢測以及動力學仿真 """ # 導入 meshcat 的幾何模塊,用于創建和管理可視化的幾何對象 import meshcat.geo…

【0基礎PS】PS工具詳解--畫筆工具

目錄前言一、畫筆工具的位置與快捷鍵?二、畫筆工具選項欄設置?三、畫筆工具的進階應用?四、常見問題及解決方法?總結前言 在 Photoshop 的眾多工具中,畫筆工具無疑是極具創造力和實用性的工具之一。無論是進行圖像繪制、照片修飾,還是特效制作&…

window10和ubuntu22.04雙系統之卸載ubuntu系統

window10和ubuntu22.04雙系統之卸載ubuntu系統)1. 刪除Ubuntu系統占用的磁盤分區(在Windows下操作)2. 刪除ubuntu開機引導項1. winr出來終端提示框后輸入2. 然后會在命令行中顯示電腦的硬盤列表,輸入命令選擇安裝Windows的那個硬盤…

(C++)C++類和類的方法(基礎教程)(與Python類的區別)

前言&#xff1a; 本篇博客建議搭配&#xff1a;&#xff08;Python&#xff09;類和類的方法&#xff08;基礎教程介紹&#xff09;&#xff08;Python基礎教程&#xff09;-CSDN博客 一起學習使用&#xff1b; 源代碼&#xff1a; #include <iostream> #include &…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博文章數據可視化分析-文章分類下拉框實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博文章數據可視化分析-文章分類下拉框實現…

Git命令保姆級教程

Git 入門網站 https://learngitbranching.js.org/?localezh_CN Git 命令 git init // 在本地目錄內部會生成.git文件夾 git initgit clone // 從git服務器拉取代碼 // 代碼下載完成后在當前文件夾中會有一個 shop 的目錄&#xff0c;通過 cd shop 命令進入目錄。 git clone ht…

Java Ai For循環 (day07)

循環結構 for&#xff1a;循環語句的作用&#xff1a;可以將一段代碼重復的執行很多次for 循環語句格式&#xff1a;執行流程&#xff1a; 初始化語句執行條件判斷語句&#xff0c;看結果是 true&#xff0c;還是 false false結束&#xff0c;true繼續執行循環體語句執行條件控…

Directory Opus 使用優化

自定義快捷鍵 Directory Opus 移動標簽到另一欄 設置快捷鍵&#xff1a;ctrl←/→ 設置步驟&#xff1a; 打開【設置】—>選擇【自定義工具欄和快捷鍵】 選擇【新建】—>【新建窗口快捷鍵】 輸入快捷鍵命令 Go TABMOVEother此時可以點擊運行進行測試&#xff0c;…

Qt知識點2『Ubuntu24.04.2安裝Qt5.12.9各種報錯』

問題1&#xff1a;Qt安裝完畢后&#xff0c;新建一個最簡單的測試程序&#xff0c;但是QtCreator左側構建的三個按鈕呈現灰色&#xff0c;無法進行構建操作答&#xff1a;進入QtCreator的Kits界面&#xff08;工具-選項&#xff09;&#xff0c;點擊"自動檢測"下的De…

TS面試題

1.TS有哪些類型&#xff08;對比與js&#xff09;&#xff1f;關鍵字/語法用途示例any關閉類型檢查let a: any 4unknown類型安全的 anylet u: unknown 4; if (typeof u number) …never永不存在的值function err(): never { throw 0; }void無返回值function f(): void {}enu…

借助Early Hints和HarperDB改善網頁性能

對電商網站來說&#xff0c;糟糕的頁面性能可能會增加交易放棄率。一直以來&#xff0c;人們會使用CDN進行緩存從而縮短頁面加載時間&#xff0c;但即便實施了強大的緩存&#xff0c;消費者在通過移動網絡訪問這些網站時可能仍然會需要頻繁等待。最近誕生了一種名為“早期提示”…

MEMS陀螺如何成為無人機穩定飛行的核心?

在無人機自主翱翔、靈活機動并適應多變環境的背后&#xff0c;對其運動狀態——尤其是姿態——的精確感知是基石。作為飛行控制系統&#xff08;飛控&#xff09;的“內耳”&#xff0c;陀螺儀實時捕捉機體繞X、Y、Z三軸的旋轉角速度。這一核心數據是飛控進行姿態解算和維持飛行…