適用於網格的輸入流量
服務網格可促進網格中執行的服務之間的通訊。如何將流量導入網格?您可以使用閘道,透過入口將來自網格外部的流量導向網格。
本文說明如何使用 Cloud Load Balancing 做為閘道,將流量導入網格,其中包含以下內容:
- 閘道的主要考量事項。
- 為網格選取閘道時的選項總覽。
- 可套用至網關拓樸的架構建議。
在本文件中,「閘道」是指用來處理要前往網格中服務的流量的解決方案或模式。Istio 的 Ingress Gateway 就是這類模式的一種實作方式。在本文件中,「閘道」是指一般模式的通用術語,而非 Istio 實作。
本文適用於 Cloud Service Mesh API。完成準備設定步驟後,請參閱這篇文章,瞭解如何透過入口閘道部署。
設計服務中介時,請考量來自下列來源的流量:
- 來自網格內的流量
- 來自網格外部的流量
網格內產生的流量會透過服務網格資料層傳送,以便抵達與目的地服務相關聯的後端或端點。不過,來自網格外部的流量必須先到達服務網格資料平面。
在下列叢集中產生的流量範例中,Cloud Service Mesh 會設定附屬 Proxy。這些附加 Proxy 會形成服務網格的資料層。如果服務 A 想要與服務 B 通訊,會發生以下情況:
- 服務 A 會依名稱向服務 B 提出要求。
- 這項要求會遭到攔截,並重新導向至 Service A 的補充 Proxy。
- 接著,側邊 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 區域的後端,執行於:
|
外部應用程式負載平衡器 | 公用網際網路上的用戶端 | HTTP/1.1 HTTP/2 HTTPS |
流量管理 Cloud CDN (包括 Cloud Storage 值區後端) 使用 Google 或自行管理的憑證進行 TLS 終止 安全資料傳輸層 (SSL) 政策 防範 DDoS 和網路攻擊的 Google Cloud Armor 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 位址,可盡量減少延遲時間和網路穿越成本。
- Google Cloud Armor 和 TLS 終止,以保護網格中的流量。
- Cloud CDN:提供網頁和影片內容。
- 流量管理功能,例如主機轉送和路徑轉送。
如需進一步瞭解如何選擇合適的閘道,請參閱「選擇網狀結構的閘道」一節。
在 VPC 和連線的內部部署網路中,啟用來自用戶端的輸入流量
如果用戶端位於 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管理的負載平衡器會套用初始政策組合,例如,如果您使用外部應用程式負載平衡器,就會套用 Google 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 設定流量管理和安全性,讓外部用戶端連線至服務網格 (南北)。詳情請參閱服務轉送總覽和設定輸入閘道。
後續步驟
- 如要設定入口閘道,請參閱「為入口閘道設定 Cloud Service Mesh」一文。
- 如要將執行程式碼的 VM 和容器,以服務端點的形式進行分組,請參閱 Cloud Service Mesh 服務探索。
- 如要搭配共用虛擬私有雲使用 Cloud Service Mesh,請參閱「設定多叢集服務中介網」。
- 如要進一步瞭解 Cloud Service Mesh,請參閱 Cloud Service Mesh 總覽。