LoadBalancer 服務參數


本頁面說明服務資訊清單的參數,這些參數可控管 LoadBalancer 服務的行為和設定。閱讀本頁面之前,請先熟悉 Google Kubernetes Engine (GKE) LoadBalancer 服務概念

服務參數

GKE 支援 LoadBalancer 服務的下列參數。

參數 服務欄位和說明 內部 外部 版本支援
內部直通式網路負載平衡器 networking.gke.io/load-balancer-type: "Internal"

指示 GKE 建立內部直通式網路負載平衡器。

如果將服務資訊清單套用至已啟用 GKE 子集的叢集,負載平衡器會使用 GCE_VM_IP NEG 後端。如果將 Service 資訊清單套用至未啟用 GKE 子集的叢集,負載平衡器會使用執行個體群組後端。

詳情請參閱「 節點分組 」。

所有支援的版本。
後端服務型外部直通式網路負載平衡器 cloud.google.com/l4-rbs: "enabled"

指示 GKE 建立以後端服務為基礎的外部直通式網路負載平衡器。

如果將服務資訊清單套用至執行 GKE 1.32.2-gke.1652000 以上版本的叢集,負載平衡器就會使用 GCE_VM_IP NEG 後端。如果將服務資訊清單套用至執行舊版支援 GKE 版本的叢集,負載平衡器會使用執行個體群組後端。

詳情請參閱「 節點分組 」。

GKE 1.25.5
加權負載平衡 networking.gke.io/weighted-load-balancing: "pods-per-node"

讓處理流量的 Pod 數量較多的節點,相較於處理流量的 Pod 數量較少的節點,能接收較多比例的新連線。

GKE 1.31.0 以上版本
內部流量政策 spec.internalTrafficPolicy

設為 Local 時,GKE 只會將封包從節點上的用戶端 Pod 轉送至同一節點上的服務 Pod。設為 Cluster 時,GKE 會將節點上用戶端 Pod 的封包,轉送至任何節點上的服務 Pod。詳情請參閱「 服務內部流量政策」。

執行 GKE Dataplane V2 的叢集不支援這項參數。

GKE 1.22 以上版本
外部流量政策 spec.externalTrafficPolicy

控制哪些節點 VM 會通過負載平衡器健康狀態檢查,以及封包如何路由至叢集中已準備好且正在提供服務的 Pod。此外,啟用 GKE 子集時,這項設定也會控管節點分組到 GCE_VM_IP NEG 的方式。

詳情請參閱「 LoadBalancer 服務概念」。

GKE 1.14 以上版本 (Windows 節點集區則為 1.23.4-gke.400 以上版本)。
健康狀態檢查通訊埠 spec.healthCheckNodePort

為 LoadBalancer 服務部署負載平衡器健康狀態檢查。只有在將 spec.externalTrafficPolicy 設為 Local 時,這項參數才有效。

所有支援的版本。
防火牆規則和來源 IP 位址允許清單 spec.loadBalancerSourceRanges

在 GKE 和虛擬私有雲網路中設定選用的防火牆規則,只允許特定來源範圍。kube-proxy 也會設定 iptables 規則,以比對指定的來源範圍。

所有支援的版本。
靜態 IP 位址
  • spec.loadBalancerIP (僅限 IPv4)
  • networking.gke.io/load-balancer-ip-addresses

指定指派給負載平衡器轉送規則的靜態 IPv4 位址、靜態 IPv6 位址範圍,或兩者皆是。如需重要設定需求和實作詳細資料,請參閱「共用 IP 位址的注意事項」。

  • spec.loadBalancerIP:所有支援的版本。
  • networking.gke.io/load-balancer-ip-addresses: GKE 1.29 以上版本。如需其他叢集設定或註解規定,請參閱靜態 IP 位址參數
網路服務級別 cloud.google.com/network-tier

指定 GKE 用於外部轉送規則和 IP 位址的網路服務級別。註解的有效值為 StandardPremium (預設值)。

GKE 1.19 以上版本。
自訂子網路
  • networking.gke.io/internal-load-balancer-subnet
  • networking.gke.io/load-balancer-subnet

(僅適用於 IPv6)
  • networking.gke.io/internal-load-balancer-subnet:所有支援版本
  • networking.gke.io/load-balancer-subnet: GKE 1.29 以上版本。如要查看其他規定,請參閱「自訂子網路註解」。
全域存取權 networking.gke.io/internal-load-balancer-allow-global-access: "true"

讓虛擬私有雲網路或連線網路中任何區域的用戶端,都能存取轉送規則的 IP 位址。

在 GKE 1.16 以上版本中提供預覽功能。GKE 1.17.9-gke.600 以上版本已全面推出這項功能。
所有連接埠

如果 spec.ports[].port 中指定超過五個 (最多 100 個) 不重複的通訊埠,GKE 會自動設定轉送規則,使用所有通訊埠。

GKE 1.18.19-gke.1400 以上版本
ipFamilyPolicy

spec.ipFamilyPolicy

定義 GKE 如何將 IP 位址分配給服務。 您可以將 spec.ipFamilyPolicy 定義為 SingleStackPreferDualStackRequireDualStack

詳情請參閱「 IPv4/IPv6 雙重堆疊服務」。

1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。
ipFamilies (選填)

spec.ipFamilies

定義要分配單一堆疊或雙重堆疊服務的 IP 位址系列。請使用下列任一值:

  • IPv4 僅適用於單一堆疊 IPv4 服務。
  • IPv6,僅適用於 IPv6 服務。
  • IPv4,IPv6:適用於雙堆疊 Service,其中 Service 的主要 IP 位址為 IPv4。
  • IPv6,IPv4:適用於雙堆疊 Service,其中 Service 的主要 IP 位址為 IPv6。
1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。

健康狀態檢查通訊埠

如「負載平衡器健康檢查」一文所述,GKE 建立外部直通式網路負載平衡器或內部直通式網路負載平衡器時,一律會部署負載平衡器健康檢查。

能否設定 healthCheckNodePort 參數取決於下列 externalTrafficPolicy 設定:

externalTrafficPolicy 健康狀態檢查通訊埠
Cluster

您無法使用 spec.healthCheckNodePort

Local

您可以使用 spec.healthCheckNodePort 選取自訂連接埠。如未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。

防火牆規則和來源 IP 位址允許清單

除非您已設定叢集略過為 LoadBalancer Service 建立虛擬私有雲防火牆規則,否則 GKE 會為每個 Service 建立允許輸入的虛擬私有雲防火牆規則

自動建立的防火牆規則具有下列特性:

  • 防火牆規則的方向為輸入,動作為允許。 Google Cloud默示拒絕輸入防火牆規則表示 GKE 在建立輸入防火牆規則時,會使用允許清單模型。
  • GKE 會將防火牆規則的通訊協定和目的地通訊埠,設為 Service spec.ports[] 清單中指定的通訊協定和目的地通訊埠。
  • GKE 會將 destination 參數明確設為 LoadBalancer 的虛擬 IP 位址 (負載平衡器的轉送規則),藉此為 LoadBalancer Service 設定防火牆規則。
  • GKE 會將防火牆規則的目標參數設為包含叢集的所有節點。
  • 如果服務包含 spec.loadBalancerSourceRanges[],GKE 會將防火牆規則的來源參數設為該清單中的 IP 位址。此外,GKE 會在節點作業系統中設定路徑和規則,使用 kube-proxyiptables (舊版資料平面) 或 cilium-agent 和 eBPF 規則 (GKE Dataplane V2),限制負載平衡流量的來源 IP 位址。如果服務不包含 loadBalancerSourceRanges[],GKE 會將防火牆規則的來源參數設為所有 IP 位址 (0.0.0.0/0)

靜態 IP 位址

您可以建立靜態 IP 位址,並設定 GKE 將該靜態位址指派給負載平衡器的轉送規則。使用靜態 IP 位址可確保即使變更 LoadBalancer Service,負載平衡器的 IP 位址仍維持不變。如果沒有靜態 IP 位址,當您更新 LoadBalancer Service 時,GKE 可能會為負載平衡器轉送規則指派其他 IP 位址。轉送規則 IP 位址並非與服務的 spec.clusterIP 位址相同。更新 LoadBalancer 服務時,服務的 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 Service 指定靜態內部 IPv4 位址。您可以為僅限 IPv4 的 External LoadBalancer Service 指定靜態外部 IPv4 位址。這個參數適用於所有支援的 GKE 版本。

networking.gke.io/load-balancer-ip-addresses:
IP_ADDRESS_RESOURCE_NAME
  • 如果是單一堆疊 LoadBalancer 服務,請將註解的值設為 IPv4 或 IPv6 位址資源的「名稱」,而非 IP 位址本身。
  • 如果是雙堆疊 LoadBalancer 服務,請將註解值設為靜態 IPv4 位址資源名稱和靜態 IPv6 位址範圍資源名稱,並以半形逗號分隔。

您可以為僅限 IPv4、僅限 IPv6 和雙重堆疊的內部和外部 LoadBalancer 服務,指定靜態 IPv4 位址、靜態 IPv6 位址範圍,或同時指定兩者。註解需要 GKE 1.29 以上版本,以及下列額外需求:

  • 如要將此註解與 Internal LoadBalancer 服務搭配使用,您必須在啟用 GKE 子集後,在叢集中建立 Internal LoadBalancer 服務。
  • 如要搭配使用此註解與 External LoadBalancer 服務,您必須在建立 External LoadBalancer 服務時,將 cloud.google.com/l4-rbs: "enabled" 註解加入服務資訊清單。

共用 IP 位址的注意事項

如果每個負載平衡器的轉送規則使用不重複的 IP 位址、通訊協定、通訊埠規格和網路服務層級規格組合 (如本節表格所示),則兩個以上的 LoadBalancer 服務可以參照同一個靜態 IP 位址。此外:

  • 靜態 IPv6 位址實際上是 /96 IPv6 位址範圍,但 GKE 只會設定節點,接受 /96 範圍內的第一個 IPv6 位址 (/128) 的封包。

  • 如要讓兩個以上的 Internal LoadBalancer 服務使用相同的內部 IPv4 位址或內部 IPv6 位址範圍,必須使用 SHARED_LOADBALANCER_VIP 目的建立靜態 IP 位址。

內部 LoadBalancer 服務 外部 LoadBalancer 服務
通訊埠規格

內部直通式網路負載平衡器的轉送規則最多支援五個個別通訊埠號碼,也可以設定為使用所有通訊埠。

如果 Internal LoadBalancer 服務指定超過五個 spec.ports[],GKE 會設定內部直通式網路負載平衡器的轉送規則,以使用所有連接埠。

如果轉送規則的 IP 位址和通訊協定相同,通訊埠就不得重疊。也就是說,您無法建立多個共用相同 IP 位址、通訊協定和通訊埠的 Internal LoadBalancer Service。例如:

  • 如果您使用 TCP 通訊埠 80 建立 Internal LoadBalancer 服務,就無法再使用 TCP 通訊埠 80、81 和 90 建立其他服務,因為通訊埠 80 會重疊。
  • 如果 Internal LoadBalancer 服務使用 TCP 通訊埠 80、8080 和 90,您就無法在所有通訊埠上使用 TCP 建立其他服務,因為這樣也會導致通訊埠重疊

詳情請參閱: 使用共用 IP 位址的內部直通式網路負載平衡器轉送規則

如果 LoadBalancer 服務資訊清單缺少 cloud.google.com/l4-rbs: "enabled" 註解,GKE 會建立以目標集區為基礎的外部直通式網路負載平衡器。

以目標集區為基礎的外部直通式網路負載平衡器轉送規則必須使用連續的通訊埠範圍。連續埠範圍包含服務所需的所有埠,但範圍也可能包含服務未使用的其他埠。舉例來說,由目標集區驅動的外部 LoadBalancer Service,是以外部直通式網路負載平衡器為基礎,並在 Service 資訊清單中指定通訊埠 80 和 443,因此會使用通訊埠範圍為 80 到 443 的負載平衡器轉送規則。這個通訊埠範圍可防止其他 External LoadBalancer 服務使用通訊埠 80、443,以及介於 80 和 443 之間的任何數字。

如果 LoadBalancer 服務資訊清單包含 cloud.google.com/l4-rbs: "enabled" 註解,GKE 會建立以後端服務為基礎的外部直通式網路負載平衡器。以服務為基礎的外部直通式網路負載平衡器轉送規則,最多支援五個不連續的通訊埠編號,或是一個連續的通訊埠範圍。

網路服務級別 無法設定,內部位址一律為進階級。

可設定靜態區域外部 IPv4 位址。靜態地區外部 IPv6 位址範圍只能在進階級中建立。

靜態外部 IP 位址的網路服務級別規格必須符合下列任一條件:

  • LoadBalancer 服務資訊清單的 cloud.google.com/network-tier 註解中指定的層級 (如果資訊清單中存在該註解),或
  • 如果 LoadBalancer 服務資訊清單中沒有 cloud.google.com/network-tier 註解,則為專案的預設層級。

除非您另行設定,否則專案的預設層級為「進階」。

保留 IP 位址

GKE 不會保留使用 spec.loadBalancerIP 設定的靜態 IP 位址。也就是說,當您刪除服務時,指派給服務的 IP 位址可能會釋出。

如要保留 IP 位址,您必須在專案中手動建立位址資源。為這項資源命名時,請勿使用內部負載平衡器名稱、k8s- 等前置字串,或服務的 UUID。

如果您未自行保留地址,專案記錄可能會包含有關建立地址資源並隨即移除的項目。這是正常服務供應程序的一部分,因此應屬預期情況。

LoadBalancer 子網路

您可以設定 Internal LoadBalancer 服務,在與叢集位於相同區域和虛擬私有雲網路的自訂子網路中,使用暫時性或靜態 IPv4 位址、IPv6 位址範圍或兩者。為 Internal LoadBalancer 服務使用自訂子網路,以便:

  • 將同一個 VPC 網路和區域中,兩個以上 GKE 叢集的 Internal LoadBalancer 服務所建立的內部直通式網路負載平衡器分組。
  • 建立內部 LoadBalancer 服務,這些服務的內部直通網路負載平衡器具有與叢集節點 IPv4 位址不同的 IPv4 位址。
  • 在雙重堆疊叢集中,建立 Internal LoadBalancer 服務,其內部直通網路負載平衡器的 IPv6 位址範圍與叢集的節點和 Pod IPv6 位址不同。如果叢集的子網路具有外部 IPv6 位址範圍,就必須使用自訂 LoadBalancer 子網路,才能支援 Internal LoadBalancer 服務。

您可以設定 External LoadBalancer 服務,在與叢集位於相同地區和虛擬私有雲網路的自訂子網路中,使用臨時或靜態 IPv6 位址範圍。使用自訂子網路建立外部 LoadBalancer 服務,這類服務的外部直通式網路負載平衡器具有與叢集節點和 Pod IPv6 位址不同的 IPv6 位址範圍。如要在雙堆疊叢集中支援外部 LoadBalancer 服務,就必須使用自訂 LoadBalancer 子網路,因為叢集的子網路具有內部 IPv6 位址範圍。

自訂子網路註解

使用下列其中一個註解,指示 LoadBalancer 服務在自訂子網路中使用臨時或靜態 IP 位址。如果 LoadBalancer 服務資訊清單同時包含這兩個註解,只要符合註解需求,系統就會優先採用 networking.gke.io/load-balancer-subnet 註解。

註解和值 需求和功能
networking.gke.io/internal-load-balancer-subnet:
SUBNET_RESOURCE_NAME

您只能使用註解,為僅限 IPv4 的內部 LoadBalancer 服務指定自訂子網路。註解適用於所有支援的 GKE 版本。

networking.gke.io/load-balancer-subnet:
SUBNET_RESOURCE_NAME

您可以為僅限 IPv4、僅限 IPv6 或雙重堆疊的 Internal LoadBalancer 服務指定自訂子網路。您可以為僅支援 IPv6 或雙重堆疊的 External LoadBalancer Service 指定自訂子網路。註解需要 GKE 1.29 以上版本,以及下列額外需求:

  • 如要使用此註解為內部 LoadBalancer 服務指定自訂子網路,您必須先啟用 GKE 子網路,然後在叢集中建立內部 LoadBalancer 服務。
  • 如要使用此註解為 External LoadBalancer Service 指定自訂子網路,建立 External LoadBalancer Service 時,必須在 Service 資訊清單中加入 cloud.google.com/l4-rbs: "enabled" 註解。

Internal LoadBalancer 服務的子網路和 IPv4 位址

下表說明僅限 IPv4 或雙重堆疊的內部 LoadBalancer 服務適用的子網路規格和 IPv4 位址組合。

靜態 IPv4 位址 臨時 IPv4 位址
自訂子網路
自訂子網路和靜態 IPv4 位址:靜態內部 IPv4 位址必須是在自訂子網路的主要 IPv4 位址範圍內建立。 自訂子網路和暫時性 IPv4 位址:GKE 會使用自訂子網路主要 IPv4 位址範圍中未分配的內部 IPv4 位址。
叢集子網路 叢集子網路和靜態 IPv4 位址:靜態內部 IPv4 位址必須在叢集子網路的主要 IPv4 位址範圍內建立。 叢集子網路和臨時 IPv4 位址:GKE 會使用叢集子網路主要 IPv4 位址範圍中未分配的內部 IPv4 位址。

Internal 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 位址範圍 (存取類型 INTERNAL)。
叢集子網路和靜態 IPv6 位址範圍:靜態內部 /96 IPv6 位址範圍必須在叢集子網路的內部 /64 IPv6 位址範圍中建立。 叢集子網路和暫時性 IPv6 位址範圍: GKE 會使用叢集子網路內部 /64 IPv6 位址範圍中,未分配的內部 /96 IPv6 位址範圍。

External LoadBalancer 服務的子網路和 IPv4 位址

對於僅限 IPv4 和雙堆疊的 External LoadBalancer 服務,外部 IPv4 位址 (無論是靜態外部 IPv4 位址或臨時外部 IPv4 位址) 並非來自子網路。

External LoadBalancer 服務的子網路和 IPv6 位址範圍

下表說明僅限 IPv6 或雙堆疊外部負載平衡器服務的有效子網路規格和 IPv6 位址範圍組合。即使外部直通式網路負載平衡器 IPv6 轉送規則使用外部 /96 IPv6 位址範圍,GKE 也只會設定節點,接受目的地與轉送規則 /96 範圍的第一個 IPv6 位址 (/128) 相符的封包。

靜態 IPv6 位址範圍 臨時 IPv6 位址範圍
自訂雙堆疊子網路
自訂子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須是在自訂子網路的外部 /64 IPv6 位址範圍中建立。靜態外部 IPv6 位址範圍只能在進階級中建立。 自訂子網路和暫時性 IPv6 位址範圍: GKE 會使用自訂子網路外部 /64 IPv6 位址範圍中,未分配的外部 /96 IPv6 位址範圍。
叢集雙重堆疊子網路
  • 必須有外部 IPv6 位址範圍 (存取權類型 EXTERNAL)。
叢集子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須在叢集子網路的外部 /64 IPv6 位址範圍中建立。靜態外部 IPv6 位址範圍只能在進階級中建立。 叢集子網路和暫時性 IPv6 位址範圍: GKE 會使用叢集子網路外部 /64 IPv6 位址範圍中,未分配的外部 /96 IPv6 位址範圍。

全域存取權

如果內部負載平衡器服務的 networking.gke.io/internal-load-balancer-allow-global-access 註解為 false 或未指定,GKE 會建立內部直通式網路負載平衡器,其轉送規則會停用全域存取權。停用全域存取權後,如要存取負載平衡器,用戶端必須位於相同區域和虛擬私有雲網路,或是連線至叢集虛擬私有雲網路的網路。

如果內部 LoadBalancer 服務的 networking.gke.io/internal-load-balancer-allow-global-access 註解為 true,GKE 會在內部直通式網路負載平衡器的轉送規則中啟用全域存取權選項。 位於虛擬私有雲網路任何區域的用戶端,或連線至叢集虛擬私有雲網路的網路,都可以存取負載平衡器。

如要進一步瞭解全域存取權如何套用至連線網路中的用戶端,請參閱:

所有通訊埠轉送規則

內部直通式網路負載平衡器的轉送規則支援五個不重複的通訊埠號碼或所有通訊埠。

在 GKE 中,Internal LoadBalancer Service 在 Service 的 spec.ports[].port 中最多只能支援 100 個通訊埠。如果內部 LoadBalancer 服務定義最多五個通訊埠,轉送規則會包含這些特定通訊埠。不過,如果服務指定超過五個通訊埠,轉送規則會自動設定為比對所有通訊埠。設定轉送規則以使用所有通訊埠時,GKE 只會為 Service 中 spec.ports[].port 設定的特定通訊埠建立允許輸入的防火牆規則。

如要進一步瞭解內部直通式網路負載平衡器轉送規則和有效連接埠規格,請參閱「轉送規則和連接埠規格」。

IPv4/IPv6 雙重堆疊 LoadBalancer 服務

您可以建立單一堆疊 (僅限 IPv4 或 IPv6) 或雙重堆疊的內部或外部 LoadBalancer 服務。單一堆疊 LoadBalancer 服務會建立單一轉送規則,並使用 IPv4 位址或 IPv6 位址。雙重堆疊 LoadBalancer 服務會建立兩個轉送規則:一個使用 IPv4 位址,另一個使用 IPv6 位址。如要建立 IPv4/IPv6 雙重堆疊 LoadBalancer 服務,請將其部署在 IPv4/IPv6 雙重堆疊叢集上,並根據使用的負載平衡器類型完成下列任一操作:

您可以為每個服務定義 ipFamilyPolicyipFamilies 規格。詳情請參閱「IPv4/IPv6 雙重堆疊」。

雙堆疊 LoadBalancer 服務的限制

  • 只有堆疊類型為 ipv4-ipv6 的叢集,才支援使用 IPv6 位址的 LoadBalancer 服務。詳情請參閱為虛擬私有雲原生叢集使用雙堆疊 IP 位址
  • 使用單一堆疊位址建立的 LoadBalancer 服務無法升級為雙堆疊服務。

  • 使用雙堆疊位址建立的 LoadBalancer 服務可根據下列條件變更為單一堆疊:

    • ipFamilies 為 ["IPv4","IPv6"] 的 Service 可以變更為 ipFamilies 為 IPv4 的 Service,但不能變更為 IPv6
    • ipFamilies 為 ["IPv6","IPv4"] 的 Service 可以變更為 ipFamilies 為 IPv6 的 Service,但不能變更為 IPv4