1.kong簡(jiǎn)介
Kong是一款基于OpenResty(Nginx + Lua模塊)編寫的高可用、易擴(kuò)展的,由Mashape公司開源的API Gateway項(xiàng)目。Kong是基于NGINX和Apache Cassandra或PostgreSQL構(gòu)建的,能提供易于使用的RESTful API來操作和配置API管理系統(tǒng),所以它可以水平擴(kuò)展多個(gè)Kong服務(wù)器,通過前置的負(fù)載均衡配置把請(qǐng)求均勻地分發(fā)到各個(gè)Server,來應(yīng)對(duì)大批量的網(wǎng)絡(luò)請(qǐng)求。

2. kong組件
- Kong Server :基于nginx的服務(wù)器,用來接收API請(qǐng)求。
- Apache Cassandra/PostgreSQL :用來存儲(chǔ)操作數(shù)據(jù)。
- Kong dashboard:官方推薦UI管理工具,當(dāng)然,也可以使用 restfull 方式 管理admin api。
3.kong網(wǎng)關(guān)特性
可擴(kuò)展性: 通過簡(jiǎn)單地添加更多的服務(wù)器,可以輕松地進(jìn)行橫向擴(kuò)展,這意味著您的平臺(tái)可以在一個(gè)較低負(fù)載的情況下處理任何請(qǐng)求;
模塊化: 可以通過添加新的插件進(jìn)行擴(kuò)展,這些插件可以通過RESTful Admin API輕松配置;
-
在任何基礎(chǔ)架構(gòu)上運(yùn)行: Kong網(wǎng)關(guān)可以在任何地方都能運(yùn)行。您可以在云或內(nèi)部網(wǎng)絡(luò)環(huán)境中部署Kong,包括單個(gè)或多個(gè)數(shù)據(jù)中心設(shè)置,以及public,private 或invite-only APIs。
圖片.png Kong核心基于OpenResty構(gòu)建,實(shí)現(xiàn)了請(qǐng)求/響應(yīng)的Lua處理化;
Kong插件攔截請(qǐng)求/響應(yīng),如果接觸過Java Servlet,等價(jià)于攔截器,實(shí)現(xiàn)請(qǐng)求/響應(yīng)的AOP處理;
Kong Restful 管理API提供了API/API消費(fèi)者/插件的管理;
數(shù)據(jù)中心用于存儲(chǔ)Kong集群節(jié)點(diǎn)信息、API、消費(fèi)者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建議使用Cassandra;
Kong集群中的節(jié)點(diǎn)通過gossip協(xié)議自動(dòng)發(fā)現(xiàn)其他節(jié)點(diǎn),當(dāng)通過一個(gè)Kong節(jié)點(diǎn)的管理API進(jìn)行一些變更時(shí)也會(huì)通知其他節(jié)點(diǎn)。每個(gè)Kong節(jié)點(diǎn)的配置信息是會(huì)緩存的,如插件,那么當(dāng)在某一個(gè)Kong節(jié)點(diǎn)修改了插件配置時(shí),需要通知其他節(jié)點(diǎn)配置的變更。
4.kong網(wǎng)關(guān)插件
身份認(rèn)證插件:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication認(rèn)證實(shí)現(xiàn)。
安全控制插件:ACL(訪問控制)、CORS(跨域資源共享)、動(dòng)態(tài)SSL、IP限制、爬蟲檢測(cè)實(shí)現(xiàn)。
流量控制插件:請(qǐng)求限流(基于請(qǐng)求計(jì)數(shù)限流)、上游響應(yīng)限流(根據(jù)upstream響應(yīng)計(jì)數(shù)限流)、請(qǐng)求大小限制。限流支持本地、Redis和集群限流模式。
分析監(jiān)控插件:Galileo(記錄請(qǐng)求和響應(yīng)數(shù)據(jù),實(shí)現(xiàn)API分析)、Datadog(記錄API Metric如請(qǐng)求次數(shù)、請(qǐng)求大小、響應(yīng)狀態(tài)和延遲,可視化API Metric)、Runscope(記錄請(qǐng)求和響應(yīng)數(shù)據(jù),實(shí)現(xiàn)API性能測(cè)試和監(jiān)控)。
協(xié)議轉(zhuǎn)換插件:請(qǐng)求轉(zhuǎn)換(在轉(zhuǎn)發(fā)到upstream之前修改請(qǐng)求)、響應(yīng)轉(zhuǎn)換(在upstream響應(yīng)返回給客戶端之前修改響應(yīng))。
日志應(yīng)用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。
4.kong網(wǎng)關(guān)請(qǐng)求流程

當(dāng)Kong運(yùn)行時(shí),每個(gè)對(duì)API的請(qǐng)求將先被Kong命中,然后這個(gè)請(qǐng)求將會(huì)被代理轉(zhuǎn)發(fā)到最終的API接口。在請(qǐng)求(Requests)和響應(yīng)(Responses)之間,Kong將會(huì)執(zhí)行已經(jīng)事先安裝和配置好的任何插件,授權(quán)您的API訪問操作。Kong是每個(gè)API請(qǐng)求的入口點(diǎn)(Endpoint)。
