適用於網格的輸入流量

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

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

  • 閘道的高階考量事項。
  • 選取網狀網路閘道時的選項總覽。
  • 可套用至閘道拓撲的架構建議。

本文中的「閘道」是指處理網格中服務流量的解決方案或模式。Istio 的 Ingress Gateway 是這個模式的其中一種實作方式。本文中的「閘道」是一般用語,指的是一般模式,而非 Istio 實作。

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

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

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

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

在下列網格內部流量的範例中,Cloud Service Mesh 會設定 Sidecar Proxy。這些 Sidecar Proxy 會形成服務網格的資料層。如果服務 A 想與服務 B 通訊,會發生下列情況:

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


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

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

在本例中,用戶端位於服務網格外部。由於用戶端不會直接參與網格,因此不知道網格內服務有哪些端點。換句話說,由於用戶端不會使用 Cloud Service Mesh 設定的 Proxy 傳送輸出要求,因此不知道要使用哪些 IP 位址/通訊埠組合,將流量傳送至服務 A 或服務 B。如果沒有這項資訊,用戶端就無法存取網格內的服務。

閘道注意事項

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

  • 用戶端如何連上我的閘道?
  • 我想對抵達閘道的流量套用哪些政策?
  • 閘道如何將流量分配給網格中的服務?

允許用戶端連上網格的閘道

無論用戶端位於公開網際網路、內部部署環境或 Google Cloud,都需要存取網格內服務的方法。如要連線至網格中的服務,通常需要使用可公開或私下路由傳送的 IP 位址和通訊埠,解析為閘道。網格外部的用戶端會使用這個 IP 位址和通訊埠,透過閘道將要求傳送至網格中的服務。

Cloud Load Balancing 提供多種負載平衡選項,可做為網格的閘道。選擇Google Cloud 負載平衡器做為閘道時,主要需要詢問下列問題:

  • 用戶端是否位於公有網際網路上、內部部署環境中,或是虛擬私有雲 (VPC) 網路的一部分?
  • 我的用戶端使用哪些通訊協定?

如要瞭解 Cloud Load Balancing 選項總覽,請參閱「為網格選擇閘道」一節,瞭解如何根據用戶端位置和通訊協定選擇閘道。

在閘道處理流量

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

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

「為網格選擇閘道」部分會醒目顯示與網格邊緣相關的政策。

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

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

「Choose a gateway for your mesh」(為網格選擇閘道) 部分說明閘道可將流量傳送至哪些後端。

選擇網狀網路的閘道

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

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

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

舉例來說,您可能會想對進入 Google Cloud 的流量套用 Google Cloud Armor 安全性政策,並對進入網格的流量套用進階流量管理政策。如要瞭解如何使用第二個 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) 政策

Cloud Armor 可防範 DDoS 攻擊和網路攻擊

支援 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 (例如 Sidecar 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 位址,可將延遲時間和網路遍歷成本降至最低。
  • Cloud Armor 和 TLS 終止,確保網格流量安全。
  • Cloud CDN,用於提供網頁和影片內容。
  • 流量管理功能,例如主機轉送和路徑轉送。

如需更多資訊,協助您決定合適的閘道,請參閱「為網格選擇閘道」一節。

允許來自虛擬私有雲和已連線地端部署網路中用戶端的輸入流量

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

從虛擬私有雲網路上的用戶端到網格內服務的輸入流量 (使用負載平衡器)。
使用負載平衡器,將虛擬私有雲網路上的用戶端傳入流量導向網格內服務 (按一下可放大)

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

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

  • 可私下定址的 IP 位址
  • 透過 TLS 終止保護網格
  • 進階流量管理功能,例如根據權重分割流量
  • NEG 做為後端

如需更多資訊,協助您決定合適的閘道,請參閱「為網格選擇閘道」一節。

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

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

使用負載平衡器和邊緣 Proxy,將外部用戶端的 Ingress 流量導向網格內服務。
使用負載平衡器和邊緣 Proxy,從外部用戶端到網格內服務的連入流量 (按一下可放大)

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

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

  • Google Cloud管理的負載平衡器會套用初始政策集,例如使用外部應用程式負載平衡器時的 Cloud Armor 保護措施。

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

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

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

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

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

使用服務路由 API 處理 Ingress 流量

服務路由 API 提供 Gateway 資源,可設定 Envoy 代理程式的流量管理和安全性,這些代理程式會做為 Ingress 閘道,讓外部用戶端連線至服務網格 (南北向)。詳情請參閱服務路徑總覽設定輸入閘道

後續步驟