← 返回上一頁
Kubernetes

Envoy Gateway v0.2 正式發布:降低 Envoy 使用門檻的 Kubernetes 原生 API 閘道

本頁目錄

前言

Envoy Proxy 作為雲原生領域最重要的資料平面之一,功能強大但配置複雜度一直是初學者的痛點。2022 年五月 Envoy 社區宣布成立 Envoy Gateway 專案,目標是大幅降低使用 Envoy 作為 API 閘道的門檻。經過五個月開發,首個開源版本 v0.2 正式發布,本文將從架構設計、快速部署到 CRD 資源一一解析。

什麼是 Envoy Gateway?

Envoy Gateway 是一個用於管理 Envoy Proxy 的開源專案,可獨立使用或作為 Kubernetes 中應用程式的 API 閘道。它的核心特點包括:

  • 通過 Gateway API 核心一致性測試,使用 Gateway API 作為唯一配置語言
  • 支援 GatewayClass、Gateway、HTTPRoute 和 TLSRoute 等資源
  • 輕量級、開放、可動態編程,特別適合後端 API 閘道場景
  • 為供應商提供建構增值產品的基礎平台

Envoy Gateway 架構解析

Envoy Gateway 的架構採用分層設計,主要包含以下元件:

配置流程

  1. Provider 配置:透過配置檔案提供靜態配置(目前支援 Kubernetes 和檔案方式),啟動後亦可透過 Kubernetes 動態配置
  2. 資源監視:Provider 中的資源監視器偵測到配置變更後,傳遞給資源轉譯器
  3. 中間表示轉譯:將配置分別轉譯為基礎設施管理器的中間表示(Infra IR)和 xDS 中間表示(xDS IR)
  4. 基礎設施管理:透過 CRUD 操作管理 Kubernetes Deployment、Service 等資源來運行 Envoy
  5. xDS 配置:xDS 管理器透過 xDS 協議配置 Envoy 代理
  6. 流量轉發:Envoy 代理依據配置將請求轉發到對應的後端服務

快速開始:在 Kubernetes 上部署 Envoy Gateway

環境需求

部署前請確認相容性:

Envoy Gateway 版本 Envoy Proxy 版本 Gateway API 版本 Kubernetes 最低版本
v0.2.0 v1.23+ v0.5.1 v1.24

安裝 Gateway CRD 與 Envoy Gateway

由於 Gateway API 並非 Kubernetes 預設安裝的元件,需手動部署:

kubectl apply -f https://github.com/envoyproxy/gateway/releases/download/v0.2.0/install.yaml

此指令會建立 envoy-gateway-system 和 gateway-system 兩個命名空間,同時建立一系列 CRD 以及 Envoy Gateway 運行所需的 ConfigMap、ServiceAccount、RBAC 等資源。

部署測試應用

kubectl apply -f https://github.com/envoyproxy/gateway/releases/download/v0.2.0/quickstart.yaml

這會建立 GatewayClass、Gateway、HTTPRoute 以及範例應用程式。

驗證安裝

透過 port-forward 存取 Envoy 服務:

# 取得 Envoy Service 名稱
ENVOY_SERVICE=$(kubectl get svc -n envoy-gateway-system -l gateway.envoyproxy.io/owning-gateway-name -o jsonpath='{.items[0].metadata.name}')

# 建立 port-forward
kubectl -n envoy-gateway-system port-forward service/${ENVOY_SERVICE} 8888:8080 &

# 測試請求
curl --verbose --header "Host: www.example.com" http://localhost:8888/get

看到 HTTP 200 回應及 JSON 內容,代表 Envoy Gateway 已成功安裝並正常運作。

若 Kubernetes 叢集部署在雲端環境,可直接使用 Load Balancer IP:

export GATEWAY_HOST=$(kubectl get svc/${ENVOY_SERVICE} -n envoy-gateway-system \
  -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

curl --verbose --header "Host: www.example.com" http://$GATEWAY_HOST:8080/get

Envoy Gateway 使用的核心 CRD 解析

安裝過程中建立了多個 CRD,以下逐一介紹其用途:

GatewayClass

描述使用者可用於建立 Gateway 資源的一類閘道模板。建議將 GatewayClass 視為 Gateway 的範本,建立後的變更不會自動傳播到既有 Gateway。這是一個叢集層級的資源。

Gateway

代表服務流量處理基礎設施的實例,透過將 Listener 綁定到一組 IP 位址來運作。

HTTPRoute

提供路由 HTTP 請求的方法,支援透過主機名、路徑、Header 或查詢參數進行匹配,並可設定過濾器指定額外處理步驟。

TLSRoute / TCPRoute / UDPRoute

分別提供 TLS、TCP、UDP 層級的流量路由能力,搭配 Gateway Listener 使用可將特定端口的連線轉發至指定後端。

ReferenceGrant

標識其他命名空間中被信任引用的資源種類,Gateway API 中所有跨命名空間引用(除了跨命名空間的 Gateway-Route 附件)都需要 ReferenceGrant。

總結

Envoy Gateway v0.2 的發布標誌著 Envoy 生態系統在「易用性」方面邁出了重要一步。透過標準化的 Gateway API 介面,使用者無需深入理解 Envoy 複雜的 xDS 配置,即可輕鬆將 Envoy 部署為 Kubernetes 叢集的 API 閘道。隨著專案的持續演進,Envoy Gateway 有望成為雲原生 API 閘道的重要選擇之一。

參考資源

分享這篇
X LinkedIn Facebook Hacker News Reddit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料。