API Gateway

更新 發佈閱讀 7 分鐘
raw-image

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
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
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
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
Thumbnail
虽然Sentinel的架构确保了用户的匿名性不会受到应用程序本身的影响,但使用Sentinel即将推出的中继网络是必要的,以确保从出口节点的角度来看,用户是完全匿名的。Sentinel 中继网络将允许用户通过一系列的隧道连接“中继节点”,确保用户不直接与出口节点交互。 一个强大的中继网络包括:
Thumbnail
虽然Sentinel的架构确保了用户的匿名性不会受到应用程序本身的影响,但使用Sentinel即将推出的中继网络是必要的,以确保从出口节点的角度来看,用户是完全匿名的。Sentinel 中继网络将允许用户通过一系列的隧道连接“中继节点”,确保用户不直接与出口节点交互。 一个强大的中继网络包括:
Thumbnail
JWT全名JSON Web Token,因符合RESTful API無狀態原則而誕生。 傳統我們通常會用cookie/session的方式來做身分認證,也就是user登入後,用session id當作一種token,來做身份認證。 然而用session這種方法server會有額外的儲存負擔...
Thumbnail
JWT全名JSON Web Token,因符合RESTful API無狀態原則而誕生。 傳統我們通常會用cookie/session的方式來做身分認證,也就是user登入後,用session id當作一種token,來做身份認證。 然而用session這種方法server會有額外的儲存負擔...
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News