0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

API 網(wǎng)關(guān)詳細(xì)介紹(下)

jf_78858299 ? 來(lái)源:Steve的后端小棧 ? 作者:?Steave? ? 2023-05-04 17:28 ? 次閱讀

三、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(路由)。

  1. 添加一個(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)。

  1. 配置 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)定位。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    4083

    瀏覽量

    50562
  • API
    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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    API信息全掌控,方便你的日志管理——阿里云推出API網(wǎng)關(guān)打通日志服務(wù)

    摘要: 近日,阿里云API網(wǎng)關(guān)對(duì)接了日志服務(wù),可以輸出用戶在API網(wǎng)關(guān)產(chǎn)生的API調(diào)用日志,目前支持將
    發(fā)表于 02-06 15:24

    哪位大神可以詳細(xì)介紹MQTT API嗎?

    MQTT API介紹
    發(fā)表于 04-02 07:24

    AI邊緣計(jì)算網(wǎng)關(guān)介紹

    AI邊緣計(jì)算網(wǎng)關(guān)介紹:智能網(wǎng)關(guān)支持物聯(lián)網(wǎng)硬件多協(xié)議接入,適應(yīng)各種無(wú)線通信協(xié)議場(chǎng)景。只需通過(guò)硬件板卡的快速裝卸,就可以實(shí)現(xiàn)功能的自由增刪。同時(shí)智能網(wǎng)關(guān)運(yùn)行Mosquitto等服務(wù)實(shí)現(xiàn)了M
    發(fā)表于 07-26 06:41

    介紹ZigBee網(wǎng)關(guān)的架構(gòu)

    前面的文章中,我們通過(guò)實(shí)際案例介紹了 ZigBee 網(wǎng)關(guān)的架構(gòu),相信大家對(duì)于網(wǎng)關(guān)該如何挑選合適的器件來(lái)實(shí)現(xiàn)相應(yīng)功能有了一定了解。那么本文將從硬件設(shè)計(jì)的角度來(lái)繼續(xù)網(wǎng)關(guān)的話題!硬件電路是
    發(fā)表于 11-11 08:18

    介紹LoRaWAN網(wǎng)關(guān)的技術(shù)基礎(chǔ)及其工作原理

    /軟件組件四、總結(jié)在上一篇文章中我大概解釋了什么是LoRaWAN網(wǎng)關(guān)。今天我將會(huì)更詳細(xì)地給大家介紹LoRaWAN網(wǎng)關(guān)的技術(shù)基礎(chǔ)及其工作原理。只有了解這些,我們才能讓我們更好地了解
    發(fā)表于 02-14 07:45

    基于Python的商標(biāo)信息查詢api調(diào)用代碼實(shí)例的詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是基于Python的商標(biāo)信息查詢api調(diào)用代碼實(shí)例的詳細(xì)資料免費(fèi)下載。
    發(fā)表于 09-06 15:00 ?12次下載
    基于Python的商標(biāo)信息查詢<b class='flag-5'>api</b>調(diào)用代碼實(shí)例的<b class='flag-5'>詳細(xì)</b>資料免費(fèi)下載

    ESP8266 Node MCU-API 函數(shù)的詳細(xì)中文說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是ESP8266的Node MCU-API 函數(shù)的詳細(xì)中文說(shuō)明。
    發(fā)表于 09-21 08:00 ?102次下載

    什么是API網(wǎng)關(guān)為什么需要API網(wǎng)關(guān)

    API網(wǎng)關(guān)可以看做系統(tǒng)與外界聯(lián)通的入口,我們可以在網(wǎng)關(guān)進(jìn)行處理一些非業(yè)務(wù)邏輯的邏輯,比如權(quán)限驗(yàn)證,監(jiān)控,緩存,請(qǐng)求路由等等。
    發(fā)表于 12-23 09:57 ?1.3w次閱讀
    什么是<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>為什么需要<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    ESP8266字符串API詳細(xì)概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是ESP8266字符串API詳細(xì)概述。
    發(fā)表于 07-17 08:00 ?1次下載
    ESP8266字符串<b class='flag-5'>API</b>的<b class='flag-5'>詳細(xì)</b>概述

    Service Mesh和API網(wǎng)關(guān)正在逐步融合

    API Gateway 之間的關(guān)系,這個(gè)問(wèn)題過(guò)去兩年間經(jīng)常被問(wèn)起,社區(qū)也有不少文章和資料給出解答。其中不乏 Christian Posta 這樣的網(wǎng)紅給出過(guò)深度介紹。我在這里做一個(gè)資料的整理和匯總,結(jié)合
    的頭像 發(fā)表于 10-10 16:39 ?1096次閱讀

    關(guān)于API網(wǎng)關(guān)策略的知識(shí)分享

    近些年隨著云原生和微服務(wù)架構(gòu)的日趨發(fā)展,API 網(wǎng)關(guān)以流量入口的角色在技術(shù)架構(gòu)中扮演著越來(lái)越重要的作用。API 網(wǎng)關(guān)主要負(fù)責(zé)接收所有請(qǐng)求的流量并進(jìn)行處理轉(zhuǎn)發(fā)至上游服務(wù),
    的頭像 發(fā)表于 02-11 10:45 ?1087次閱讀

    API 網(wǎng)關(guān)詳細(xì)介紹(上)

    業(yè)界有很多流行的 API 網(wǎng)關(guān),開(kāi)源的有 Nginx、Netflix Zuul、Kong 等。當(dāng)然 Kong 還有商業(yè)版,類(lèi)似的商業(yè)版網(wǎng)關(guān)還有 GoKu API Gateway 和 T
    的頭像 發(fā)表于 05-04 17:28 ?1419次閱讀
    <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b><b class='flag-5'>詳細(xì)</b><b class='flag-5'>介紹</b>(上)

    為什么需要 API 網(wǎng)關(guān)?

    API 網(wǎng)關(guān)API 全生命周期管理的關(guān)鍵基礎(chǔ)組件,負(fù)責(zé)生產(chǎn)環(huán)境中 API 的配置、發(fā)布、版本回滾、安全、負(fù)載均衡等。API
    的頭像 發(fā)表于 05-04 17:47 ?683次閱讀
    為什么需要 <b class='flag-5'>API</b> <b class='flag-5'>網(wǎng)關(guān)</b>?

    企業(yè)怎么選擇API網(wǎng)關(guān)

    、騰訊公司的QQ開(kāi)發(fā)平臺(tái)、微信開(kāi)放平臺(tái)。 Open API開(kāi)放平臺(tái)必然涉及到客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等,必然會(huì)有一個(gè)統(tǒng)一的入口進(jìn)行管理,這正是API網(wǎng)關(guān)可以發(fā)揮作
    的頭像 發(fā)表于 05-23 11:05 ?561次閱讀
    企業(yè)怎么選擇<b class='flag-5'>API</b><b class='flag-5'>網(wǎng)關(guān)</b>

    api網(wǎng)關(guān) kong 教程入門(mén)

    統(tǒng)一權(quán)限控制、接口請(qǐng)求訪問(wèn)日志統(tǒng)計(jì) 安全,是保護(hù)內(nèi)部服務(wù)而設(shè)計(jì)的一道屏障 開(kāi)源-最大好處 當(dāng)然也有一個(gè)很大的缺點(diǎn),api-gw很可能成為性能瓶頸,因?yàn)樗械恼?qǐng)求都經(jīng)過(guò)這里,可以通過(guò)橫向擴(kuò)展和限流解決這個(gè)問(wèn)題。 在眾多API GATEWAY框架中,Mashape開(kāi)源的高性
    的頭像 發(fā)表于 11-10 11:39 ?565次閱讀
    <b class='flag-5'>api</b><b class='flag-5'>網(wǎng)關(guān)</b> kong 教程入門(mén)