適用於網格的輸入流量
服務網格可促進網格中執行的服務之間的通訊。如何將流量導入網格?您可以使用閘道,透過進入點將網格外部的流量導向網格。
本文說明如何使用 Cloud Load Balancing 做為閘道,將流量導入網格,並包含下列內容:
- 閘道的高階考量事項。
- 選取網狀網路的閘道時,可用的選項總覽。
- 可套用至閘道拓撲的架構建議。
本文中的「閘道」是指處理網格中服務流量的解決方案或模式。Istio 的 Ingress 閘道是這種模式的其中一種實作方式。本文中的「閘道」是泛稱,指的是一般模式,而非 Istio 實作方式。
本文適用於 Cloud Service Mesh API。完成準備設定步驟後,請參閱 ,瞭解如何使用 Ingress 閘道進行部署。
設計服務網格時,請考量來自下列來源的流量:
- 源自網格內部的流量
- 源自網格外部的流量
網格內產生的流量會透過服務網格資料層,抵達與目的地服務相關聯的後端或端點。不過,來自網格外部的流量必須先抵達服務網格資料層。
在以下服務網格內部流量的範例中,Cloud Service Mesh 會設定 Sidecar Proxy。這些 Sidecar Proxy 會形成服務網格的資料層。如果服務 A 想與服務 B 通訊,會發生下列情況:
- 服務 A 依名稱向服務 B 發出要求。
- 這項要求會遭到攔截,並重新導向至服務 A 的 Sidecar Proxy。
- 側車 Proxy 接著會將要求傳送至與服務 B 相關聯的端點。
在下列範例中,流量來自服務網格外部,不會沿著服務網格資料層傳輸。
在這個範例中,用戶端位於服務網格外部。由於用戶端並未直接參與網格,因此不知道哪些端點屬於網格內的服務。換句話說,由於用戶端並未使用 Cloud Service Mesh 設定的 Proxy 傳送輸出要求,因此不知道將流量傳送至服務 A 或服務 B 時,應使用哪些 IP 位址和連接埠配對。如果沒有這項資訊,用戶端就無法連線至網格內的服務。
閘道注意事項
本節將概略說明選取閘道時應考量的問題,包括:
- 用戶端如何連上我的閘道?
- 要對抵達閘道的流量套用哪些政策?
- 閘道如何將流量分配至網格中的服務?
允許用戶端連上網格的閘道
無論用戶端位於公開網際網路、您的內部部署環境或 Google Cloud,都需要連往網格內服務的方法。如要連上網格中的服務,通常需要使用可公開或私下轉送的 IP 位址和通訊埠,解析為閘道。網格外部的用戶端會使用這個 IP 位址和通訊埠,透過閘道將要求傳送至網格中的服務。
Cloud Load Balancing 提供多種負載平衡選項,可做為網格的閘道。選擇Google Cloud 負載平衡器做為閘道時,主要需要考量下列問題:
- 用戶端是否位於公用網際網路、地端部署環境,或虛擬私有雲 (VPC) 網路中?
- 我的用戶端使用哪些通訊協定?
如要瞭解 Cloud Load Balancing 選項總覽,請參閱「為網格選擇閘道」一節,瞭解如何根據用戶端位置和通訊協定選擇閘道。
在閘道處理流量
由於閘道位於網格邊緣,也就是網格外部的用戶端與網格內部的服務之間,因此當流量進入網格時,閘道是套用政策的自然位置。這些政策包括:
- 流量管理,例如路由、重新導向和要求轉換
- 安全性,例如傳輸層安全標準 (TLS) 終止和 Google Cloud Armor 分散式阻斷攻擊 (DDoS) 保護措施
- Cloud CDN 快取
將流量從閘道傳送至網格中的服務
閘道對連入流量套用政策後,會決定流量的傳送目的地。您可以透過流量管理和負載平衡政策設定這項作業。舉例來說,閘道可能會檢查要求標頭,找出應接收流量的網格服務。閘道找出服務後,會根據負載平衡政策將流量分配到特定後端。
選擇網狀網路的閘道
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 區域的後端,在下列項目上執行:
|
| 外部應用程式負載平衡器 | 公用網際網路上的用戶端 | HTTP/1.1 HTTP/2 HTTPS |
流量管理 Cloud CDN (包括 Cloud Storage bucket 後端) 使用 Google 代管或自行管理的憑證終止 TLS 安全資料傳輸層 (SSL) 政策 Cloud Armor 可防範 DDoS 和網路攻擊 支援 Identity-Aware Proxy (IAP) 的使用者身分驗證 |
位於任何 Google Cloud 區域的後端,執行下列項目:
|
| 內部直通式網路負載平衡器 | 任何區域的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 區域的後端,執行下列項目:
|
| 由 Cloud Service Mesh 設定的邊緣 Proxy (位於 VM 或容器執行個體上) |
客戶必須位於下列任一地點:
|
HTTP/1.1 HTTP/2 |
進階流量管理 (包括支援 regex) |
位於任何 Google Cloud 區域的後端,執行下列項目:
|
如需詳細的功能比較資訊,請參閱負載平衡器功能頁面。如要詳細瞭解 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管理的負載平衡器做為閘道:
用戶端會將流量傳送至 Google Cloud管理的負載平衡器,該負載平衡器會做為閘道。
- 閘道會套用政策。
閘道會將流量傳送至網格中的服務。
更進階的模式涉及兩個層級的閘道。閘道運作方式如下:
用戶端會將流量傳送至 Google 管理的負載平衡器,做為第一層閘道。 Google Cloud
- 閘道會套用政策。
閘道會將流量傳送至 Cloud Service Mesh 設定的邊緣 Proxy (或邊緣 Proxy 集區)。這個邊緣 Proxy 會做為第二層閘道。這個層級會執行下列操作:
明確劃分職責,例如一個團隊負責進入 Google Cloud 的輸入流量,另一個團隊則負責進入該團隊網格的輸入流量。
可讓您套用Google Cloud管理的負載平衡器可能不支援的政策。
第二層閘道會將流量傳送至網格中的服務。
流量抵達網格內服務後,輸入模式就會結束。以下各節將說明常見案例和進階模式。
啟用來自網際網路的輸入流量
如果用戶端位於 Google Cloud 外部,且需要透過公用網際網路連線至Google Cloud ,您可以將下列任一負載平衡器做為閘道:
在這個模式中, Google Cloud代管負載平衡器會做為閘道。閘道會處理輸入流量,再轉送至網格中的服務。
舉例來說,您可以選擇外部應用程式負載平衡器做為閘道,以便使用下列項目:
- 可公開轉送的全域 Anycast IP 位址,可將延遲時間和網路遍歷成本降至最低。
- Cloud Armor 和 TLS 終止 ,確保網格流量安全。
- Cloud CDN,用於提供網頁和影片內容。
- 流量管理功能,例如主機轉送和路徑轉送。
如需更多資訊,協助您決定合適的閘道,請參閱「為網格選擇閘道」一節。
允許來自虛擬私有雲和已連線地端部署網路中用戶端的輸入流量
如果用戶端位於虛擬私有雲網路中,或位於地端部署,且可使用私人連線能力方法 (例如 Cloud VPN 或 Cloud Interconnect) 存取 Google Cloud 服務,則可使用下列任一負載平衡器做為閘道:
在這個模式中, Google Cloud代管負載平衡器會做為閘道。閘道會處理輸入流量,再轉送至網格中的服務。
舉例來說,您可以選擇內部應用程式負載平衡器做為閘道,以便使用下列功能:
- 可私下定址的 IP 位址
- 透過 TLS 終止保護網格
- 進階流量管理功能,例如根據權重分割流量
- NEG 做為後端
如需更多資訊,協助您決定合適的閘道,請參閱「為網格選擇閘道」一節。
在網格邊緣使用第二層閘道處理輸入流量
視需求而定,您可能會考慮新增額外閘道的進階模式。
這個閘道是 Cloud Service Mesh 設定的邊緣 Proxy (或 Proxy 集區),位於 Google Cloud管理的負載平衡器後方。您可以使用 Compute Engine VM 集區 (代管執行個體群組) 或 GKE 服務,在專案中託管這個第二層閘道。
雖然這個模式較為進階,但可帶來額外優點:
Google Cloud管理的負載平衡器會套用初始政策集,例如使用外部應用程式負載平衡器時的 Cloud Armor 保護措施。
Cloud Service Mesh 設定的邊緣 Proxy 會套用第二組政策,這些政策可能無法在 Google Cloud管理的負載平衡器中使用。這些政策包括進階流量管理,可對 HTTP 標頭套用規則運算式,以及根據權重分配流量。
您可以設定這個模式,反映貴機構的結構。例如:
一個團隊可能負責處理Google Cloud 的輸入流量,另一個團隊則負責處理網格的輸入流量。
如果多個團隊在一個共用虛擬私有雲上提供服務,且每個團隊都有自己的服務專案,團隊可以使用這個模式來管理及套用自己的網格政策。每個團隊都可以公開 Cloud Service Mesh 設定的閘道,該閘道可透過單一 IP 位址和通訊埠組合存取。團隊可以獨立定義及管理套用至團隊網格入口流量的政策。
只要負載平衡器能將流量傳送至代管 Cloud Service Mesh 設定的閘道後端,即可使用任何 Google Cloud代管負載平衡器實作這個模式。
使用服務路由 API 處理輸入流量
服務轉送 API 提供 Gateway 資源,可設定 Envoy Proxy 的流量管理和安全性,做為 Ingress 閘道,讓外部用戶端連線至服務網格 (南北向)。詳情請參閱服務轉送總覽和「設定 Ingress 閘道」。
後續步驟
- 如要設定 Ingress 閘道,請參閱「Cloud Service Mesh Ingress 閘道設定」。
- 如要將執行程式碼的 VM 和容器分組為服務的端點,請參閱 Cloud Service Mesh 服務探索。
- 如要搭配 Shared VPC 使用 Cloud Service Mesh,請參閱「設定多叢集服務網格」。
- 如要進一步瞭解 Cloud Service Mesh,請參閱「Cloud Service Mesh 總覽」。