天天看點

API網關之Kong網關簡介

API網關之Kong網關簡介

那麼,kong是一個什麼東東呢?它是一個開源的api網關,或者你可以認為它是一個針對api的一個管理工具。你可以在那些上遊service之上,額外去實作一些功能。kong是開源的,是以你可以在github找到它,你現在就可以下載下傳使用。

kong是一款基于openresty(nginx + lua子產品)編寫的高可用、易擴充的,由mashape公司開源的api gateway項目。kong是基于nginx和apache cassandra或postgresql建構的,能提供易于使用的restful api來操作和配置api管理系統,是以它可以水準擴充多個kong伺服器,通過前置的負載均衡配置把請求均勻地分發到各個server,來應對大批量的網絡請求。

API網關之Kong網關簡介

kong主要有三個元件:

kong server :基于nginx的伺服器,用來接收api請求。

apache cassandra/postgresql :用來存儲操作資料。

kong dashboard:官方推薦ui管理工具,當然,也可以使用 restfull 方式 管理admin api。

kong采用插件機制進行功能定制,插件集(可以是0或n個)在api請求響應循環的生命周期中被執行。插件使用lua編寫,目前已有幾個基礎功能:http基本認證、密鑰認證、cors(cross-origin resource sharing,跨域資源共享)、tcp、udp、檔案日志、api請求限流、請求轉發以及nginx監控。

kong網關具有以下的特性:

可擴充性: 通過簡單地添加更多的伺服器,可以輕松地進行橫向擴充,這意味着您的平台可以在一個較低負載的情況下處理任何請求;

子產品化: 可以通過添加新的插件進行擴充,這些插件可以通過restful admin api輕松配置;

在任何基礎架構上運作: kong網關可以在任何地方都能運作。您可以在雲或内部網絡環境中部署kong,包括單個或多個資料中心設定,以及public,private 或invite-only apis。

API網關之Kong網關簡介

kong核心基于openresty建構,實作了請求/響應的lua處理化;

kong插件攔截請求/響應,如果接觸過java servlet,等價于攔截器,實作請求/響應的aop處理;

kong restful 管理api提供了api/api消費者/插件的管理;

資料中心用于存儲kong叢集節點資訊、api、消費者、插件等資訊,目前提供了postgresql和cassandra支援,如果需要高可用建議使用cassandra;

kong叢集中的節點通過gossip協定自動發現其他節點,當通過一個kong節點的管理api進行一些變更時也會通知其他節點。每個kong節點的配置資訊是會緩存的,如插件,那麼當在某一個kong節點修改了插件配置時,需要通知其他節點配置的變更。

身份認證插件:kong提供了basic authentication、key authentication、oauth2.0 authentication、hmac authentication、jwt、ldap authentication認證實作。

安全控制插件:acl(通路控制)、cors(跨域資源共享)、動态ssl、ip限制、爬蟲檢測實作。

流量控制插件:請求限流(基于請求計數限流)、上遊響應限流(根據upstream響應計數限流)、請求大小限制。限流支援本地、redis和叢集限流模式。

分析監控插件:galileo(記錄請求和響應資料,實作api分析)、datadog(記錄api metric如請求次數、請求大小、響應狀态和延遲,可視化api metric)、runscope(記錄請求和響應資料,實作api性能測試和監控)。

協定轉換插件:請求轉換(在轉發到upstream之前修改請求)、響應轉換(在upstream響應傳回給用戶端之前修改響應)。

日志應用插件:tcp、udp、http、file、syslog、statsd、loggly等。

為了更好地了解系統,這是使用kong網關的api接口的典型請求工作流程:

API網關之Kong網關簡介

當kong運作時,每個對api的請求将先被kong命中,然後這個請求将會被代理轉發到最終的api接口。在請求(requests)和響應(responses)之間,kong将會執行已經事先安裝和配置好的任何插件,授權您的api通路操作。kong是每個api請求的入口點(endpoint)。

API網關之Kong網關簡介

api 網關可以通過實作一些中間件來解決一些問題,這些中間件的功能你就不用再到每個service中實作了。你也是知道的,不同的團隊使用不同的方式來實作了不同的微服務。

如果你不去做一些中心化和抽象化的事情,你将會死于不同的認證方式以及不同的速率限制實作,五花八門。你肯定希望避免這樣的糟糕局面。

api網關不僅可以幫你解決api的管理部分,而且還可以解決下面兩件事情:

分析(analytics) – api網關可以和你的分析基礎設施保持透明的互動和通信,因為api網關是每個請求(request)的入口,必經地。api網關可以看到所有的資料,可以知道經過你的service的流量。這就相當于你有一個集中的地方,你可以把所有的這些資訊push到你的監控或分析工具,比如kibana或者splunk。

自動化(automation) –網關還有助于自動化部署,還可以幫助你實作自動化登入驗證(on boarding)。 什麼是登入(on boarding)呢? 如果你有api,并且你希望有身份驗證,你可能需要一些功能可以允許使用者為該api建立登入憑據(credentials)然後開始使用(消費)api。 開發人員門戶網站或你的文檔中心等都可以與網關內建來配置這些憑據(credentials),這樣你就不用從頭開始建構一些功能了。

kong作為api網關提供了api管理功能,及圍繞api管理實作了一些預設的插件,另外還具備叢集水準擴充能力,進而提升整體吞吐量。kong本身是基于openresty,可以在現有kong的基礎上進行一些擴充,進而實作更複雜的特性。

雖然有一些特性kong預設是缺失的,如api級别的逾時、重試、fallback政策、緩存、api聚合、ab測試等,這些功能插件需要企業開發人員通過lua語言進行定制和擴充。

綜上所述,kong api網關預設提供的插件比較豐富, 适應針對企業級的api網關定位。

繼續閱讀