目錄
文章目錄
- 目錄
- Kong
- Kong 的軟體架構
- Kong 的插件
- Lua Nginx Module
- 零信任網關
- 技術選型
Kong
Kong 是一款由 Mashape 公司開源的 APIGW 軟體,基于 OpenResty(Nginx + Lua 模塊)實作,具有高可用、易擴展的特性,Kong 在 Mashape 上管理了超過 15,000 個 API,為 200,000 開發者提供了每月數十億的請求支持,
- 官網:https://konghq.com/kong/
- Github:https://github.com/Kong/kong
- Docs:https://docs.konghq.com/
- 中文檔案:https://github.com/qianyugang/kong-docs-cn
Kong 的本質是一個在 Nginx 上運行的 Lua 應用程式,由 lua-nginx-module 實作,Kong 和 OpenResty 一起打包發行,其中已經包含了 lua-nginx-module,可以簡單理解為:Kong > OpenResty > Nginx + lua-nginx-module,

Kong 的特性:
- 可擴展:Kong Server 支持水平擴展,
- 插件:Kong Server 實作了 Plugin 機制進行功能定制,通過 RESTful Admin API 安裝和配置插件,
- 在任何基礎設施上運行:Kong 可以部署在云端、機房、或者混合環境,包括單個或多個資料中心,
Kong 的功能:
- Cloud Native(云原生):與平臺無關,Kong 可以從裸機運行到 Kubernetes,
- Dynamic Load Balancing(動態路由):Kong 的背后是 OpenResty + Lua,所以從 OpenResty 繼承了動態路由的特性,
- Circuit Breaker(熔斷)
- Health Checks(健康檢查)
- Logging(日志):可以記錄通過 Kong 的 HTTP,TCP,UDP 請求和回應,
- Security(安全訪問):權限控制,IP 黑白名單,同樣是 OpenResty 的特性,
- SSL:Setup a Specific SSL Certificate for an underlying service or API,
- 監控:Kong 提供了實時監控插件,
- 認證:支持 HMAC、JWT、Basic、OAuth2.0 等常用協議,
- Rate-limiting(限流):Block and throttle requests based on many variables,
- REST API:通過 Rest API 進行配置管理,從繁瑣的組態檔中解放,
- 高可用性:天然支持分布式,
- Plugins(插件機制):提供眾多開箱即用的插件,且有易于擴展的自定義插件介面,用戶可以使用 Lua 自行開發插件,
Kong 的軟體架構
Kong 有 3 個核心組件:
- Kong Server:主體程式,基于 Nginx 的 HTTP APIGW 服務器,用來接收 API 請求,
- Apache Cassandra/PostgreSQL:后端資料庫,
- Kong Dashboard:UI 管理工具,
Kong 的分層架構:
- Nginx 層:Niginx Server,
- OpenResty 層:可以通過 Lua 模塊來進行功能擴展是 Nginx 的一大特點,OpenResty 就是一組實作了 Web 平臺的基礎 Lua 模塊,并與 Nginx 一起打包發布,
- Cluster & Data Store 層:持久化 Kong 所需要的配置和生產資料,目前支持 Apache Cassandra 和 PostgreSQL 兩種后端資料庫,Cassandra 是分布式的 NoSQL 資料庫,天然支持高可用,
- Plugin 層:Kong 基于 OpenResty 可以繼續實作各類 Plugin 繼而滿足 APIGW 的基本功能,且可以通過添加新的插件進行擴展,這些插件可以通過 RESTful Admin API 輕松配置,
- RESTful APIs 層:包括 RESTful Admin API 和 RESTful Proxy API,
可見,Kong 覆寫了 Nginx 的所有功能,包括:反向代理、負載均衡以及基本的快取、安全的認證、限流限速等,同時還支持 Nginx 等 Web 服務器實作不了的功能,例如:動態上游、動態 SSL 證書、動態限流限速,以及主動/被動健康檢查、服務熔斷等,

Kong 的插件

- Kong Hub:https://docs.konghq.com/hub/
運行 Kong 時,每個前端 API(虛)請求經過 Kong 反向代理到后端 API(實),在 Requests 和 Responses 之間,Kong 會依次執行已經事先安裝和配置好的任何插件,
插件可以是全域的,也可以是區域的,例如:限流插件,可以實作對所有 API 和所有消費者、所有 API 和特定消費者、特定 API 和所有消費者、特定 API 和特定消費者等多種效果,
Kong 默認插件:
-
身份認證插件(Authentication):在微服務架構中,需要做嚴格的身份認證,包括加密、OpenID 之類的身份認證,支持 Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication,
-
安全控制插件(Security):支持 ACL(訪問控制)、CORS(跨域資源共享)、動態 SSL、IP 限制、爬蟲檢測,
-
流量控制插件(Traffic Control):支持請求限流(基于請求計數限流)、上游回應限流(根據 Upstream 回應計數限流)、請求大小限制,限流支持本地、Redis、集群限流等模式,
-
分析與監控插件(Analytics & Monitoring ):支持 Galileo(記錄請求和回應資料,實作 API 分析)、Datadog(記錄 API Metric,如請求次數、請求大小、回應狀態和延遲,可視化 API Metric)、Runscope(記錄請求和回應資料,實作 API 性能測驗和監控),
-
協議轉換插件(Transformations):在微服務架構中,HTTP 的使用不如 gRPC 普遍,需要支持 HTTP 到 gRPC 協議的轉換,支持請求轉換(在轉發到 Upstream 之前修改請求)、回應轉換(在 Upstream 回應回傳給客戶端之前修改回應),
-
日志應用插件(Logging):TCP、UDP、HTTP、File、Syslog、StatsD、Loggly 等,
-
Serverless:提供對 AWS Lambda、Azure Functions、Apache OpenWhisk、Kong 自帶 Serverless Functions 等等的 Serverless 解決方案的支持,你可以把你的 APIGW 部署在邊緣節點上,具備了這種 FaaS 的功能,你的邊緣節點就會更加地靈活,
Lua Nginx Module

- init_by_lua*:發生在 Nginx Master 行程啟動階段,這里會對資料訪問層進行初始化,加載插件的代碼,構造路由規則表,
- init_worker_by_lua*:發生在 Nginx Worker 行程啟動階段,這里會開啟資料同步機制,執行每個插件的 init_worker 方法,
- set_by_lua*:處理請求的第一個執行階段,這里可以做一些流程分支處理判斷變數初始化,Kong 并沒有使用該階段,
- rewrite_by_lua*:這里可以對請求做一些修改,Kong 在這里會把處理代理給插件的 rewrite 方法,
- access_by_lua*:Kong 在這里對請求進行路由匹配,找到 Upstream 的 Backend Real Server,
- balancer_by_lua*:Kong 在這里會把上一階段找到的 Backend Real Server 設定給 Nginx 的 Load Balancer,如果設定了重試次數,此階段可能會被執行多次,
- header_filter_by_lua*:這里可以對回應頭做一些處理,Kong 在這里會把處理代理給插件的 header_filter 方法,
- body_filter_by_lua*:這里可以對回應體做一些處理,Kong 在這里會把處理代理給插件的 body_filter 方法,
- log_by_lua*:Kong 在這里會通過插件異步記錄日志和一些 metrics 資料,
零信任網關
近兩年安全領域里很火的概念就是零信任(Zero Trust),在傳統的安全領域里面,我們認為邊界防護非常重要,所以會用防火墻對進來的流量做一層校驗,這個校驗其實是命中規則的校驗,如果是黑的就把它拒絕掉,那么這個時候就會有一個問題:如果一些規則更新不及時,它就可以穿越防火墻,以前的安全更多是基于邊界的防護,過了邊界內網是可以暢通無阻的,
但是零信任網關可以徹底解決這個問題,它認為所有的流量都是不安全的,以前的邊界防護是非黑即白,現在的零信任安全網關則是非白即黑,你不是白的,那么你就是黑的,所以它是完全基于身份來認證的,一個 API 的請求過來會到身份認證的服務器,第三方的身份認證廠商比如 Author0、OKTA 的身份認證服務器認證你的身份,身份認證過了,請求才可以通過,不然就直接拒絕掉,這是是安全領域的一個趨勢,
技術選型

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234834.html
標籤:其他
上一篇:一文帶你輕松掌握多種編程范式
