kong配置service和route實現簡單API代理



通過konga連接kong實現API接口代理

前言

之前已經對Kong的API做了學習理解,從本文開始,我們將學習如何使用KONG實現API接口代理。為此,您首先需要添加服務;即Kong用來指代其管理的上游API和微服務的名稱。

本文中,我們將創建一個指向Mockbin API的服務進行學習測試。

1. ADD NEW SERVICE

[SERVICE]:
抽象層面的服務,他可以直接映射到一個物理服務 (host 指向 ip + port),也可以指向一個 upstream 來做到負載均衡。通俗說,這個service就是后台訪問接口配置。

導航到SERVICES頁面並添加ADD NEW SERVICE

字段說明

Url參數是一個簡化參數,用於一次性添加protocol,host,port和path。另外不要把SERVICE當作后端的具體API,要把它當作一個大的服務,該服務下面有多個API(endpoint or route)。所以創建服務的時候填上該服務的域名就行了。當然也可以是一個帶pathUrl,這樣每個關聯的API (ROUTE)會路由到該path上。

屬性 描述
name(必填) 服務名稱.
tags(可選) 可選地向服務添加標記
url(可選) 將協議、主機、端口和路徑立即設置成簡短的屬性。這個屬性是只寫的(管理API從來不“返回”url)
protocol(必填) 該協議用於與upstream通信。它可以是http(默認)或https。
host(必填) upstream服務器的主機。
port(必填) upstream服務器端口。默認為80
path(可選) 在向upstream服務器請求中使用的路徑。默認為空。
retries(可選) 在代理失敗的情況下執行的重試次數。默認值是5。
connect_timeout(可選) 建立到upstream服務器的連接的超時時間。默認為60000。
write_timeout(可選) 將請求發送到upstream服務器的兩個連續寫操作之間的超時時間。默認為60000。
read_timeout(可選) 將請求發送到upstream服務器的兩個連續讀取操作之間的超時時間。默認為60000。

添加成功返回SERVICES界面,查看添加的Services信息,兩種查看方式:

2. ADD ROUTE

[ROUTE]:
路由的抽象,他負責將實際的 request 映射到 service

返回SERVICES界面,選擇example-service服務

選擇Routes,然后ADD ROUTE

字段說明:

屬性 描述
name(可選) 定義名稱
tags(可選) 向路由添加標記
protocols(可選) 這條路線應該允許的協議列表。默認情況下,它是“http”、“https”,這意味着路由接受這兩種方式。當設置為“HTTPS”時,HTTP請求會被請求升級到HTTPS。通過表單編碼,符號是協議=http&協議=https。使用JSON,使用數組。
methods(半可選) 與此路由相匹配的HTTP方法列表。例如: ["GET", "POST"].至少有一個主機、路徑或方法必須被設置。用表單編碼參數是methods[]=GET&methods[]=OPTIONS。使用JSON,使用數組。
hosts(半可選) 與此路徑匹配的域名列表。例如:example.com. 至少有一個主機、路徑或方法必須被設置。用表單編碼參數是 hosts[]=foo.com&hosts[]=bar.com。使用JSON,使用數組。
paths(半可選) 與此路徑相匹配的路徑列表。例如: /my-path.至少有一個主機、路徑或方法必須被設置。用表單編碼參數是 paths[]=/foo&paths[]=/bar. 使用JSON,使用數組。
Regex priority(可選) 當多個路由同時使用正則表達式匹配某個給定請求時,用來選擇哪個路由解析該請求的數字。當兩個路由匹配路徑並且具有相同的regex_優先級時,將使用較舊的路由(最低創建位置)。注意,非regex路由的優先級不同(較長的非regex路由在較短的路由之前匹配)。默認為0。
strip_path(可選) 當通過其中一條路徑匹配路由時,從上游upstream請求URL中去掉匹配前綴。默認值為true。
preserve_host(可選) 當通過一個主機域名匹配一條路由時,在upstream請求頭中使用請求主機頭。默認設置為false,upstream主機頭將是服務主機的主機頭。

添加成功返回SERVICES界面,點擊Routes,查看路由。
又或者,可以從左側ROUTES導航進入查看路由。

3. 驗證API 代理

瀏覽器驗證

Kong API需要通過Routes規則中配置的hosts or path對請求進行API調度控制。

由於我們Routes規則中配置的hosts是虛擬域名,因此,我們需要在本地及服務器hosts列表中添加dns解析,這樣在瀏覽器才可以攜帶host請求信息去正常訪問Kong API。

“WIN +R 輸入drivers”,調出hosts

10.122.45.97 test.example.com

請求kong api

$ curl -i -X GET \
  --url http://localhost:8000/request \
  --header 'Host: test.example.com'

kong使用Admin API實現接口代理

請參閱官方文檔

1. 使用Admin API添加Service

$ curl -i -X POST \
  --url http://localhost:8001/services/ \
  --data 'name=example-service-2' \
  --data 'url=http://mockbin.org'

2. 為Service添加Route

$ curl -i -X POST \
  --url http://localhost:8001/services/example-service-2/routes \
  --data 'name=test2-api-proxy' \
  --data 'hosts[]=test2.example.com' \
  --data 'paths[]=/request' \
  --data 'strip_path=false'

3. 驗證API 代理

我們先查看一下service對應的route信息

$ curl -i -X GET --url http://localhost:8001/services/example-service-2/routes
# 返回數據
{
  "updated_at": 1576119679,
  "created_at": 1576119679,
  "strip_path": false,
  "snis": null,
  "hosts": [
    "test2.example.com"
  ],
  "name": "test2-api-proxy",
  "methods": null,
  "sources": null,
  "preserve_host": false,
  "regex_priority": 0,
  "service": {
    "host": "mockbin.org",
    "created_at": 1576118600,
    "connect_timeout": 60000,
    "id": "23909fa2-04ae-4f45-ab33-184098dce8ac",
    "protocol": "http",
    "name": "example-service-2",
    "read_timeout": 60000,
    "port": 80,
    "path": null,
    "updated_at": 1576118600,
    "retries": 5,
    "write_timeout": 60000,
    "tags": null,
    "extras": {}
  },
  "paths": [
    "/request"
  ],
  "destinations": null,
  "id": "5906757c-a0c5-4a41-a1a5-723658bc93f1",
  "protocols": [
    "http",
    "https"
  ],
  "tags": null
}

驗證Admin API 代理結果:

$ curl -i -X GET \
  --url http://localhost:8000/request \
  --header 'Host: test2.example.com'

 
[sleepy↓]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM