API Gateway

更新於 發佈於 閱讀時間約 7 分鐘
API Gateway

API Gateway

API Gateway 是什麼?

參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點:

  1. 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。
  2. 安全性 - Internet 的使用者都無法直接存取 API Gateway 後面的 service,只能透過 API Gateway 間接存取。所以 service 可開放存取的 API 是有限的,降低惡意使用者攻擊的範圍。

API Gateway 的功能

具代表性的 API Gateway 有 HAProxy、NGINX、Kong、Traefik。我們也可以用自己熟悉的程式語言撰寫 API Gateway,比如用 Ocelot 撰寫。

https://github.com/ThreeMammals/Ocelot

這些 API Gateway 提供的功能都非常的接近,但是不同的 API Gateway 有廠商自己提供的特殊功能,而以下是常見的功能。

Load balancing

將負載適當的分攤到不同的 service 上,讓伺服器可以服務更多的使用者。

以 Traefik 為範例,以下設定是將 Request 送到不同的 serivce 上:

https://doc.traefik.io/traefik/routing/services/

## Dynamic configuration
http:
services:
my-service:
loadBalancer:
servers:
- url: "http://<private-ip-server-1>:<private-port-server-1>/"
- url: "http://<private-ip-server-2>:<private-port-server-2>/"

Authentication and Authorization

API Gateway 通常會有 Basic Authentication 的功能,Client 提供帳號、密碼才可以存取;甚至更進階的有提供 JWT Authentication,提供 JWT 才可以存取。

以下是 Traefik 設定 Basic Authentication,設定了兩位使用者(帳號、密碼分別是 test/test, test2/test2):

# Declaring the user list
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-auth
spec:
basicAuth:
secret: authsecret
---
# Note: in a kubernetes secret the string (e.g. generated by htpasswd) must be base64-encoded first.
# To create an encoded user:password pair, the following command can be used:
# htpasswd -nb user password | openssl base64
apiVersion: v1
kind: Secret
metadata:
name: authsecret
namespace: default
data:
users: |2
dGVzdDokYXByMSRINnVza2trVyRJZ1hMUDZld1RyU3VCa1RycUU4d2ovCnRlc3QyOiRhcHIxJGQ5
aHI5SEJCJDRIeHdnVWlyM0hQNEVzZ2dQL1FObzAK

request routing

API Gateway 收到 HTTP Request 後,可以根據 HTTP resource path 決定將 HTTP Request 送到內部網路的服務上,比如 https://www.company.com.tw/api/auth 將 HTTP Request 送到內部網路的 auth service;https://www.company.com.tw/api/order 將 HTTP Request 送到內部網路的 order service。

protocol translation

當 API Gateway 轉發 HTTP Request 的時候,可能內部服務並不是使用 HTTP 通訊協定,比如可能使用 gRPC、TCP、UDP 等等,API Gateway 可以將 HTTP Request 轉換成 gRPC、TCP、UDP 後,送給內部的服務。

Rate-Limiting

Rate-Limiting 可以限制 API 請求的頻率,比如全部的使用者每分鐘只能呼叫 API 10000 次;限制免費使用者每月只能呼叫 1000 次 API。

IP Listing

可以設定 IP 黑名單、白名單。以下是 Traefik 的設定:

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: test-ipwhitelist
spec:
ipWhiteList:
sourceRange:
- 127.0.0.1/32
- 192.168.1.7

monitoring

提供監控的功能,比如提供 Prometheus, Datadog, InfluxDB, StatsD 的 Metrics。

留言
avatar-img
留言分享你的想法!
avatar-img
C# 工匠的 DevOps 旅程
5會員
12內容數
專注於 C#, DevOps 的工程師
2024/09/23
本文探討 C# 非同步程式設計時應注意的幾個要點,包括全面採用非同步模式、避免混用同步與非同步程式碼、勿使用async void、以及正確使用CancellationToken等。這些建議不僅有助於提升程式的效能,也可以減少Deadlock等問題,讓開發者更有效地處理異常情況,確保應用程式的穩定性.
Thumbnail
2024/09/23
本文探討 C# 非同步程式設計時應注意的幾個要點,包括全面採用非同步模式、避免混用同步與非同步程式碼、勿使用async void、以及正確使用CancellationToken等。這些建議不僅有助於提升程式的效能,也可以減少Deadlock等問題,讓開發者更有效地處理異常情況,確保應用程式的穩定性.
Thumbnail
2024/06/24
Code Coverage 是什麼? 程式碼覆蓋率(Code Coverage)是一種軟體測試指標,用百分比表示,數值越高越好。
Thumbnail
2024/06/24
Code Coverage 是什麼? 程式碼覆蓋率(Code Coverage)是一種軟體測試指標,用百分比表示,數值越高越好。
Thumbnail
2024/04/08
本文介紹瞭如何在C#專案中建立和使用packages.lock.json檔案,以確保每次執行dotnet restore時都可以獲得相同的packages集合。我們還討論了dotnet restore抓取不同packages的原因,並提供了相關的解決方案。
Thumbnail
2024/04/08
本文介紹瞭如何在C#專案中建立和使用packages.lock.json檔案,以確保每次執行dotnet restore時都可以獲得相同的packages集合。我們還討論了dotnet restore抓取不同packages的原因,並提供了相關的解決方案。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
首先先簡單說明 Laravel 中的 Middleware (中介層),Middleware 是一種用於處理 HTTP 請求的機制,它允許你在請求到達應用程序的路由之前或之後執行一些代碼。Middleware 通常用於執行諸如驗證、授權、日誌記錄、修改請求/響應等操作。
Thumbnail
首先先簡單說明 Laravel 中的 Middleware (中介層),Middleware 是一種用於處理 HTTP 請求的機制,它允許你在請求到達應用程序的路由之前或之後執行一些代碼。Middleware 通常用於執行諸如驗證、授權、日誌記錄、修改請求/響應等操作。
Thumbnail
紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 2. 使用TCP Tunneling 3. 使用gcloud ssh 可編寫tunnel的script 使用 IAP 进行 TCP 转发 | Identity-Aware Pr
Thumbnail
紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 2. 使用TCP Tunneling 3. 使用gcloud ssh 可編寫tunnel的script 使用 IAP 进行 TCP 转发 | Identity-Aware Pr
Thumbnail
HTTPS全名是超文本傳輸安全協定,是瀏覽器與Web伺服器間的資料傳遞是以加密的方式進行通訊,而且資料隱私比http好。如果需要從外網連線到自己自己架設Nextcloud那就要改成https比較好,避免資料沒加密就傳送出去。 另外一點是如果iphone手機系統是IOS 15.6版的要連線到nextc
Thumbnail
HTTPS全名是超文本傳輸安全協定,是瀏覽器與Web伺服器間的資料傳遞是以加密的方式進行通訊,而且資料隱私比http好。如果需要從外網連線到自己自己架設Nextcloud那就要改成https比較好,避免資料沒加密就傳送出去。 另外一點是如果iphone手機系統是IOS 15.6版的要連線到nextc
Thumbnail
Step1:config2~3行的部分 打開public->config資料夾內的config.json 在前面的時候大家應該都有mint自己的nft並且可以在Opensea看到 所以我們現在要去Opensea找到我們NFT的合約跟token位置 https://testnets.opensea.i
Thumbnail
Step1:config2~3行的部分 打開public->config資料夾內的config.json 在前面的時候大家應該都有mint自己的nft並且可以在Opensea看到 所以我們現在要去Opensea找到我們NFT的合約跟token位置 https://testnets.opensea.i
Thumbnail
常聽到的區塊鏈系統由六階層組成,從下到上為: 數據層(Data Layer) 網路層(Network Layer) 共識層(Consensus Layer) 激勵層(Actuator Layer) 合約層(Contract Layer) 應用層(Application Layer) 還有一層數據傳輸
Thumbnail
常聽到的區塊鏈系統由六階層組成,從下到上為: 數據層(Data Layer) 網路層(Network Layer) 共識層(Consensus Layer) 激勵層(Actuator Layer) 合約層(Contract Layer) 應用層(Application Layer) 還有一層數據傳輸
Thumbnail
Polygon、BNB Chain、Avalanche 和 RSK 上的去中心化應用程序現在可以訪問 dAPI 以從 API3 的第一方預言機 Airnode 獲取加密貨幣價格數據 訪問API3 市場以訪問 dAPI。 關於 API3 ☯ ☯ ☯ ☯ ☯ ☯ ☯ ☯ ☯
Thumbnail
Polygon、BNB Chain、Avalanche 和 RSK 上的去中心化應用程序現在可以訪問 dAPI 以從 API3 的第一方預言機 Airnode 獲取加密貨幣價格數據 訪問API3 市場以訪問 dAPI。 關於 API3 ☯ ☯ ☯ ☯ ☯ ☯ ☯ ☯ ☯
Thumbnail
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
Thumbnail
API Gateway 是什麼? 參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點: 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。 IP Listing
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News