偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

網(wǎng)絡(luò) 通信技術(shù)
今天準(zhǔn)備介紹下開(kāi)源API網(wǎng)關(guān)Kong,在Gtihub搜索API網(wǎng)關(guān)類的開(kāi)源產(chǎn)品,可以看到Kong網(wǎng)關(guān)常年都是排第一的位置,而且當(dāng)前很多都有一定研發(fā)能力的企業(yè)在API網(wǎng)關(guān)產(chǎn)品選型的時(shí)候基本也會(huì)選擇Kong網(wǎng)關(guān),并基于Kong網(wǎng)關(guān)進(jìn)行二次開(kāi)發(fā)和定制。

今天準(zhǔn)備介紹下開(kāi)源API網(wǎng)關(guān)Kong,在Gtihub搜索API網(wǎng)關(guān)類的開(kāi)源產(chǎn)品,可以看到Kong網(wǎng)關(guān)常年都是排第一的位置,而且當(dāng)前很多都有一定研發(fā)能力的企業(yè)在API網(wǎng)關(guān)產(chǎn)品選型的時(shí)候基本也會(huì)選擇Kong網(wǎng)關(guān),并基于Kong網(wǎng)關(guān)進(jìn)行二次開(kāi)發(fā)和定制。

API網(wǎng)關(guān)概述

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

簡(jiǎn)單來(lái)說(shuō)API網(wǎng)關(guān)就是將所有的微服務(wù)提供的API接口服務(wù)能力全部匯聚進(jìn)來(lái),統(tǒng)一接入進(jìn)行管理,也正是通過(guò)統(tǒng)一攔截,就可以通過(guò)網(wǎng)關(guān)實(shí)現(xiàn)對(duì)API接口的安全,日志,限流熔斷等共性需求。如果再簡(jiǎn)單說(shuō)下,通過(guò)網(wǎng)關(guān)實(shí)現(xiàn)了幾個(gè)關(guān)鍵能力。

  • 內(nèi)部的微服務(wù)對(duì)外部訪問(wèn)來(lái)說(shuō)位置透明,外部應(yīng)用只需和網(wǎng)關(guān)交互
  • 統(tǒng)一攔截接口服務(wù),實(shí)現(xiàn)安全,日志,限流熔斷等需求

從這里,我們就可以看到API網(wǎng)關(guān)和傳統(tǒng)架構(gòu)里面的ESB總線是類似的,這些關(guān)鍵能力本身也是ESB服務(wù)總線的能力,但是ESB服務(wù)總線由于要考慮遺留系統(tǒng)的接入,因此增加了:

  • 大量適配器實(shí)現(xiàn)對(duì)遺留系統(tǒng)的遺留接口適配,多協(xié)議轉(zhuǎn)換能力
  • 進(jìn)行數(shù)據(jù)的復(fù)制映射,路由等能力

對(duì)于兩者,我原來(lái)做過(guò)一個(gè)簡(jiǎn)單的對(duì)比,大家可以參考。

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

基于Openresty開(kāi)發(fā)API網(wǎng)關(guān)

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

在談API網(wǎng)關(guān)前,我們先談下Openresty。在前面文章談到過(guò),當(dāng)前適合用于API網(wǎng)關(guān)的架構(gòu),一種是基于Openresty的,一種是基于Go語(yǔ)言的。

OpenResty® 是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。

OpenResty® 通過(guò)匯聚各種設(shè)計(jì)精良的 Nginx 模塊(主要由 OpenResty 團(tuán)隊(duì)自主開(kāi)發(fā)),從而將 Nginx 有效地變成一個(gè)強(qiáng)大的通用系統(tǒng) Web 應(yīng)用平臺(tái)。這樣,Web 開(kāi)發(fā)人員和系統(tǒng)工程師可以使用 Lua 腳本語(yǔ)言調(diào)動(dòng) Nginx 支持的各種 C 以及 Lua 模塊,快速構(gòu)造出足以勝任 10K 乃至 1000K 以上單機(jī)并發(fā)連接的高性能 Web 應(yīng)用系統(tǒng)。

OpenResty® 的目標(biāo)是讓你的Web服務(wù)直接跑在 Nginx 服務(wù)內(nèi)部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對(duì) HTTP 客戶端請(qǐng)求,甚至于對(duì)遠(yuǎn)程后端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進(jìn)行一致的高性能響應(yīng)。

  • 為何Openresty適合用于API網(wǎng)關(guān)開(kāi)發(fā)?

對(duì)于API網(wǎng)關(guān),有一個(gè)最基礎(chǔ)的核心功能即需要實(shí)現(xiàn)接口服務(wù)代理路由,而這個(gè)本身也是Nginx反向代理能夠提供的一個(gè)標(biāo)準(zhǔn)功能。

如果應(yīng)用場(chǎng)景比較簡(jiǎn)單,僅僅是實(shí)現(xiàn)統(tǒng)一接口對(duì)外暴露,可以看到很多企業(yè)實(shí)際并沒(méi)有采用API網(wǎng)關(guān),而是直接采用了Nginx來(lái)替代API網(wǎng)關(guān)的服務(wù)代理路由功能。

其次,對(duì)于常規(guī)的API網(wǎng)關(guān)的中間件研發(fā),在研發(fā)完成后本身還要依托一個(gè)Web容器進(jìn)行部署,同時(shí)還需要自己去實(shí)現(xiàn)類似路由代理等各種能力。

在這種場(chǎng)景下可以看到,依托于Nginx,在其內(nèi)部來(lái)擴(kuò)展一個(gè)Web容器能力,既可以充分的利用Nginx本身的代理路由和性能優(yōu)勢(shì)就是一個(gè)重要的選擇。而OpenResty本身可以看做是基于Nginx服務(wù)器,在其worker里面內(nèi)嵌了一個(gè)LuaJVM,通過(guò)這種方式來(lái)實(shí)現(xiàn)了兩者的融合。同時(shí)又可以通過(guò)開(kāi)發(fā)和定制各種Lua庫(kù)來(lái)進(jìn)行快速的功能擴(kuò)展。

也正是這樣原因,基于Openresty來(lái)擴(kuò)展動(dòng)態(tài)網(wǎng)關(guān)功能是一個(gè)很好的選擇。

  • OpenResty的安裝

在Centos下可以通過(guò)yum很方便的安裝OpenResty,具體如下:

  1. //安裝yum-utils 
  2. # sudo yum install yum-utils 
  3. //添加 openresty 倉(cāng)庫(kù) 
  4. sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo 
  5. //安裝openresty 
  6. # sudo yum install openresty 
  7. //安裝命令行工具 
  8. # sudo yum install openresty-resty 
  9. //至此安裝成功,默認(rèn)安裝在  /usr/local/openresty 
  10. //測(cè)試 
  11. # sudo /sbin/service openresty start 
  12. # sudo /sbin/service openresty stop 

注意在安裝完成后如果通過(guò)瀏覽器訪問(wèn),需要先關(guān)閉防火墻或者打開(kāi)放行80端口。

Kong網(wǎng)關(guān)概述

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

首先我們看下GitHub上對(duì)Kong網(wǎng)關(guān)的一些介紹

當(dāng)我們決定對(duì)應(yīng)用進(jìn)行微服務(wù)改造時(shí),應(yīng)用客戶端如何與微服務(wù)交互的問(wèn)題也隨之而來(lái),畢竟服務(wù)數(shù)量的增加會(huì)直接導(dǎo)致部署授權(quán)、負(fù)載均衡、通信管理、分析和改變的難度增加。

面對(duì)以上問(wèn)題,API GATEWAY是一個(gè)不錯(cuò)的解決方案,其所提供的訪問(wèn)限制、安全、流量控制、分析監(jiān)控、日志、請(qǐng)求轉(zhuǎn)發(fā)、合成和協(xié)議轉(zhuǎn)換功能,可以解放開(kāi)發(fā)者去把精力集中在具體邏輯的代碼,而不是把時(shí)間花費(fèi)在考慮如何解決應(yīng)用和其他微服務(wù)鏈接的問(wèn)題上。

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

KONG本身提供包括HTTP基本認(rèn)證、密鑰認(rèn)證、CORS、TCP、UDP、文件日志、API請(qǐng)求限流、請(qǐng)求轉(zhuǎn)發(fā)及NGINX監(jiān)控等基本功能。目前,Kong在Mashape管理了超過(guò)15,000個(gè)API,為200,000開(kāi)發(fā)者提供了每月數(shù)十億的請(qǐng)求支持。

Kong網(wǎng)關(guān)核心組件

  • Kong Server :基于nginx的服務(wù)器,用來(lái)接收API請(qǐng)求。
  • Apache Cassandra/PostgreSQL :用來(lái)存儲(chǔ)操作數(shù)據(jù)。
  • Kong dashboard:官方推薦UI管理工具,也可以使用開(kāi)源的Konga平臺(tái)

Kong采用插件機(jī)制進(jìn)行功能定制,當(dāng)前本身已經(jīng)具備了類似安全,限流,日志,認(rèn)證,數(shù)據(jù)映射等基礎(chǔ)插件能力,同時(shí)也可以很方便的通過(guò)Lua定制自己的插件。插件完全是一種可以動(dòng)態(tài)插拔的模式,通過(guò)插件可以方便的實(shí)現(xiàn)Kong網(wǎng)關(guān)能力的擴(kuò)展。

Kong網(wǎng)關(guān)核心組件關(guān)鍵特性

  • Cloud-Native云原生:與平臺(tái)無(wú)關(guān),Kong可以在從裸機(jī)到容器的任何平臺(tái)上運(yùn)行,并且可以在每個(gè)云上本地運(yùn)行。
  • Kubernetes集成能力:使用官方的Ingress Controller通過(guò)本地Kubernetes CRD聲明性地配置Kong,以路由和連接所有L4 + L7層網(wǎng)絡(luò)流量。
  • 動(dòng)態(tài)負(fù)載均衡:在多個(gè)上游服務(wù)之間平衡流量。
  • 基于哈希的負(fù)載均衡:具有一致的哈希/粘性會(huì)話的負(fù)載均衡。
  • 斷路器:智能跟蹤不健康的上游服務(wù)。
  • 健康檢查:主動(dòng)和被動(dòng)監(jiān)視上游服務(wù)。
  • 服務(wù)發(fā)現(xiàn):在Consul之類的第三方DNS解析器中解析SRV記錄。
  • Serverless:直接從Kong調(diào)用和保護(hù)AWS Lambda或OpenWhisk功能。
  • WebSockets:通過(guò)WebSockets與您的上游服務(wù)進(jìn)行通信。
  • gRPC:與gRPC服務(wù)進(jìn)行通信,并通過(guò)日志記錄和可觀察性插件觀察流量
  • OAuth2.0:輕松將OAuth2.0身份驗(yàn)證添加到您的API。
  • 日志功能:通過(guò)HTTP,TCP,UDP或磁盤(pán)Log對(duì)系統(tǒng)的請(qǐng)求和響應(yīng)。
  • 安全性:ACL,僵尸程序檢測(cè),允許/拒絕IP等...
  • Syslog:登錄到系統(tǒng)日志。
  • SSL:為基礎(chǔ)服務(wù)或API設(shè)置特定的SSL證書(shū)。
  • 監(jiān)控:對(duì)關(guān)鍵負(fù)載和性能服務(wù)器指標(biāo)提供動(dòng)態(tài)實(shí)時(shí)監(jiān)控。
  • 轉(zhuǎn)發(fā)代理:使Kong連接到透明的中介HTTP代理。
  • 認(rèn)證:HMAC,JWT,Basic等。
  • 限流:基于許多變量的阻止和限制請(qǐng)求。
  • 轉(zhuǎn)換:添加,刪除或處理HTTP請(qǐng)求和響應(yīng)。
  • 緩存:在代理層緩存并提供響應(yīng)。
  • CLI:從命令行控制Kong群集。
  • 開(kāi)放API接口:Kong可以使用其RESTful API進(jìn)行操作,以實(shí)現(xiàn)最大的靈活性。
  • 跨區(qū)域復(fù)制:跨不同區(qū)域的配置始終是最新的。
  • 故障檢測(cè)和恢復(fù):如果您的Cassandra節(jié)點(diǎn)之一發(fā)生故障,則Kong不會(huì)受到影響。
  • 群集:所有Kong節(jié)點(diǎn)自動(dòng)加入群集,并在各個(gè)節(jié)點(diǎn)之間更新其配置。
  • 可擴(kuò)展性:Kong本質(zhì)上分布,只需添加節(jié)點(diǎn)即可水平擴(kuò)展。
  • 性能:Kong通過(guò)擴(kuò)展和使用NGINX作為核心輕松處理負(fù)載。
  • 插件:可擴(kuò)展的體系結(jié)構(gòu),用于向Kong和API添加功能。

Kong網(wǎng)關(guān)的主要功能分析

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

對(duì)于Kong網(wǎng)關(guān)本身基于OpenResty構(gòu)建,因此前面介紹的OpenResty本身的特性也就成了Kong網(wǎng)關(guān)的特性,同時(shí)Kong網(wǎng)關(guān)本身天然和OpenResty融合在一起,不再需要依賴其他的中間件或Web容器進(jìn)行部署。

其次就是Kong網(wǎng)關(guān)本身的插件化開(kāi)發(fā)機(jī)制,通過(guò)插件對(duì)Http接口請(qǐng)求和響應(yīng)進(jìn)行攔截,在攔截處就可以實(shí)現(xiàn)各種API接口管控和治理的要求。插件通過(guò)Lua語(yǔ)言開(kāi)發(fā),可以動(dòng)態(tài)插拔。

要實(shí)現(xiàn)和Kong網(wǎng)關(guān)本身的集成和管理本身也很簡(jiǎn)單,Kong網(wǎng)關(guān)提供各類的Rest API接口,可以很方便的實(shí)現(xiàn)和Kong網(wǎng)關(guān)能力的對(duì)接。也就是說(shuō)你完全可以自己開(kāi)發(fā)要給API管控治理平臺(tái),而底層引擎用Kong網(wǎng)關(guān)。

支持高可用集群,節(jié)點(diǎn)之間的發(fā)現(xiàn)采用的gossip協(xié)議,當(dāng)Kong節(jié)點(diǎn)啟動(dòng)后,會(huì)將自己的IP信息加入到node列表,廣播給任何其他的Kong節(jié)點(diǎn),當(dāng)另一個(gè)Kong節(jié)點(diǎn)啟動(dòng)后,會(huì)去讀取數(shù)據(jù)庫(kù)中的node列表,并將自己的信息加入到列表中。

另外再來(lái)看下Kong API網(wǎng)關(guān)提供的一些基本功能:

  • API注冊(cè)和服務(wù)代理

對(duì)于原始的API接口進(jìn)行注冊(cè),并提供服務(wù)代理能力,即不同的API接口注冊(cè)到網(wǎng)關(guān)后,網(wǎng)關(guān)可以提供一個(gè)統(tǒng)一的訪問(wèn)地址和接口。這和ESB總線的代理服務(wù)道理是一致的,在服務(wù)注冊(cè)到API網(wǎng)關(guān)后,所有的內(nèi)部服務(wù)對(duì)外界都是透明的,外部的服務(wù)訪問(wèn)必須要通過(guò)API網(wǎng)關(guān)進(jìn)行。

該部分對(duì)應(yīng)到Kong API網(wǎng)關(guān)的服務(wù)注冊(cè)和Routing部分的功能和能力上。

  • 負(fù)載均衡

由于Kong API網(wǎng)關(guān)本身底層也是基于Nginx的,因此對(duì)應(yīng)負(fù)載均衡的能力實(shí)際上是通過(guò)底層的Nginx來(lái)完成的。要在Kong上面實(shí)現(xiàn)負(fù)載均衡和API注冊(cè)代理實(shí)際上需要分開(kāi)為兩個(gè)步驟進(jìn)行。

即首先是要配置負(fù)載均衡能力,建立Upstream組,并添加多個(gè)Target,其次才是進(jìn)行API注冊(cè)。

  • AUTHENTICATION實(shí)現(xiàn)

通過(guò)OAuth 2.0 Authentication插件實(shí)現(xiàn)user端口的用戶訪問(wèn)限制。其具體步驟如下:

  • 注冊(cè)O(shè)auth2插件,配置參考
  • 添加Consumer及Consumer對(duì)應(yīng)的credentials
  • 申請(qǐng)accesstoken并訪問(wèn),如果不帶token訪問(wèn)將被拒絕

安全和訪問(wèn)控制

支持最基本的基于IP的安全訪問(wèn)控制和黑白名單設(shè)置。即為相應(yīng)的端口添加IP Restriction插件擴(kuò)展,并設(shè)置白名單(只有名單內(nèi)的IP可以訪問(wèn)API)。

這和我們當(dāng)前ESB的基于IP的訪問(wèn)控制和授權(quán)是一個(gè)道理。但是我們的ESB更加靈活,多了業(yè)務(wù)系統(tǒng)這一層,即可以直接對(duì)業(yè)務(wù)系統(tǒng)這層統(tǒng)一進(jìn)行授權(quán)。

如果沒(méi)有授權(quán),在進(jìn)行訪問(wèn)的時(shí)候?qū)⒎祷豗our IP address is not allowed的訪問(wèn)錯(cuò)誤。

  • 流量控制-Traffic Control

流量控制在當(dāng)前Kong網(wǎng)關(guān)上,從GitHub上的參考來(lái)看,主要是實(shí)現(xiàn)了可以基于單位時(shí)間內(nèi)的訪問(wèn)次數(shù)進(jìn)行流量控制,如果超過(guò)了這個(gè)訪問(wèn)次數(shù),則直接提示流控約束且無(wú)法訪問(wèn)的提示。當(dāng)前的流量控制,暫時(shí)不支持基于數(shù)據(jù)量的流控。

當(dāng)前的流控暫時(shí)沒(méi)有看到微服務(wù)網(wǎng)關(guān)常用的熔斷操作,即服務(wù)并發(fā)或服務(wù)響應(yīng)時(shí)間大過(guò)某個(gè)臨界值的時(shí)候,直接對(duì)服務(wù)進(jìn)行熔斷和下線操作。

  • 日志Logging實(shí)現(xiàn)

通過(guò)File-log插件實(shí)現(xiàn)對(duì)于每次訪問(wèn)日志的獲取,需要注意為日志文件寫(xiě)權(quán)限,日志格式參考Log Format。具體包括兩個(gè)步驟。

  • 為端口添加File-log插件,并設(shè)置為日志文件路徑設(shè)為:/tmp/file.log
  • 添加日志插件后,每次訪問(wèn)都會(huì)被記錄

當(dāng)前Kong網(wǎng)關(guān)日志都是寫(xiě)入到文件系統(tǒng)中,但是這塊可以很方便的定制日志插件將日志寫(xiě)入到緩存庫(kù),時(shí)序數(shù)據(jù)庫(kù)或分布式數(shù)據(jù)庫(kù)。另外當(dāng)前的日志LOGGING是沒(méi)有提供日志查詢的前端功能界面的,如果需要的話還需要自己開(kāi)發(fā)對(duì)應(yīng)的日志查詢功能。

這個(gè)日志功能和我們當(dāng)前的ESB總線的日志Log完全是類似的。但是我們ESB這塊的能力更加強(qiáng),包括后續(xù)的服務(wù)運(yùn)行日志的統(tǒng)計(jì)分析和報(bào)表查看等。

Kong網(wǎng)關(guān)插件說(shuō)明

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

從上圖可以看到,Kong網(wǎng)關(guān)是基于OpenResty應(yīng)用服務(wù)器,OpenResty是一個(gè)基于 Nginx 與 Lua 的高性能 Web 平臺(tái),其內(nèi)部集成了大量精良的 Lua 庫(kù)、第三方模塊以及大多數(shù)的依賴項(xiàng)。用于方便地搭建能夠處理超高并發(fā)、擴(kuò)展性極高的動(dòng)態(tài) Web 應(yīng)用、Web 服務(wù)和動(dòng)態(tài)網(wǎng)關(guān)。而Kong 核心基于OpenResty構(gòu)建,并且擁有強(qiáng)大的插件擴(kuò)展功能。

在Http請(qǐng)求到達(dá)Kong網(wǎng)關(guān)后,轉(zhuǎn)發(fā)給后端應(yīng)用之前,可以通過(guò)網(wǎng)關(guān)的各種插件對(duì)請(qǐng)求進(jìn)行流量控制,安全,日志等各方面的處理能力。當(dāng)前Kong的插件分為開(kāi)源版和社區(qū)版,社區(qū)版還有更多的定制功能,但是社區(qū)版是要收費(fèi)的。

目前,KONG開(kāi)源版本一共開(kāi)放28個(gè)插件,如下:

  • acl、aws-lambda、basic-auth、bot-detection、correlation-id、cors、datadog、file-log、galileo、hmac-auth、http-log、ip-restriction、jwt、key-auth、ldap-auth、loggly、oauth2、rate-limiting、request-size-limiting、request-termination、request-transformer、response-ratelimiting、response-transformer、runscope、statsd、syslog、tcp-log、udp-log。

以上這些插件主要分五大類,Authentication認(rèn)證,Security安全,Traffic Control流量控制,Analytics & Monitoring分析&監(jiān)控,Logging日志,其他還有請(qǐng)求報(bào)文處理類。插件類似AOP開(kāi)發(fā)中的橫切功能,可以靈活的配置進(jìn)行攔截控制,下面選擇一些關(guān)鍵性的插件進(jìn)行簡(jiǎn)單的說(shuō)明。

  • 黑白名單控制能力-ip-restriction

Kong提供的IP黑白名單控制能力還算相當(dāng)強(qiáng),從配置項(xiàng)里面可以看到主要可以針對(duì)兩個(gè)維度進(jìn)行配置,一個(gè)是針對(duì)所有的API接口還是針對(duì)特定的API接口,一個(gè)是針對(duì)所有的消費(fèi)方還是特定的某個(gè)消費(fèi)方。

對(duì)于IP配置可以是一個(gè)區(qū)段,也可以是特定的IP地址。但是黑白名單不能同時(shí)配置,其次當(dāng)前沒(méi)有一個(gè)功能是針對(duì)某一個(gè)系統(tǒng)提供的所有服務(wù)都啟用黑名單或白名單功能。

  • 日志記錄能力-syslog, file-log,http-log

這里主要日志的插件比較多,一個(gè)是sysLog在配置后可以直接將Kong產(chǎn)生的日志寫(xiě)入到應(yīng)用服務(wù)器的系統(tǒng)日志文件中。如果配置了file-log則是單獨(dú)寫(xiě)入到你指定的file文件中。對(duì)于http-log則是對(duì)于http服務(wù)請(qǐng)求,可以詳細(xì)的記錄請(qǐng)求的輸入和輸出報(bào)文信息,但是具體是記錄到哪里,需要通過(guò)config.http_endpoint配置。

如果需要將API接口調(diào)用消息報(bào)文日志寫(xiě)入到分布式存儲(chǔ)或數(shù)據(jù)庫(kù)中,則需要自己定義相應(yīng)的日志插件來(lái)接入寫(xiě)入問(wèn)題。

  • 熔斷插件-request-termination

該插件用來(lái)定義指定請(qǐng)求或服務(wù)不進(jìn)行上層服務(wù),而直接返回指定的內(nèi)容,用來(lái)為指定的請(qǐng)求或指定的服務(wù)進(jìn)行熔斷。注意Kong的熔斷插件感覺(jué)是臨時(shí)對(duì)服務(wù)的禁用,而不是說(shuō)當(dāng)達(dá)到某一種監(jiān)控閾值的時(shí)候自動(dòng)觸發(fā)熔斷。從官方文檔的應(yīng)用場(chǎng)景也可以看到這點(diǎn)。

如果僅僅是這種方式的熔斷話,實(shí)際上意義并不是很大。但是可用的地方就在于當(dāng)某個(gè)業(yè)務(wù)系統(tǒng)進(jìn)行發(fā)版部署的時(shí)候我們可以對(duì)該業(yè)務(wù)系統(tǒng)或該業(yè)務(wù)系統(tǒng)所提供的所有服務(wù)進(jìn)行熔斷。

  • 限流插件-rate-limiting

Kong當(dāng)前提供的限流相對(duì)來(lái)說(shuō)還是比較弱,即主要是控制某一個(gè)API接口服務(wù)在單位時(shí)間內(nèi)最多只能夠調(diào)用多少次,如果超過(guò)這個(gè)次數(shù)那么網(wǎng)關(guān)就直接拒絕訪問(wèn)并返回錯(cuò)誤提示信息。而在前面我講限流和流量控制的時(shí)候經(jīng)常會(huì)說(shuō)到,就是限流實(shí)際上一個(gè)是根據(jù)服務(wù)調(diào)用次數(shù),一個(gè)是根據(jù)服務(wù)調(diào)用數(shù)據(jù)量,需要在這兩個(gè)方面進(jìn)行限流。而里面更加重要的反而是數(shù)據(jù)量的限流,因?yàn)榇髷?shù)據(jù)量報(bào)文往往更加容易造成內(nèi)存溢出異常。

  • 安全認(rèn)證類插件

當(dāng)前Kong網(wǎng)關(guān)提供basic-auth,key-auth、ldap-auth,hmac-auth多種認(rèn)證插件。

Basic-auth基本認(rèn)證插件,即我們根據(jù)用戶名和密碼來(lái)生成一個(gè)base64編碼,同時(shí)將該編碼和目標(biāo)服務(wù)綁定,這樣在消費(fèi)目標(biāo)服務(wù)的時(shí)候就需要在報(bào)文頭填寫(xiě)這個(gè)Base64編碼信息。

Key-auth認(rèn)證插件則是利用提前預(yù)設(shè)好的關(guān)鍵字名稱,如下面設(shè)置的keynote = apices,然后為consumer設(shè)置一個(gè)key-auth 密鑰,假如key-auth=test@keyauth。在請(qǐng)求api的時(shí)候,將apikey=test@keyauth,作為一個(gè)參數(shù)附加到請(qǐng)求url后,或者放置到headers中。

Hmac-auth插件是設(shè)置綁定的service和rout,以啟動(dòng)hmac驗(yàn)證。然后在Consumers頁(yè)面中Hmac credentials of Consumer設(shè)置中添加一個(gè)username和secret。

  • 請(qǐng)求報(bào)文容量限制-request-size-limiting

該插件用于限制請(qǐng)求報(bào)文的數(shù)據(jù)量大小,可以限制單個(gè)服務(wù),也可以顯示所有的API接口服務(wù)。這個(gè)實(shí)際上是很有用的一個(gè)功能,可以防止大消息報(bào)文調(diào)用導(dǎo)致整個(gè)API網(wǎng)關(guān)內(nèi)存溢出。

  • 支持OAuth2.0身份認(rèn)證-oauth2

Kong網(wǎng)關(guān)支持OAuth2.0身份認(rèn)證,OAuth2.0 協(xié)議根據(jù)使用不同的適用場(chǎng)景,定義了用于四種授權(quán)模式。即Authorization code(授權(quán)碼模式),Implicit Grant(隱式模式),Resource Owner Password Credentials(密碼模式),Client Credentials(客戶端模式)。

在四種方式中經(jīng)常采用的還是授權(quán)碼這種標(biāo)準(zhǔn)的 Server 授權(quán)模式,非常適合 Server 端的 Web 應(yīng)用。一旦資源的擁有者授權(quán)訪問(wèn)他們的數(shù)據(jù)之后,他們將會(huì)被重定向到 Web 應(yīng)用并在 URL 的查詢參數(shù)中附帶一個(gè)授權(quán)碼(code)。

在客戶端里, code 用于請(qǐng)求訪問(wèn)令牌(access_token)。并且該令牌交換的過(guò)程是兩個(gè)服務(wù)端之前完成的,防止其他人甚至是資源擁有者本人得到該令牌。另外,在該授權(quán)模式下可以通過(guò) refresh_token 來(lái)刷新令牌以延長(zhǎng)訪問(wèn)授權(quán)時(shí)間,也是最為復(fù)雜的一種方式。

  • 簡(jiǎn)單轉(zhuǎn)換能力

對(duì)于簡(jiǎn)單轉(zhuǎn)換能力通過(guò)request-transformer 和 response transformer兩個(gè)插件來(lái)完成。Kong網(wǎng)關(guān)提供對(duì)輸入和輸出報(bào)文簡(jiǎn)單轉(zhuǎn)換的能力,這部分內(nèi)容后續(xù)再詳細(xì)展開(kāi)介紹。從當(dāng)前配置來(lái)看,主要是對(duì)消息報(bào)文提供了Add, Replace,Rename,Append等各種簡(jiǎn)單操作能力。

  • Kong網(wǎng)關(guān)和其它網(wǎng)關(guān)對(duì)比

對(duì)于開(kāi)源的Kong網(wǎng)關(guān)和其它網(wǎng)關(guān)的對(duì)比如下。

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

從上面對(duì)比圖也可以看到,Kong網(wǎng)關(guān)在功能,性能,插件可擴(kuò)展性各方面都能夠更好的滿足企業(yè)API網(wǎng)關(guān)的需求。因此我們也是基于Konga來(lái)進(jìn)一步定制對(duì)Kong網(wǎng)關(guān)的管控治理平臺(tái)。

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

在整個(gè)定制中增加了基于DB適配的Http Rest API接口的自動(dòng)發(fā)布,API服務(wù)自動(dòng)化注冊(cè),服務(wù)日志采集和服務(wù)日志查詢,常見(jiàn)映射模板定制,接口服務(wù)的自動(dòng)化測(cè)試等方面的能力。

Kong網(wǎng)關(guān)的安裝

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

在這里以在Centos7下安裝Kong2.2版本說(shuō)明。注意centos7安裝Postgresql不再列出,可以參考網(wǎng)上的文章進(jìn)行安裝。

  1. # 安裝kong-yum源 
  2. $wget https://bintray.com/kong/kong-rpm/rpm -O bintray-kong-kong-rpm.repo 
  3. $export major_version=`grep -oE '[0-9]+\.[0-9]+' /etc/redhat-release | cut -d "." -f1` 
  4. $sed -i -e 's/baseurl.*/&\/centos\/'$major_version''/ bintray-kong-kong-rpm.repo 
  5. $mv bintray-kong-kong-rpm.repo /etc/yum.repos.d/ 
  6.    
  7. # 清空緩存,重新生成緩存 
  8. $yum clean all && yum makecache 
  9. # 查看yum源信息 
  10. $yum repolist 
  11. # 更新yum源 
  12. $yum update -y 
  13.  
  14. ############################# 
  15. #通過(guò)yum安裝kong 
  16. #注意如果出現(xiàn)和openresty不兼容,需要先下載老版本的openresty 
  17. $yum install -y kong 
  18. # 查看配置文件位置 
  19. $whereis kong 
  20. $kong: /etc/kong /usr/local/bin/kong /usr/local/kong 
  21.  
  22. ############################# 
  23. #安裝postgresql數(shù)據(jù)庫(kù)(略) 
  24. ############################# 
  25.  
  26. #數(shù)據(jù)庫(kù)創(chuàng)建kong用戶 
  27. $su - postgres 
  28. $psql -U postgres 
  29.  CREATE USER kong;  
  30.  CREATE DATABASE kong OWNER kong; 
  31.  ALTER USER kong with encrypted password 'kong';   
  32. #修改kong,postgresql連接配置 
  33. $cp -r /etc/kong/kong.conf.default /etc/kong/kong.conf 
  34. $vi /etc/kong/kong.conf 
  35.     database = postgres 
  36.     pg_host = 172.28.102.62 
  37.     pg_port = 5432 
  38.     pg_timeout = 5000 
  39.     pg_user = kong 
  40.     pg_password = kong 
  41.     pg_database = kong 
  42.      
  43. # 初始化數(shù)據(jù)庫(kù) 
  44. $kong migrations bootstrap [-c /etc/kong/kong.conf] 
  45. 注意執(zhí)行過(guò)程如遇到 failed to retrieve PostgreSQL server_version_num: FATAL: Ident authentication failed for user "kong",請(qǐng)給該用戶設(shè)定密碼,并修改postgres的授權(quán)方式為MD5,操作如下: 
  46. $alter user kong with password  'kong'
  47. # 啟動(dòng)kong 
  48. $kong start [-c /etc/to/kong.conf] 
  49. #檢查 KONG 是否正確運(yùn)行 
  50. $curl -i http://localhost:8001/ 
  51. 或者 
  52. $kong health 
  53. #停止 KONG 
  54. $ kong stop 

Kong-Dashboard安裝

對(duì)于Kong網(wǎng)關(guān)本身也提供了Kong Dashboard管理頁(yè)面,下面再看下Dashboard的安裝。在安裝Dashboard前需要首先安裝node.js,具體如下:

  1. #解壓安裝包 
  2. $wget http://nodejs.org/dist/v8.1.0/node-v8.1.0.tar.gz  
  3. $tar zxvf node-v8.1.0.tar.gz  
  4. $cd node-v8.1.0 
  5.  
  6. #進(jìn)行編譯和安裝(注意編譯需要很長(zhǎng)時(shí)間) 
  7. $./configure –prefix=/usr/local/node/* 
  8. $make 
  9. $make install 
  10.  
  11. ln -s /usr/local/node/bin/* /usr/sbin/   
  12.  
  13. #npm 配置 
  14. npm set prefix /usr/local 
  15. echo -e '\nexport PATH=/usr/local/lib/node_modules:$PATH' >> ~/.bashrc 
  16. source ~/.bashrc 

在node.js安裝完成后可以安裝Dashboard

  1. #從git庫(kù)克隆 
  2. git clone https://github.com/PGBI/kong-dashboard 
  3.  
  4. #安裝Kong Dashboard: 
  5. npm install -g kong-dashboard@v2 
  6.  
  7. #啟動(dòng)kong-dashboard,注意和老版本有變化 
  8. #啟動(dòng)時(shí)候可以自己指定端口號(hào)如9001 
  9. kong-dashboard start -p 9001 
  10.  
  11. #訪問(wèn)kong-dashboard 
  12. http://localhost:9001 

在啟動(dòng)后再配置Dashboard需要綁定的Kong Server,如下:

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

訪問(wèn)Dashboard界面如下:

 

開(kāi)源API網(wǎng)關(guān)Kong基本介紹和安裝驗(yàn)證

可以看到Dashboard2.0版本的界面已經(jīng)和V1版本有了較大的變化,在Dashboard上可以實(shí)現(xiàn)最近的API接口注冊(cè)接入,路由,安全管理,限流熔斷配置的。由于本身還有另外一個(gè)開(kāi)源的kong網(wǎng)關(guān)管理平臺(tái)Konga,因此后續(xù)準(zhǔn)備基于Konga來(lái)對(duì)網(wǎng)關(guān)的關(guān)鍵功能進(jìn)一步做說(shuō)明和介紹。

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2015-05-08 17:24:41

APIAPI網(wǎng)關(guān)Kong

2017-02-27 14:09:45

HTTPAPI網(wǎng)關(guān)Kong

2023-06-26 18:13:56

開(kāi)源API

2021-07-26 08:12:31

開(kāi)源API網(wǎng)關(guān)

2023-06-09 14:46:36

2022-01-17 10:55:50

微服務(wù)API網(wǎng)關(guān)

2020-07-28 08:32:57

微服務(wù)API網(wǎng)關(guān)熔斷

2020-04-29 14:33:49

微服務(wù)網(wǎng)關(guān)Kong

2019-04-02 14:20:14

微服務(wù)API網(wǎng)關(guān)

2023-06-26 10:51:56

開(kāi)源API

2010-04-16 11:42:55

無(wú)線網(wǎng)關(guān)配置

2023-09-07 10:56:36

2020-07-07 07:54:01

API網(wǎng)關(guān)微服務(wù)

2025-08-26 07:47:17

SpringAPI防火墻

2012-02-13 23:29:52

lvslinux集群

2011-03-02 17:17:36

FireFTP安裝

2021-12-02 18:18:21

消費(fèi)網(wǎng)關(guān)工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)

2021-11-23 06:02:20

APIOpenResty網(wǎng)關(guān)

2024-09-03 13:59:37

2019-07-02 14:17:18

API網(wǎng)關(guān)網(wǎng)關(guān)流量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)