適用於網格的輸入流量

服務網格可促進網格中執行的服務之間的通訊。如何將流量導入網格?您可以使用閘道,透過入口將來自網格外部的流量導向網格。

本文說明如何使用 Cloud Load Balancing 做為閘道,將流量導入網格,其中包含以下內容:

  • 閘道的主要考量事項。
  • 為網格選取閘道時的選項總覽。
  • 可套用至網關拓樸的架構建議。

在本文件中,「閘道」是指用來處理要前往網格中服務的流量的解決方案或模式。Istio 的 Ingress Gateway 就是這類模式的一種實作方式。在本文件中,「閘道」是指一般模式的通用術語,而非 Istio 實作。

本文適用於 Cloud Service Mesh API。完成準備設定步驟後,請參閱這篇文章,瞭解如何透過入口閘道部署。

設計服務中介時,請考量來自下列來源的流量:

  • 來自網格內的流量
  • 來自網格外部的流量

網格內產生的流量會透過服務網格資料層傳送,以便抵達與目的地服務相關聯的後端或端點。不過,來自網格外部的流量必須先到達服務網格資料平面。

在下列叢集中產生的流量範例中,Cloud Service Mesh 會設定附屬 Proxy。這些附加 Proxy 會形成服務網格的資料層。如果服務 A 想要與服務 B 通訊,會發生以下情況:

  1. 服務 A 會依名稱向服務 B 提出要求。
  2. 這項要求會遭到攔截,並重新導向至 Service A 的補充 Proxy。
  3. 接著,側邊 Proxy 會將要求傳送至與 Service B 相關聯的端點。
網格的資料層會處理服務網格內部的流量。
資料平面會處理服務網格內部的流量 (按一下可放大)


在以下範例中,流量來自服務網格外部,且不會沿著服務網格資料層傳輸。

服務網格資料層不會處理服務網格外部的流量。
服務網格資料層不會處理服務網格外部的流量 (按一下可放大)

在這個範例中,用戶端不在服務網格內。由於用戶端並未直接參與網格,因此無法得知哪些端點屬於網格內的服務。換句話說,由於用戶端不會使用 Cloud Service Mesh 設定的 Proxy 傳送外出要求,因此無法得知傳送流量至 Service A 或 Service B 時應使用哪個 IP 位址-通訊埠組合。如果缺少這項資訊,用戶端就無法存取網格內的服務。

閘道須知

本節將概略說明選擇閘道時應考量的事項,包括:

  • 客戶如何連線至我的閘道?
  • 我想將哪些政策套用至抵達閘道的流量?
  • 閘道如何將流量分配給網狀結構中的服務?

讓用戶端連線至網狀網路的閘道

無論用戶端位於公開網際網路、內部環境或 Google Cloud中,都需要能夠存取網格內的服務。要存取網格中的服務,通常會使用可對應至閘道的公開或私人可路由 IP 位址和通訊埠。位於網狀結構外部的用戶端會使用這個 IP 位址和通訊埠,透過閘道將要求傳送至網狀結構中的服務。

Cloud Load Balancing 提供各種負載平衡選項,可做為網格的閘道。選擇Google Cloud 負載平衡器做為閘道時,請先考慮以下幾個問題:

  • 我的客戶是在公用網際網路、內部部署環境,還是虛擬私有雲 (VPC) 網路的一部分?
  • 客戶使用哪些通訊協定?

如要瞭解 Cloud 負載平衡選項的概略說明 (取決於用戶端位置和通訊通訊協定),請參閱「為網格選擇閘道」一節。

在網關處處理流量

由於閘道位於網格邊緣,介於網格外部的用戶端和網格內的服務之間,因此當流量進入網格時,閘道就是自然的套用政策位置。這些政策包括:

  • 流量管理,例如轉送、重新導向和要求轉換
  • 安全性:例如 TLS 終止和 Google Cloud Armor 分散式阻斷服務 (DDoS) 防護
  • Cloud CDN 快取

「Choose a gateway for your mesh」 部分會標示與網格邊緣相關的政策。

將流量從閘道傳送至網格中的服務

閘道將政策套用至傳入流量後,就會決定要將流量傳送至何處。您可以使用流量管理和負載平衡政策來設定這項功能。例如,閘道可能會檢查要求標頭,找出應接收流量的網格服務。閘道識別服務後,會根據負載平衡政策將流量分配給特定後端。

Choose a gateway for your mesh」部分會概略說明閘道可傳送流量的後端。

為網狀網路選擇閘道

Google Cloud 提供多種負載平衡器,可做為網格的閘道。本節將說明如何選取閘道,並比較下列與閘道模式相關的維度:

在本節中,我們會提到第一層第二層閘道。這些術語用於說明使用一個或兩個閘道來處理對網格的入站流量。

您可能只需要一個層級,也就是一個負載平衡器,做為網格的閘道。不過,有時候設定多個閘道也相當合理。在這些設定中,一個閘道會處理進入 Google Cloud的流量,而另一個獨立的二級閘道會處理進入服務網格的流量。

舉例來說,您可能會想將 Google Cloud Armor 安全性政策套用至進入 Google Cloud 的流量,並將進階流量管理政策套用至進入網格的流量。如要瞭解使用第二個 Cloud Service Mesh 設定閘道的模式,請參閱「使用位於網格邊緣的第二層閘道處理入站流量」一節。

下表比較了可用的功能,視您選取的閘道選項而定。

閘道 用戶端位置 通訊協定 政策 後端/端點
內部應用程式負載平衡器

與負載平衡器位於相同地區的Google Cloud用戶端。

內部部署用戶端的請求會傳送至與負載平衡器相同的 Google Cloud 區域,例如使用 Cloud VPN 或 Cloud Interconnect。

HTTP/1.1

HTTP/2

HTTPS

進階流量管理

使用自行管理的憑證進行 TLS 終止

與負載平衡器位於相同 Google Cloud 區域的後端,執行於:

  • Compute Engine 上的虛擬機器 (VM) 執行個體後端
  • Google Kubernetes Engine (GKE) 和 Kubernetes 上的容器執行個體
外部應用程式負載平衡器 公用網際網路上的用戶端

HTTP/1.1

HTTP/2

HTTPS

流量管理

Cloud CDN (包括 Cloud Storage 值區後端)

使用 Google 或自行管理的憑證進行 TLS 終止

安全資料傳輸層 (SSL) 政策

防範 DDoS 和網路攻擊的 Google Cloud Armor

Identity-Aware Proxy (IAP) 支援使用者驗證

位於任何 Google Cloud 區域的後端,執行於:

  • Compute Engine 上的 VM
  • GKE 和 Kubernetes 上的容器執行個體
內部直通式網路負載平衡器

位於任何區域的Google Cloud用戶端;如果用戶端位於負載平衡器所在區域以外的區域,就需要全域存取權。

要求抵達任何 Google Cloud區域的內部部署用戶端,例如使用 Cloud VPN 或 Cloud Interconnect。

TCP 後端位於與負載平衡器相同的 Google Cloud 區域,並在 Compute Engine 的 VM 上執行。
外部直通式網路負載平衡器 公用網際網路上的用戶端 TCP 或 UDP 後端位於與負載平衡器相同的 Google Cloud 區域,並在 Compute Engine 的 VM 上執行。
外部 Proxy 網路負載平衡器 公用網際網路上的用戶端 SSL 或 TCP

使用 Google 或自行管理的憑證終止 TLS (僅限 SSL Proxy)

SSL 政策 (僅限 SSL Proxy)

位於任何 Google Cloud 區域的後端,執行於:

  • Compute Engine 上的 VM
  • GKE 和 Kubernetes 上的容器執行個體
由 Cloud Service Mesh 設定的邊緣 Proxy
(位於 VM 或容器執行個體上)
客戶必須位於下列任一地區:
  • 他們可以將要求傳送至由 Google Cloud管理的負載平衡器,後者會將要求傳送至邊緣 Proxy。詳情請參閱「使用位於網格邊緣的第二層閘道處理入站流量」。
  • 他們可以透過 Cloud Service Mesh 設定的 Proxy (例如附屬 Proxy) 傳送要求。
  • 他們可以將要求直接傳送至執行邊緣 Proxy 的 VM 或容器執行個體 IP 位址和通訊埠。

HTTP/1.1

HTTP/2

進階流量管理 (包括 regex 支援)

位於任何 Google Cloud 區域的後端,執行於:

  • Compute Engine 上的 VM
  • GKE 和 Kubernetes 上的容器執行個體

如需詳細的功能比較資訊,請參閱「負載平衡器功能」頁面。如需 Cloud Service Mesh 功能的詳細簡介,請參閱「Cloud Service Mesh 功能」頁面。

部署及設定閘道

最後,在選擇閘道時,請考量開發人員體驗和您想使用的工具。 Google Cloud 提供多種建立及管理閘道的方法。

Google Cloud CLI 和 Compute Engine API

如要設定 Google Cloud的代管負載平衡產品和 Cloud Service Mesh,您可以使用 Google Cloud CLI 和 Compute Engine API。gcloud CLI 和 API 提供機制,可用於強制部署及設定 Google Cloud 資源。如要自動執行重複的工作,您可以建立指令碼。

Google Cloud 控制台

如要設定 Cloud Service Mesh 和 Google Cloud的受管理負載平衡器,您可以使用 Google Cloud 控制台。

如要設定閘道模式,您可能需要同時參閱 Cloud Service Mesh 頁面負載平衡頁面

GKE 和多叢集 Ingress

GKE 和 GKE Enterprise 網路控制器也支援 Cloud Load Balancing 部署作業,可與容器網路功能進行內建整合。提供 Kubernetes 風格的宣告式介面,用於部署及設定閘道。GKE Ingress多叢集 Ingress 控制器會管理內部外部負載平衡器,用於將流量傳送至單一叢集或多個 GKE 叢集。您也可以設定 Ingress 資源,讓其指向在 GKE 叢集中部署的 Cloud Service Mesh 設定服務。

閘道架構模式

本節將說明高階模式,並提供閘道架構圖。

最常見的模式是使用 Google Cloud管理的負載平衡器做為閘道:

  1. 用戶端會將流量傳送至由 Google Cloud管理的負載平衡器,該負載平衡器會充當閘道。

    • 網關會套用政策。
  2. 閘道會將流量傳送至網格中的服務。

更進階的模式則涉及兩個層級的閘道。閘道的運作方式如下:

  1. 用戶端會將流量傳送至由 Google Cloud管理的負載平衡器,該負載平衡器會充當第一層閘道。

    • 網關會套用政策。
  2. 閘道會將流量傳送至由 Cloud Service Mesh 設定的邊緣 Proxy (或邊緣 Proxy 集區)。這個邊緣 Proxy 會做為第二層閘道運作。這個層級會執行以下操作:

    • 明確區分各項工作,例如一個團隊負責處理進入 Google Cloud 的入站流量,另一個團隊則負責處理進入該團隊網格的入站流量。

    • 讓您套用Google Cloud管理的負載平衡器可能不支援的政策。

  3. 二級閘道會將流量傳送至網格中的服務。

流量到達網格內服務後,入站模式就會結束。以下各節將說明常見情況和進階模式。

啟用來自網際網路的 ingress 流量

如果您的用戶端位於 Google Cloud 外,且需要透過公用網際網路連線至Google Cloud ,您可以使用下列任一負載平衡器做為閘道:

使用負載平衡器,將來自公用網際網路的用戶端流量,輸入至網狀結構內的服務。
使用負載平衡器,從公用網際網路上的用戶端傳送至中介網路內服務的入站流量 (按一下可放大)

在這個模式中, Google Cloud管理的負載平衡器會做為閘道。閘道會先處理輸入流量,再將流量轉送至網格中的服務。

舉例來說,您可以選擇外部應用程式負載平衡器做為閘道,以便使用下列功能:

  • 可公開轉送的全域 Anycast IP 位址,可盡量減少延遲時間和網路穿越成本。
  • Google Cloud Armor 和 TLS 終止,以保護網格中的流量。
  • Cloud CDN:提供網頁和影片內容。
  • 流量管理功能,例如主機轉送和路徑轉送。

如需進一步瞭解如何選擇合適的閘道,請參閱「選擇網狀結構的閘道」一節。

在 VPC 和連線的內部部署網路中,啟用來自用戶端的輸入流量

如果用戶端位於 VPC 網路內,或是位於內部部署環境,且可透過私人連線方法 (例如 Cloud VPN 或 Cloud Interconnect) 存取 Google Cloud 服務,您可以使用下列任一負載平衡器做為閘道:

使用負載平衡器,從 VPC 網路上的用戶端傳送至網狀結構內服務的入站流量。
使用負載均衡器,從 VPC 網路上的用戶端傳送至內部服務的入站流量 (按一下可放大)

在這個模式中, Google Cloud管理的負載平衡器會做為閘道。閘道會先處理輸入流量,再將流量轉送至網格中的服務。

舉例來說,您可以選擇內部應用程式負載平衡器做為閘道,以便使用下列功能:

  • 私人 IP 位址
  • 使用傳輸層安全標準 (TLS) 終止機制保護網格
  • 進階流量管理功能,例如以權重為依據的流量分配
  • 使用 NEG 做為後端

如需進一步瞭解如何選擇合適的閘道,請參閱「選擇網狀結構的閘道」一節。

使用網格邊緣的第二層閘道處理輸入流量

視需求而定,您可以考慮使用進階模式,新增額外的閘道。

使用負載平衡器和邊緣 Proxy,從外部用戶端傳送至中介網服務的入站流量。
使用負載平衡器和邊緣 Proxy 將外部用戶端的流量導入網格內服務 (按一下可放大)

這個閘道是 Cloud Service Mesh 設定的邊緣 Proxy (或 Proxy 集區),位於 Google Cloud管理的負載平衡器後方。您可以使用 Compute Engine VM 資源池 (代管執行個體群組) 或 GKE 服務,在專案中代管這個次級閘道。

雖然這種模式較為進階,但可帶來額外優勢:

  • Google Cloud管理的負載平衡器會套用初始政策組合,例如,如果您使用外部應用程式負載平衡器,就會套用 Google Cloud Armor 防護機制。

  • 以 Cloud Service Mesh 設定的邊緣 Proxy 會套用第二組政策,這類政策可能無法在 Google Cloud管理的負載平衡器中使用。這些政策包括使用規則運算式套用至 HTTP 標頭的進階流量管理,以及以權重為依據的流量分配。

您可以設定這項模式,以反映貴機構的組織結構。例如:

  1. 一個團隊可能負責處理Google Cloud 的入站流量,另一個團隊則負責處理其網格的入站流量。

  2. 如果有多個團隊在同一個共用虛擬私有雲中提供服務,且每個團隊都擁有自己的服務專案,則團隊可以使用這個模式,在自己的網格中管理及套用政策。每個團隊都能公開 Cloud Service Mesh 設定的閘道,該閘道可透過單一 IP 位址和通訊埠組合存取。團隊接著可以獨立定義及管理套用至團隊網格入站流量的政策。

只要負載平衡器能夠將流量傳送至代管 Cloud Service Mesh 設定閘道的後端,即可使用任何 Google Cloud管理的負載平衡器實作此模式。

使用服務路由 API 處理入站流量

服務路由 API 提供 Gateway 資源,可為充當入口網關的 Envoy Proxy 設定流量管理和安全性,讓外部用戶端連線至服務網格 (南北)。詳情請參閱服務轉送總覽設定輸入閘道

後續步驟