本頁面說明服務資訊清單的參數,這些參數可控制 LoadBalancer 服務的行為和設定。閱讀本頁面之前,請務必先熟悉 Google Kubernetes Engine (GKE) LoadBalancer 服務概念。
服務參數
GKE 支援 LoadBalancer 服務的下列參數。
| 參數 | 服務欄位和說明 | 內部 | 外部 | 版本支援 |
|---|---|---|---|---|
| 內部直通式網路負載平衡器 |
指示 GKE 建立內部直通式網路負載平衡器。 如果符合下列任一條件,負載平衡器會使用
在所有其他情況下,負載平衡器會使用執行個體群組後端。詳情請參閱「 節點分組」。 |
如果叢集使用 GKE 1.33.1-gke.1779000 以上版本,且已啟用 GKE 子集,建議使用 |
||
| 以後端服務為基礎的區域性外部直通式網路負載平衡器 |
指示 GKE 建立區域性外部直通式網路負載平衡器。 如果符合下列任一條件,負載平衡器會使用
在所有其他情況下,負載平衡器會使用執行個體群組後端。詳情請參閱「 節點分組」。 |
如果叢集使用 GKE 1.33.1-gke.1779000 至 1.36 版,建議使用 |
||
| 加權負載平衡 | networking.gke.io/weighted-load-balancing: "pods-per-node"
與處理流量的 Pod 數量較少的節點相比,處理流量的 Pod 數量較多的節點可接收較大比例的新連線。 |
GKE 1.31.0+ | ||
| 內部流量政策 | spec.internalTrafficPolicy
如果設為 執行 GKE Dataplane V2 的叢集不支援這項參數。 |
GKE 1.22 以上版本 | ||
| 外部流量政策 | spec.externalTrafficPolicy
控制哪些節點 VM 會通過負載平衡器健康狀態檢查,以及封包如何轉送至叢集中已準備好提供服務的 Pod。此外,啟用 GKE 子集時,這項設定也會控管節點分組到 詳情請參閱「 LoadBalancer 服務概念」。 |
GKE 1.14 以上版本 (Windows 節點集區則為 1.23.4-gke.400 以上版本)。 | ||
| 可用區相依性 | spec.trafficDistribution: PreferSameZone
為內部 LoadBalancer 服務啟用區域親和性。可用區相依性可控管內部直通式網路負載平衡器將傳入流量轉送至哪個可用區,適用於可與可用區相符的用戶端。如要使用可用區親和性,必須啟用 GKE 子設定 (GKE 1.36 以上版本預設會啟用)。 詳情請參閱「 可用區親和性和流量分配」。 | GKE 1.33.3-gke.1392000 以上版本提供預先發布版。正式發布版適用於 GKE 1.36 以上版本。 | ||
| 健康狀態檢查通訊埠 | spec.healthCheckNodePort
為 LoadBalancer 服務部署負載平衡器健康狀態檢查。只有在將 |
所有支援的版本。 | ||
| 防火牆規則和來源 IP 位址許可清單 | spec.loadBalancerSourceRanges
在 GKE 和虛擬私有雲網路中設定選用的防火牆規則,只允許特定來源範圍。 |
所有支援的版本。 | ||
| 靜態 IP 位址 |
指定指派給負載平衡器轉送規則的靜態 IPv4 位址、靜態 IPv6 位址範圍,或兩者皆是。如需重要設定規定和實作詳細資料,請參閱「共用 IP 位址的注意事項」。 |
|
||
| 網路服務級別 | cloud.google.com/network-tier
指定 GKE 用於外部轉送規則和 IP 位址的網路服務級別。註解的有效值為 |
GKE 1.19 以上版本。 | ||
| 自訂子網路 |
|
(僅適用於 IPv6) |
|
|
| 全球存取 | networking.gke.io/internal-load-balancer-allow-global-access: "true"
啟用後,虛擬私有雲網路或連線網路中任何區域的用戶端,都能存取轉送規則的 IP 位址。 |
GKE 1.16 以上版本提供預先發布版。GKE 1.17.9-gke.600 以上版本正式發布。 | ||
| 所有通訊埠 | 如果在 |
GKE 1.18.19-gke.1400 以上版本 | ||
| ipFamilyPolicy |
定義 GKE 如何將 IP 位址分配給 Service。
您可以將 詳情請參閱「 IPv4/IPv6 雙重堆疊服務」。 |
1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。 | ||
| ipFamilies (選用) |
定義 IP 位址系列,以分配單一堆疊或雙重堆疊服務。請使用下列任一值:
|
1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。 |
健康狀態檢查通訊埠
如「負載平衡器健康狀態檢查」一文所述,GKE 建立區域外部直通式網路負載平衡器或內部直通式網路負載平衡器時,一律會部署負載平衡器健康狀態檢查。
能否設定 healthCheckNodePort 參數,取決於下列 externalTrafficPolicy 設定:
externalTrafficPolicy |
健康狀態檢查通訊埠 |
|---|---|
Cluster |
你無法使用 |
Local |
您可以使用 |
防火牆規則和來源 IP 位址許可清單
除非您已將叢集設定為略過建立 LoadBalancer Service 的虛擬私有雲防火牆規則,否則 GKE 會為每個 Service 建立允許輸入的虛擬私有雲防火牆規則。
每條自動建立的防火牆規則都具備以下特徵:
- 防火牆規則的方向為輸入,且動作為允許。隱含拒絕輸入防火牆規則 (位於 Google Cloud中) 表示 GKE 在建立輸入防火牆規則時,會使用允許清單模型。
- GKE 會將防火牆規則的通訊協定和目的地埠設為 Service 的
spec.ports[]清單中指定的項目。 - GKE 會將 destination 參數明確設為 LoadBalancer 的虛擬 IP 位址 (負載平衡器的轉送規則),藉此為 LoadBalancer Service 設定防火牆規則。
- GKE 會將防火牆規則的目標參數設為包含叢集的所有節點。
- 如果 Service 包含
spec.loadBalancerSourceRanges[],GKE 會將防火牆規則的來源參數設為該清單中的 IP 位址。此外,GKE 會在節點作業系統中設定路由和規則,使用kube-proxy和iptables(在不使用 GKE Dataplane V2 的叢集上) 或cilium-agent和 eBPF 規則 (在具有 GKE Dataplane V2 的叢集上),限制負載平衡流量的來源 IP 位址。如果 Service 不包含loadBalancerSourceRanges[],GKE 會將防火牆規則的來源參數設為所有 IP 位址(0.0.0.0/0)。
靜態 IP 位址
您可以建立靜態 IP 位址,並設定 GKE 將該靜態位址指派給負載平衡器的轉送規則。使用靜態 IP 位址可確保負載平衡器的 IP 位址維持不變,即使您變更 LoadBalancer 服務也一樣。如果沒有靜態 IP 位址,更新 LoadBalancer 服務時,GKE 可能會將不同的 IP 位址指派給負載平衡器轉送規則。轉送規則 IP 位址不等同於 Service 的 spec.clusterIP 位址。更新 LoadBalancer Service 時,Service 的 ClusterIP 位址不會變更。
靜態 IP 位址參數
如要指示 LoadBalancer 服務使用靜態 IP 位址,請使用 spec.loadBalancerIP 參數或 networking.gke.io/load-balancer-ip-addresses 註解。在 GKE 1.29 以上版本中,如果 Service 資訊清單同時包含參數和註解,則註解優先於 spec.loadBalancerIP。
| 參數或註解和值 | 需求和功能 |
|---|---|
spec.loadBalancerIP:IPv4_ADDRESS
|
您可以為僅限 IPv4 的 Internal LoadBalancer 服務指定靜態內部 IPv4 位址。您可以為僅限 IPv4 的外部 LoadBalancer 服務指定靜態外部 IPv4 位址。這個參數適用於所有支援的 GKE 版本。 |
networking.gke.io/load-balancer-ip-addresses:IP_ADDRESS_RESOURCE_NAME
|
您可以為僅支援 IPv4、僅支援 IPv6 和雙堆疊的內部與外部 LoadBalancer 服務,指定靜態 IPv4 位址、靜態 IPv6 位址範圍或兩者。這個註解需要 GKE 1.29 以上版本,並符合下列額外需求條件:
|
共用 IP 位址的注意事項
如果每個負載平衡器的轉送規則使用不重複的 IP 位址、通訊協定、通訊埠規格和網路服務級別規格組合,則兩個以上的 LoadBalancer 服務可以參照同一個靜態 IP 位址,如本節表格所示。此外:
靜態 IPv6 位址實際上是
/96IPv6 位址範圍,但 GKE 只會設定節點,接受/96範圍內的第一個 IPv6 位址 (/128) 上的封包。如要讓兩個以上的 Internal LoadBalancer 服務使用相同的內部 IPv4 位址或內部 IPv6 位址範圍,必須使用
SHARED_LOADBALANCER_VIP目的建立靜態 IP 位址。
| 內部 LoadBalancer 服務 | 外部 LoadBalancer 服務 | |
|---|---|---|
| 通訊埠規格 | 內部直通式網路負載平衡器的轉送規則最多支援五個個別通訊埠號碼,也可以設定為使用所有通訊埠。 如果內部 LoadBalancer 服務指定的 如果轉送規則的 IP 位址和通訊協定相同,通訊埠就不得重疊。也就是說,您無法建立多個共用相同 IP 位址、通訊協定和通訊埠的 Internal LoadBalancer 服務。例如:
詳情請參閱: 使用通用 IP 位址的內部直通式網路負載平衡器轉送規則。 |
如果叢集執行的 GKE 版本早於 1.37,且 LoadBalancer 服務資訊清單未將 以目標集區為基礎的區域外部直通式網路負載平衡器轉送規則,必須使用連續的通訊埠範圍。連續埠範圍包含服務所需的所有埠,但範圍也可能包含服務未使用的額外埠。舉例來說,由目標集區驅動的區域外部直通式網路負載平衡器,會指定服務資訊清單中的通訊埠 80 和 443,並使用通訊埠範圍為 80 到 443 的負載平衡器轉送規則。這個通訊埠範圍可防止其他外部 LoadBalancer 服務使用通訊埠 80、443,以及 80 到 443 之間的任何數字。 在 1.37 以上版本中,GKE 預設會建立後端服務型區域性外部直通式網路負載平衡器。在舊版中,如果 LoadBalancer 服務資訊清單包含設為 |
| 網路服務級別 | 無法設定,內部位址一律為進階級。 | 可設定靜態區域外部 IPv4 位址。靜態區域性外部 IPv6 位址範圍只能在進階級中建立。 靜態外部 IP 位址的網路服務級別規格必須符合下列任一條件:
除非您另行設定,否則專案的預設層級為「進階」。 |
預留 IP 位址
GKE 不會預留使用 spec.loadBalancerIP 或 networking.gke.io/load-balancer-ip-addresses 註解設定的靜態 IP 位址。也就是說,當您刪除服務時,指派給服務的 IP 位址可能會釋出。
如要保留 IP 位址,您必須在專案中手動建立位址資源。靜態 IP 位址必須具備下列屬性:
- 只能是區域性。
- 與叢集位於相同區域。
- 與 LoadBalancer 服務位於相同的網路服務級別。
- 名稱不得使用 LoadBalancer 名稱、
k8s-等前置字串,或服務的 UUID。
如果您未自行保留位址,專案記錄可能會包含建立及快速移除位址資源的項目。這是正常服務佈建的一部分,應在預期之內。
LoadBalancer 子網路
您可以設定 Internal LoadBalancer Service,在與叢集位於相同區域和虛擬私有雲網路的自訂子網路中,使用暫時性或靜態 IPv4 位址、IPv6 位址範圍,或同時使用兩者。為內部 LoadBalancer 服務使用自訂子網路,可:
- 將相同虛擬私有雲網路和區域中,兩個或多個 GKE 叢集的 Internal LoadBalancer 服務所建立的內部直通式網路負載平衡器分組。
- 建立內部 LoadBalancer Service,其內部直通式網路負載平衡器的 IPv4 位址與叢集的節點 IPv4 位址不同。
- 在雙重堆疊叢集中,建立內部 LoadBalancer 服務,其內部直通網路負載平衡器的 IPv6 位址範圍,與叢集的節點和 Pod IPv6 位址不同。如果叢集的子網路有外部 IPv6 位址範圍,就必須使用自訂 LoadBalancer 子網路,才能支援內部 LoadBalancer 服務。
您可以設定外部 LoadBalancer Service,在與叢集位於相同區域和虛擬私有雲網路的自訂子網路中,使用臨時或靜態 IPv6 位址範圍。使用自訂子網路建立外部 LoadBalancer 服務,其區域性外部直通式網路負載平衡器的 IPv6 位址範圍,與叢集的節點和 Pod IPv6 位址分開。如要在雙堆疊叢集中支援外部 LoadBalancer 服務,就必須使用自訂 LoadBalancer 子網路,因為叢集的子網路具有內部 IPv6 位址範圍。
自訂子網路註解
請使用下列其中一個註解,指示 LoadBalancer 服務在自訂子網路中使用臨時或靜態 IP 位址。如果 LoadBalancer Service 資訊清單同時包含這兩個註解,只要符合 networking.gke.io/load-balancer-subnet 註解的需求條件,系統就會優先採用該註解。
| 註解和值 | 規定和功能 |
|---|---|
networking.gke.io/internal-load-balancer-subnet:SUBNET_RESOURCE_NAME
|
您只能使用註解,為僅限 IPv4 的 Internal LoadBalancer 服務指定自訂子網路。註解適用於所有支援的 GKE 版本。 |
networking.gke.io/load-balancer-subnet:SUBNET_RESOURCE_NAME
|
您可以為僅限 IPv4、僅限 IPv6 或雙重堆疊的 Internal LoadBalancer 服務指定自訂子網路。您可以為僅支援 IPv6 或雙重堆疊的外部 LoadBalancer 服務指定自訂子網路。如要使用註解,必須使用 GKE 1.29 以上版本,並符合下列額外需求:
|
內部 LoadBalancer 服務的子網路和 IPv4 位址
下表說明僅限 IPv4 或雙重堆疊的 Internal LoadBalancer 服務,適用的子網路規格和 IPv4 位址組合。
靜態 IPv4 位址
|
臨時 IPv4 位址 | |
|---|---|---|
自訂子網路
|
自訂子網路和靜態 IPv4 位址:靜態內部 IPv4 位址必須在自訂子網路的主要 IPv4 位址範圍內建立。 | 自訂子網路和臨時 IPv4 位址:GKE 會使用自訂子網路主要 IPv4 位址範圍中未分配的內部 IPv4 位址。 |
| 叢集子網路 | 叢集子網路和靜態 IPv4 位址:靜態內部 IPv4 位址必須在叢集子網路的主要 IPv4 位址範圍內建立。 | 叢集子網路和暫時性 IPv4 位址:GKE 會使用叢集子網路主要 IPv4 位址範圍中未分配的內部 IPv4 位址。 |
內部 LoadBalancer 服務的子網路和 IPv6 位址範圍
下表說明僅限 IPv6 或雙重堆疊內部 LoadBalancer 服務的有效子網路規格和 IPv6 位址範圍組合。即使內部直通式網路負載平衡器 IPv6 轉送規則使用內部 /96 IPv6 位址範圍,GKE 也只會將節點設定為接受目的地與轉送規則 /96 範圍的第一個 IPv6 位址 (/128) 相符的封包。
| 靜態 IPv6 位址範圍 | 暫時性 IPv6 位址範圍 | |
|---|---|---|
自訂雙協定子網路
|
自訂子網路和靜態 IPv6 位址範圍:靜態內部 /96 IPv6 位址範圍必須在自訂子網路的內部 /64 IPv6 位址範圍內建立。 |
自訂子網路和暫時 IPv6 位址範圍:
GKE 會使用自訂子網路內部 /64 IPv6 位址範圍中,未分配的內部 /96 IPv6 位址範圍。
|
叢集雙協定子網路
|
叢集子網路和靜態 IPv6 位址範圍:靜態內部 /96 IPv6 位址範圍必須在叢集子網路的內部 /64 IPv6 位址範圍中建立。 |
叢集子網路和暫時 IPv6 位址範圍:
GKE 會使用叢集子網路內部 /64 IPv6 位址範圍中,未分配的內部 /96 IPv6 位址範圍。
|
外部 LoadBalancer 服務的子網路和 IPv4 位址
對於僅限 IPv4 和雙堆疊的 External LoadBalancer 服務,外部 IPv4 位址 (無論是靜態外部 IPv4 位址或臨時外部 IPv4 位址) 並非來自子網路。
外部 LoadBalancer 服務的子網路和 IPv6 位址範圍
下表說明僅支援 IPv6 或雙堆疊的 External LoadBalancer 服務,適用的子網路規格和 IPv6 位址範圍組合。雖然區域性外部直通式網路負載平衡器 IPv6 轉送規則使用外部 /96 IPv6 位址範圍,但 GKE 只會設定節點,接受目的地與轉送規則 /96 範圍的第一個 IPv6 位址 (/128) 相符的封包。
| 靜態 IPv6 位址範圍 | 暫時性 IPv6 位址範圍 | |
|---|---|---|
自訂雙協定子網路
|
自訂子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須在自訂子網路的外部 /64 IPv6 位址範圍內建立。靜態外部 IPv6 位址範圍只能在進階級建立。 |
自訂子網路和暫時 IPv6 位址範圍:
GKE 會使用自訂子網路外部 /64 IPv6 位址範圍中,未分配的外部 /96 IPv6 位址範圍。
|
叢集雙協定子網路
|
叢集子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須在叢集子網路的外部 /64 IPv6 位址範圍中建立。靜態外部 IPv6 位址範圍只能在進階級中建立。 |
叢集子網路和暫時 IPv6 位址範圍:
GKE 會使用叢集子網路外部 /64 IPv6 位址範圍中,未分配的外部 /96 IPv6 位址範圍。
|
全域存取權
如果內部 LoadBalancer 服務的 networking.gke.io/internal-load-balancer-allow-global-access
註解為 false 或未指定,GKE 會建立內部直通式網路負載平衡器,其轉送規則會停用全域存取權。停用全域存取權後,如要存取負載平衡器,用戶端必須位於相同區域和虛擬私有雲網路,或是連線至叢集虛擬私有雲網路的網路。
如果內部 LoadBalancer 服務的 networking.gke.io/internal-load-balancer-allow-global-access 註解為 true,GKE 會在內部直通式網路負載平衡器的轉送規則上啟用全域存取權選項。用戶端只要位於虛擬私有雲網路的任何區域,或連至叢集虛擬私有雲網路的網路,即可存取負載平衡器。
如要進一步瞭解全域存取權如何套用至連線網路中的用戶端,請參閱:
- 內部直通式網路負載平衡器文件中的「用戶端存取權」
- 內部直通式網路負載平衡器和相連網路
所有通訊埠轉送規則
內部直通式網路負載平衡器的轉送規則支援五個不重複的通訊埠號碼,或所有通訊埠。
在 GKE 中,內部 LoadBalancer 服務的 spec.ports[].port 最多只能支援 100 個通訊埠。如果內部 LoadBalancer 服務定義最多五個通訊埠,轉送規則就會包含這些特定通訊埠。不過,如果 Service 指定超過五個通訊埠,轉送規則會自動設為比對所有通訊埠。設定轉送規則以使用所有通訊埠時,GKE 只會為 Service 中 spec.ports[].port 上設定的特定通訊埠建立輸入允許防火牆規則。
如要進一步瞭解內部直通式網路負載平衡器轉送規則和有效的通訊埠規格,請參閱「轉送規則和通訊埠規格」。
IPv4/IPv6 雙重堆疊 LoadBalancer Service
您可以建立內部或外部 LoadBalancer Service,可以是單一堆疊 (僅限 IPv4 或僅限 IPv6) 或雙重堆疊。單一堆疊 LoadBalancer 服務會建立單一轉送規則,其中包含 IPv4 位址或 IPv6 位址。雙重堆疊 LoadBalancer 服務會建立兩項轉送規則:一項使用 IPv4 位址,另一項使用 IPv6 位址。如要建立 IPv4/IPv6 雙重堆疊 LoadBalancer 服務,請在 IPv4/IPv6 雙重堆疊叢集上部署該服務,並根據使用的負載平衡器類型完成下列任一操作:
- 如果是 Internal LoadBalancer 服務,您必須啟用 GKE 子設定。雙堆疊叢集預設會啟用 GKE 子集。詳情請參閱「啟用內部負載平衡器子設定」。
- 如果是 External LoadBalancer 服務,您必須使用以區域性後端服務為基礎的外部直通式網路負載平衡器。詳情請參閱「後端服務型外部網路負載平衡器」。
您可以為每個服務定義 ipFamilyPolicy 和 ipFamilies 規格。詳情請參閱「IPv4/IPv6 雙重堆疊」。
雙堆疊 LoadBalancer 服務的限制
- 只有堆疊類型為
ipv4-ipv6的叢集,才支援使用 IPv6 位址的 LoadBalancer 服務。詳情請參閱「為 VPC 原生叢集使用雙重堆疊 IP 位址」。 使用單一堆疊位址建立的 LoadBalancer 服務無法升級為雙堆疊服務。
使用雙重堆疊位址建立的 LoadBalancer 服務,可根據下列條件變更為單一堆疊:
- ipFamilies 為
["IPv4","IPv6"]的 Service 可變更為 ipFamilies 為IPv4的 Service,但無法變更為IPv6。 - ipFamilies 為
["IPv6","IPv4"]的 Service 可變更為 ipFamilies 為IPv6的 Service,但無法變更為IPv4。
- ipFamilies 為
後續步驟
- 瞭解 LoadBalancer Service。
- 瞭解如何設定內部負載平衡器。
- 閱讀應用程式負載平衡器的 Ingress 總覽。
- 瞭解如何使用獨立 NEG。
- 進一步瞭解虛擬私有雲防火牆規則。