本頁說明如何在 Google Kubernetes Engine (GKE) 中部署服務。本頁面提供指南,協助您進一步瞭解服務網路的各個面向,以及 GKE 中的服務網路功能。
Service 網路總覽
服務網路會發布應用程式,但會將用戶端使用的應用程式基礎擁有權、實作或環境抽象化。最簡單的說法是,Service 是安全、一致且可用的端點,應用程式可透過這個端點存取。
用戶端和應用程式的通訊方式和需求各不相同。您可以簡單地在 Kubernetes 叢集中公開應用程式,供 Pod 使用,也可以從全球各地的網際網路用戶端將流量轉送至應用程式,複雜程度不一。GKE 提供多種方法,可將應用程式公開為服務,以符合您的獨特用途。
服務的要素
向用戶端公開應用程式時,需要用到服務的三個重要元素:
前端:負載平衡器前端會定義範圍,讓用戶端可存取負載平衡器並將流量傳送至負載平衡器。這是監聽流量的網路位置。這項服務具有網路、特定區域 (或網路內的子網路)、網路中的一或多個 IP、連接埠、特定通訊協定,以及用於建立安全連線的 TLS 憑證。
轉送和負載平衡:轉送和負載平衡定義流量的處理和轉送方式。您可以根據通訊協定、HTTP 標頭和 HTTP 路徑等參數,將流量轉送至服務。視您使用的負載平衡器而定,負載平衡器可能會平衡流量,為顧客提供較低的延遲時間和更高的復原能力。
後端:負載平衡器後端是由端點類型、應用程式平台和後端服務探索整合所定義。GKE 會使用服務探索整合功能,在 GKE 端點啟動和關閉時,動態更新負載平衡器後端。
下圖說明內部和外部流量的這些概念:
在這張圖中,外部應用程式負載平衡器會透過全球數百個 Google 服務點,監聽公開網際網路上的流量。這個全球前端會在流量抵達用戶端附近的邊緣時終止流量,然後將流量負載平衡至 Google 資料中心的後端。
內部應用程式負載平衡器會在虛擬私有雲網路範圍內接聽要求,允許內部進行私人通訊。這些負載平衡器屬性適合用於不同類型的應用程式用途。
瞭解 GKE 負載平衡
如要在 GKE 叢集外部公開應用程式,GKE 提供內建的 GKE Ingress 控制器和 GKE 服務控制器,可代表 GKE 使用者部署負載平衡器。這與 VM 負載平衡基礎架構相同,但生命週期完全由 GKE 自動化控制。GKE 網路控制器提供容器原生 Pod IP 負載平衡,使用符合 Ingress 和 Service API 標準的意見式高階介面。
下圖說明 GKE 網路控制器如何自動建立負載平衡器:
如圖所示,基礎架構或應用程式管理員會針對 GKE 叢集部署宣告式資訊清單。Ingress 和 Service 控制器會監控 GKE 網路資源 (例如 Ingress 物件),並根據資訊清單部署負載平衡器 (以及 IP 位址、防火牆規則等)。
控制器會根據環境和流量變化,持續管理負載平衡器和後端。因此,GKE 負載平衡器會成為動態且可自我維持的負載平衡器,並提供以開發人員為導向的介面。
選擇公開應用程式的方法
在 GKE 中選擇應用程式公開方式時,應考量的核心因素包括用戶端網路、通訊協定和應用程式區域性。透過 GKE 的 Ingress 和 Service 控制器套件,您可以根據上述各項因素公開應用程式。
雖然下列各節並未涵蓋應用程式網路的每個層面,但逐一瞭解下列因素,有助於判斷哪些解決方案最適合您的應用程式。大多數 GKE 環境會代管許多不同類型的應用程式,這些應用程式都有獨特的需求,因此您可能會在任何指定叢集中使用多個應用程式。
如需 Ingress 功能的詳細比較,請參閱「Ingress 設定」。
用戶端網路
用戶端網路是指應用程式用戶端存取應用程式時使用的網路。這會影響負載平衡器的前端應監聽的位置。舉例來說,用戶端可能與應用程式位於相同的 GKE 叢集中。在這種情況下,他們會從叢集網路內存取應用程式,因此可以使用 Kubernetes 原生ClusterIP 負載平衡。
用戶端也可能是內部網路用戶端,可從虛擬私有雲 (VPC) 內存取應用程式,或透過 Cloud Interconnect 從地端部署網路存取應用程式。
用戶端也可能是外部用戶端,透過公開網際網路存取應用程式。不同類型的網路會決定不同的負載平衡拓撲。
在 GKE 中,您可以選擇內部或外部負載平衡器。內部是指虛擬私有雲網路,這是無法直接從網際網路存取的內部私人網路。外部是指公開網際網路。ClusterIP 服務屬於單一 GKE 叢集內部服務,因此範圍比虛擬私有雲網路更小。
下表概略說明內部和外部網路可用的解決方案。
| 網路類型 | 可用的解決方案 |
|---|---|
| 內部 |
ClusterIP 服務
NodePort 服務 內部 LoadBalancer 服務 內部 Ingress |
| 外部 |
NodePort 服務1
外部 LoadBalancer 服務 外部 Ingress 多叢集 Ingress |
1 使用 --no-enable-private-nodes 旗標的 GKE 叢集可以同時擁有公用和私人 IP 位址的節點,因此 NodePort 服務可從內部和外部存取。
通訊協定
通訊協定是用戶端與應用程式溝通的語言。語音、遊戲和低延遲應用程式通常會直接使用 TCP 或 UDP,因此需要可在第 4 層進行精細控制的負載平衡器。其他應用程式則使用 HTTP、HTTPS、gRPC 或 HTTP2,因此需要明確支援這些通訊協定的負載平衡器。通訊協定規定會進一步定義最適合的應用程式曝光方法類型。
在 GKE 中,您可以設定第 4 層負載平衡器 (根據通訊埠和通訊協定等網路資訊路由流量),以及第 7 層負載平衡器 (可感知用戶端工作階段等應用程式資訊)。如下表所示,每種負載平衡器支援的通訊協定都不盡相同:
| 資料層 | 通訊協定 | 可用的解決方案 |
|---|---|---|
| L4 | TCP UDP |
ClusterIP 服務
NodePort 服務 內部 LoadBalancer 服務 外部 LoadBalancer 服務 |
| L7 |
HTTP
HTTPS HTTP2 |
內部 Ingress
外部 Ingress 多叢集 Ingress |
應用程式區域性
應用程式區域性是指應用程式在多個區域或 GKE 叢集之間的分散程度。與在兩個獨立的 GKE 叢集中託管應用程式的備援執行個體相比,託管單一應用程式執行個體有不同的需求。在五個 GKE 叢集上託管地理位置分散的應用程式,將工作負載放在更靠近使用者的位置,以縮短延遲時間,這需要負載平衡器具備更多多叢集和多區域意識。
您可以將 GKE 負載平衡解決方案的區域性分為兩大類:
後端範圍 (或叢集範圍):這個範圍是指負載平衡器是否能將流量傳送至多個 GKE 叢集的後端。多叢集 Ingress 可公開單一虛擬 IP 位址,將流量導向不同叢集和區域的 Pod。
前端範圍:這個範圍是指負載平衡器 IP 是在單一區域內接聽,還是跨多個區域接聽。所有外部負載平衡器都會監聽網際網路,網際網路本質上就是多區域,但部分內部負載平衡器只會在單一區域內監聽。
下表依據這兩個維度,細分 GKE 負載平衡解決方案。
| 後端範圍 (叢集範圍) |
可用的解決方案 |
|---|---|
| 單一叢集 |
ClusterIP 服務
NodePort 服務 內部 LoadBalancer 服務 外部 LoadBalancer 服務 內部 Ingress 外部 Ingress |
| 多叢集 | 多叢集 Ingress |
| 前端範圍 | 可用的解決方案 |
|---|---|
| 區域 |
ClusterIP 服務
內部 Ingress |
| 全球 |
ClusterIP 服務
NodePort 服務 內部 LoadBalancer 服務 外部 LoadBalancer 服務 外部 Ingress 多叢集 Ingress |
其他應用程式曝光解決方案
上述解決方案並非唯一可用的應用程式公開方式。 下列解決方案也可能取代或輔助 GKE 負載平衡器。
叢集內 Ingress
叢內 Ingress 是指軟體 Ingress 控制器,這類控制器會在 Kubernetes 叢集內代管 Ingress 代理程式。這與 GKE Ingress 控制器不同,後者會獨立於 Kubernetes 叢集,代管及管理負載平衡基礎架構。這些第三方解決方案通常由叢集運算子自行部署及管理。 istio-ingressgateway 和 nginx-ingress 是兩個常用的開放原始碼叢集內 Ingress 控制器範例。
叢集內 Ingress 控制器通常符合 Kubernetes Ingress 規格,並提供不同的功能和易用性。開放原始碼解決方案可能需要更密切的管理和更高階的技術專業知識,但如果提供應用程式所需的特定功能,或許就能滿足您的需求。此外,開放原始碼社群也建構了龐大的企業 Ingress 解決方案生態系統,提供進階功能和企業支援服務。
獨立網路端點群組 (NEG)
GKE Ingress 和 Service 控制器提供自動化、宣告式和 Kubernetes 原生方法,可部署 Cloud Load Balancing。手動為 GKE 後端部署負載平衡器也有其用途,例如直接且更精細地控管負載平衡器,或在容器和 VM 後端之間平衡負載。
獨立 NEG 可動態更新 NEG 的 Pod 後端 IP,但允許手動部署負載平衡器的前端,因此提供這項功能。這樣一來,您就能直接控管負載平衡器,同時保留由 GKE 叢集控管的動態後端。
服務網格
服務網格透過集中式控制層提供用戶端負載平衡。Cloud Service Mesh 可跨 GKE 叢集、跨區域,以及在容器和 VM 之間,進行內部流量的負載平衡。這模糊了內部負載平衡 (東西向流量) 和應用程式曝光 (南北向流量) 之間的界線。現代服務網格控制層的彈性和涵蓋範圍,比以往更有可能將用戶端和伺服器納入同一服務網格範圍。上述 GKE Ingress 和 Service 解決方案通常會為沒有專屬 Sidecar Proxy 的用戶端部署中介 Proxy 負載平衡器。不過,如果用戶端和伺服器位於同一個網格中,則可使用網格處理應用程式曝光,而非中介 Proxy 負載平衡。