三、Kong Admin API
部署好 Kong 之后,則需要將我們自己的接口加入到 Kong 的中管理,Kong 提供了比較全面的RESTful API,每個(gè)版本會(huì)有所不同,詳細(xì)可以參考官網(wǎng):docs.konghq.com/2.0.x/admin… 。Kong 管理 API 的端口是 8001(8444),服務(wù)、路由、配置都是通過(guò)這個(gè)端口進(jìn)行管理,所以部署好之后頁(yè)面可以直接訪問(wèn) http://102.168.1.200:8001
這里我們先來(lái)了解一下如何使用 RESTful 管理接口來(lái)管理 Service (服務(wù))、Route(路由)。
-
添加一個(gè)Service
curl -i -X POST http://localhost:8001/services --data 'name=hello-service' --data 'url=http://localhost:9000/hello'
curl -i -X POST --url http://localhost:8001/services/ --data 'name=example-service' --data 'url=http://www.baidu.com/'
2.查詢Service
curl http://192.168.1.200:8001/services/hello-service
curl -i -X POST --url http://localhost:8001/services/example-service/routes --data 'hosts[]=example.com'
3.為 Service 添加一個(gè) Route
curl -i -X POST --url http://192.168.1.200:8001/services/hello-service/routes --data 'paths[]=/hello' --data name=hello-route
4.測(cè)試
我們可以通過(guò)訪問(wèn) http://192.168.1.200:8000/hello 來(lái)驗(yàn)證一下配置是否正確。
Kong代理:
url http://192.168.1.200:8000/hello
Hello world !
真實(shí)服務(wù): http://192.168.1.200:9000/hello/
前面的操作就等效于配置 nginx.conf:
server {
listen 8000;
location /hello {
proxy_pass http://192.168.1.200:9000/hello;
}
}
不過(guò),前面的配置操作都是動(dòng)態(tài)的,無(wú)需像 Nginx一樣需要重啟。
Service是抽象層面的服務(wù),它可以直接映射到一個(gè)物理服務(wù),也可以指向一個(gè)Upstream(同Nginx中的Upstream,是對(duì)上游服務(wù)器的抽象)。Route是路由的抽象,它負(fù)責(zé)將實(shí)際的請(qǐng)求映射到 Service。除了Serivce、Route之外,還有 Tag、Consumer、Plugin、Certificate、SNI、Upstream、Target等,讀者可以從 官網(wǎng)的介紹文檔 中了解全貌。
下面在演示一個(gè)例子,修改 Service,將其映射到一個(gè) Upstream:
添加 name為 hello-upstream 的 Upstream
curl -i -X POST http://192.168.1.200:8001/upstreams --data name=hello-upstream
為 mock-upstream 添加 Target,Target 代表了一個(gè)物理服務(wù)(IP地址/hostname + port的抽象),一個(gè)Upstream可以包含多個(gè)Targets
curl -i -X POST http://192.168.1.200:8001/upstreams/hello-upstream/targets --data target="192.168.1.200:9000"
修改 hello-service,為其配置
curl -i -X PATCH http://192.168.1.200:8001/services/hello-service --data url='http://hello-upstream/hello'
上面的配置等同于 Nginx 中的nginx.conf配置 :
upstream hello-upstream{
server 192.168.1.200:8001;
}
server {
listen 8000;
location /hello {
proxy_pass http://hello-upstream/hello;
}
}
這里的配置我們也可以通過(guò)管理界面來(lái)操作。上面操作完之后,在Konga中也有相關(guān)信息展示出來(lái):
四、Kong Plugins
Kong通過(guò)插件Plugins實(shí)現(xiàn)日志記錄、安全檢測(cè)、性能監(jiān)控和負(fù)載均衡等功能。下面我將演示一個(gè)例子,通過(guò)啟動(dòng) apikey 實(shí)現(xiàn)簡(jiǎn)單網(wǎng)關(guān)安全檢驗(yàn)。
-
配置 key-auth 插件
curl -i -X POST http://192.168.1.200:8001/routes/hello-route/plugins --data name=key-aut
這個(gè)插件接收 config.key_names 定義參數(shù),默認(rèn)參數(shù)名稱(chēng) ['apikey']。在 HTTP 請(qǐng)求中 header 和 params 參數(shù)中包含 apikey 參數(shù),參數(shù)值必須 apikey 密鑰,Kong 網(wǎng)關(guān)將堅(jiān)持密鑰驗(yàn)證通過(guò)才可以訪問(wèn)后續(xù)服務(wù)。
此時(shí)我們使用 curl -i http://192.168.1.200:8000/hello/ 來(lái)驗(yàn)證一下是否生效,如果如下所示,訪問(wèn)失?。℉TTP/1.1 401 Unauthorized,"No API key found in request" ),說(shuō)明 Kong 安全機(jī)制生效了。
在 Konga 中我們也可以看到相關(guān)記錄:
2.為Service添加服務(wù)消費(fèi)者(Consumer)
定義消費(fèi)者訪問(wèn) API Key, 讓他擁有訪問(wèn) hello-service 的權(quán)限。
創(chuàng)建消費(fèi)者 Hidden:
curl -i -X POST http://192.168.1.200:8001/consumers/ --data username=Hidden
創(chuàng)建成功之后,返回:
{"custom_id":null,"created_at":1678268549,"id":"e097fc26-ccd0-4fa7-b370-f6eec4797d5f","tags":null,"username":"Hidden"}
之后為消費(fèi)者 Hidden 創(chuàng)建一個(gè) api key,輸入如下命令:
curl -i -X POST http://192.168.1.200:8001/consumers/Hidden/key-auth/ --data key=123456
{"created_at":1678268632,"consumer":{"id":"e097fc26-ccd0-4fa7-b370-f6eec4797d5f"},"id":"d560969d-ff8b-4204-a09f-3474217a4a29","tags":null,"ttl":null,"key":"123456"}
現(xiàn)在我們?cè)賮?lái)驗(yàn)證一下 http://192.168.1.200:8000/hello:
curl -i http://192.168.1.200:8000/hello/ --header "apikey:123456"
返回:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 14
Connection: keep-alive
Date: Tue, 18 Oct 2022 01:32:30 GMT
Server: WSGIServer/0.1 Python/2.7.5
X-Frame-Options: SAMEORIGIN
X-Kong-Upstream-Latency: 13
X-Kong-Proxy-Latency: 19
Via: kong/1.5.1
Hello world !
其他的插件可選
或者進(jìn)入插件倉(cāng)庫(kù)去了解
https://docs.konghq.com/hub/
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(訪問(wèn)控制)、CORS(跨域資源共享)、動(dòng)態(tài) SSL、IP 限制、爬蟲(chóng)檢測(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 等。
五、總結(jié)
Kong 作為 API 網(wǎng)關(guān)提供了 API 管理功能及圍繞 API 管理實(shí)現(xiàn)了一些默認(rèn)的插件,另外還具備集群水平擴(kuò)展能力,從而提升整體吞吐量。Kong 本身是基于 OpenResty,可以在現(xiàn)有 Kong 的基礎(chǔ)上進(jìn)行一些擴(kuò)展,從而實(shí)現(xiàn)更復(fù)雜的特性。雖然有一些特性 Kong 默認(rèn)是缺失的,如 API 級(jí)別的超時(shí)、重試、fallback 策略、緩存、API 聚合、AB 測(cè)試等,這些功能插件需要企業(yè)開(kāi)發(fā)人員通過(guò) Lua 語(yǔ)言進(jìn)行定制和擴(kuò)展。綜上所述,Kong API 網(wǎng)關(guān)默認(rèn)提供的插件比較豐富, 適應(yīng)針對(duì)企業(yè)級(jí)的 API 網(wǎng)關(guān)定位。
-
網(wǎng)關(guān)
+關(guān)注
關(guān)注
9文章
4083瀏覽量
50562 -
API
+關(guān)注
關(guān)注
2文章
1461瀏覽量
61488 -
nginx
+關(guān)注
關(guān)注
0文章
139瀏覽量
12113 -
go語(yǔ)言
+關(guān)注
關(guān)注
1文章
156瀏覽量
8996
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論