適用於網格的輸入流量
服務網格可促進網格中執行的服務之間的通訊。如何將流量導入網格?您可以使用閘道,透過進入點將網格外部的流量導向網格。
本文說明如何使用 Cloud Load Balancing 做為閘道,將流量導入網格,並包含下列內容:
- 閘道的高階考量事項。
- 選取網狀網路閘道時的選項總覽。
- 可套用至閘道拓撲的架構建議。
本文中的「閘道」是指處理網格中服務流量的解決方案或模式。Istio 的 Ingress Gateway 是這個模式的其中一種實作方式。本文中的「閘道」是一般用語,指的是一般模式,而非 Istio 實作。
本文適用於 Cloud Service Mesh API。完成準備設定步驟後,請參閱 ,瞭解如何透過 Ingress 閘道部署。
設計服務網格時,請考量來自下列來源的流量:
- 源自網格內部的流量
- 源自網格外部的流量
源自網格內部的流量會透過服務網格資料層,抵達與目的地服務相關聯的後端或端點。不過,網格外部的流量必須先抵達服務網格資料平面。
在下列網格內部流量的範例中,Cloud Service Mesh 會設定 Sidecar Proxy。這些 Sidecar Proxy 會形成服務網格的資料層。如果服務 A 想與服務 B 通訊,會發生下列情況:
- 服務 A 依名稱向服務 B 發出要求。
- 這項要求會遭到攔截,並重新導向至服務 A 的補充 Proxy。
- 側車 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 地區的後端,在下列項目上執行:
|
外部應用程式負載平衡器 | 公用網際網路上的用戶端 | HTTP/1.1 HTTP/2 HTTPS |
流量管理 Cloud CDN (包括 Cloud Storage 值區後端) 使用 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 Cloud管理的負載平衡器,該負載平衡器會做為第一層閘道。
- 閘道會套用政策。
閘道會將流量傳送至 Cloud Service Mesh 設定的邊緣 Proxy (或邊緣 Proxy 集區)。這個邊緣 Proxy 會做為第二層閘道。這個層級會執行下列作業:
清楚劃分職責,例如一個團隊負責進入 Google Cloud 的輸入流量,另一個團隊則負責進入該團隊網格的輸入流量。
可讓您套用Google Cloud管理的負載平衡器可能不支援的政策。
第二層閘道會將流量傳送至網格中的服務。
流量抵達網格內服務後,連入模式就會結束。以下各節將說明常見案例和進階模式。
啟用來自網際網路的 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 做為後端
如需更多資訊,協助您決定合適的閘道,請參閱「為網格選擇閘道」一節。
在網格邊緣使用第二層閘道處理輸入流量
視需求而定,您可能會考慮新增額外閘道的進階模式。
這個閘道是 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 處理 Ingress 流量
服務路由 API 提供 Gateway
資源,可設定 Envoy 代理程式的流量管理和安全性,這些代理程式會做為 Ingress 閘道,讓外部用戶端連線至服務網格 (南北向)。詳情請參閱服務路徑總覽和設定輸入閘道。
後續步驟
- 如要設定 Ingress 閘道,請參閱「Ingress 閘道的 Cloud Service Mesh 設定」。
- 如要將執行程式碼的 VM 和容器分組為服務的端點,請參閱 Cloud Service Mesh 服務探索。
- 如要搭配共用虛擬私有雲使用 Cloud Service Mesh,請參閱「設定多叢集服務網格」。
- 如要進一步瞭解 Cloud Service Mesh,請參閱「Cloud Service Mesh 總覽」。