Kong系列-01-介紹

Kong的由來

  • Nginx是模塊化設計的反向代理軟件,C語言開發。
  • Lua是一個小巧的腳本語言,C語言開發,Lua腳本可以容易的被C/C++代碼調用,也可以反過來調用C/C++的函數。
  • 通過lua-nginx-module模塊將luaJIT解釋器集成進Nginx,使得Nginx可以執行Lua腳本,靈活但不宜用。
  • OpenResty是一個基於Nginx與Lua的高性能Web平臺,其中內部集成了大量精良的Lua庫,第三方模塊以及大多數的依賴項。用於方便地搭建能夠處理超高併發,擴展性極高的動態Web應用、Web服務和動態網關。
  • 在Nginx上直接使用Lua開發難度比較大,OpenResty集成大量Lua庫,第三方模塊和所需的依賴項,這樣使用Lua開發功能變得更加容易。
  • Kong是一個基於OpenResty開發的應用,可以認爲是一個Web Server,更進一步是一個API Gateway,具有API管理和請求代理的功能。
  • 可以舉個例子:Nginx是OS,Lua是編程語言,OpenResty是開發平臺或者框架,Kong是一個OpenResty之上的應用。

Kong版本

Kong是由Kong Inc.開源的API網關項目,其在Github上有24.1K Star。

Kong版本,0.10.0(2017-03-07) – 1.4.0(2019-10-24) 一共發佈29個版本,其中1個x版本,10個y版本,18個z版本。

Kong有社區版本Kong Gateway,收費版本Kong Enterprise。Kong網關本身是開源免費的,Kong Enterprise主要在Kong的管理工具、開發工具,企業級插件方面。

Kong特性

  • 雲原生(Cloud-Native):Kong可以在Kubernetes或裸機上運行;
  • 動態負載平衡(Dynamic Load Balancing):跨多個上游服務的負載平衡業務。
  • 基於哈希的負載平衡(Hash-based Load Balancing):一致的散列/會話親和的負載平衡。
  • 斷路器(Circuit-Breaker):智能跟蹤不健康的上游服務。
  • 健康檢查(Health Checks):主動和被動監控您的上游服務。
  • 服務發現(Service Discovery):解決如Consul等第三方DNS解析器的SRV記錄。
  • 無服務器(Serverless):從Kong中直接調用和保證AWS或OpenWhisk函數安全。
  • WebSockets:通過WebSockets與上游服務進行通信。
  • OAuth2.0:輕鬆的向API中添加OAuth2.0認證。
  • 日誌記錄(Logging):通過HTTP、TCP、UDP記錄請求或者相應的日誌,存儲在磁盤中。
  • 安全(Security):ACL,Bot檢測,IPs白名單/黑名單等。
  • 系統日誌(Syslog):記錄信息到系統日誌。
  • SSL:爲基礎服務或API設置特定的SSL證書。
  • 監視(Monitoring):能夠實時對關鍵負載和性能指標進行監控。
  • 轉發代理(Forward Proxy):使端口連接到中間透明的HTTP代理。
  • 認證(Authentications):支持HMAC,JWT和BASIC方式進行認證等等。
  • 速率限制(Rate-limiting):基於多個變量的阻塞和節流請求。
  • 轉換(Transformations):添加、刪除或操作HTTP請求和響應。
  • 緩存(Caching):在代理層進行緩存和服務響應。
  • 命令行工具(CLI):能夠通過命令行控制Kong的集羣。
  • REST API:可以通過REST API靈活的操作Kong。
  • GEO複製:在不同的區域,配置總是最新的。
  • 故障檢測與恢復(Failure Detection & Recovery):如果Cassandra節點失效,Kong並不會受影響。
  • 羣集(Clustering):所有的Kong節點會自動加入羣集,並更新各個節點上的配置。
  • 可擴展性(Scalability):通過添加節點,實現水平縮放。
  • 性能(Performance):通過縮放和使用Nigix,Kong能夠輕鬆處理負載。
  • 插件(Plugins):基於插件的可擴展體系結構,能夠方便的向Kong和API添加功能。

Kong部署場景

場景 OS Docker Kubernetes
DB-less無數據庫 Declarative Config Declarative Config Declarative Config
Ingress Controller
(Kubernetes下推薦無數據庫方式)
PostgreSQL 管理API 管理API Ingress Controller
管理API
Cassandra 管理API 管理API 不推薦

Kong以前只支持數據庫方式,配置數據(路由規則,Service等)存放在數據庫中,Kong各節點從數據庫中同步配置數據以保持配置數據一致性。從1.1.0版本開始,Kong開始支持無數據方式,無數據庫方式的配置數據存放在聲明式配置文件中,Kong各個節點完全獨立。

Kong有三種配置管理方式:

  • 管理API方式:Kong的標準管理方式,Kong的配置數據都是通過調用Kong提供的Rest API進行管理,最終配置都存放在數據庫中,Kong集羣實例從數據庫讀取配置。
  • 聲明式配置文件Declarative Config:在無數據庫方式下,Kong提供一種聲明式配置文件,配置數據在文件中聲明,然後通過文件或者Rest API的方式一次性加載到Kong中。
  • Ingress Controller:Kong在Kubernetes下支持Ingress Controller,Kong還定義了多個自定義資源CRDs,配置數據通過這些CRDs進行配置。

以下爲Kong的部署架構。

Deployment-Architecture

發佈了49 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章