LoadBalancer 服務參數

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

服務參數

GKE 支援下列 LoadBalancer Service 參數。

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

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

如果符合下列任一條件,負載平衡器會使用 GCE_VM_IP NEG 後端:

  • Service 資訊清單會套用至已啟用 GKE 子集的叢集。
  • Service 資訊清單會套用至執行 GKE 1.36 以上版本的叢集。GKE 1.36 以上版本會自動啟用 GKE 子設定。

在所有其他情況下,負載平衡器會使用執行個體群組後端。詳情請參閱節點分組。

  • spec.loadBalancerClass: networking.gke.io/l4-regional-internal:需要 GKE 1.33.1-gke.1779000 以上版本,「且」GKE 子集功能必須啟用。
  • networking.gke.io/load-balancer-type: "Internal":所有支援的版本。

如果叢集使用 GKE 1.33.1-gke.1779000 以上版本,且已啟用 GKE 子集,建議使用 spec.loadBalancerClass。這項屬性無法變更,將 Service 資訊清單套用至叢集後即無法變更。

後端服務型區域性外部直通式網路負載平衡器
  • GKE 1.37 以上版本的預設行為
  • spec.loadBalancerClass: networking.gke.io/l4-regional-external
  • cloud.google.com/l4-rbs: "enabled"

指示 GKE 建立區域性外部直通式網路負載平衡器。

如果符合下列任一條件,負載平衡器會使用 GCE_VM_IP NEG 後端:

  • Service 是在執行 GKE 1.37 以上版本的叢集中建立。不需要註解或類別。
  • Service 資訊清單包含 spec.loadBalancerClass: networking.gke.io/l4-regional-external,並套用至執行 GKE 1.33.1-gke.1779000 至 1.36 版本的叢集。
  • Service 資訊清單包含 cloud.google.com/l4-rbs: "enabled" 註解,並套用至執行 GKE 1.32.2-gke.1652000 至 1.36 版本的叢集。

在所有其他情況下,負載平衡器會使用執行個體群組後端。詳情請參閱節點分組。

  • spec.loadBalancerClass: networking.gke.io/l4-regional-external:需要 GKE 1.33.1-gke.1779000 以上版本。
  • cloud.google.com/l4-rbs: "enabled":所有支援的版本。

如果叢集使用 GKE 1.33.1-gke.1779000 至 1.36 版,建議使用 spec.loadBalancerClass。這項屬性不可變更,在 Service 資訊清單套用至叢集後即無法變更。在 GKE 1.37 以上版本中,這類負載平衡器不需要任何欄位。

加權負載平衡 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.trafficDistribution: PreferSameZone

為內部 LoadBalancer 服務啟用可用區親和性。可用區相依性可控管內部直通式網路負載平衡器,在可用區相符時,將相容用戶端的傳入流量轉送至哪個可用區。如要使用可用區親和性,您必須啟用 GKE 子設定 (GKE 1.36 以上版本預設啟用)。

詳情請參閱「可用區相似度和流量分配」。

GKE 1.33.3-gke.1392000 以上版本提供預先發布版。GKE 1.36 以上版本正式發布。
健康狀態檢查通訊埠 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 位址的網路服務級別。註解的有效值為 Standard 和 Premium (預設)。

GKE 1.19 以上版本。
自訂子網路 networking.gke.io/load-balancer-subnet
(僅適用於 IPv6)
GKE 1.29 以上版本。如需其他規定,請參閱自訂子網路註解。
自備 IPv6 位址 (BYOIPv6) networking.gke.io/ip-collection-v6: "projects/PROJECT_ID/regions/REGION/publicDelegatedPrefixes/SUB_PREFIX_NAME"

指定 EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式中公開委派前置字串 (PDP) 的區域 IPv6 子前置字串。GKE 會從這個子前置字元,為單一堆疊 IPv6 外部 LoadBalancer Service 分配臨時外部 /96 IPv6 位址範圍。您可以將子前置字串指定為完整資源網址,或範例中顯示的部分資源路徑。如果變更這個註解,GKE 會使用新前置碼的新位址,重新建立 IPv6 轉送規則。如果移除註解,Service 會還原為 Google 提供的位址,該位址來自具有外部 IPv6 位址範圍的子網路;如果叢集的子網路具有內部 IPv6 位址範圍,請同時新增 networking.gke.io/load-balancer-subnet 註解。

如為內部 LoadBalancer Service,請使用 networking.gke.io/load-balancer-subnet 註解指定 BYOIPv6 內部子網路,藉此設定 BYOIPv6。


(僅適用於單一堆疊 IPv6)
GKE 1.37.1-gke.2097000 以上版本
全域存取權 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 位址分配給 Service。您可以將 spec.ipFamilyPolicy 定義為 SingleStack、PreferDualStack 或 RequireDualStack。

如要在雙重堆疊叢集中建立單一堆疊 IPv6 LoadBalancer Service,請將這個欄位的值設為 SingleStack,並將 spec.ipFamilies 欄位的值設為 IPv6。在僅限 IPv6 的叢集中,這些是預設值,您可以省略。詳情請參閱「IPv6 LoadBalancer 服務」。

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

GKE 1.36.0-gke.2646000 以上版本提供單一堆疊 IPv6 LoadBalancer Service 預先發布版。
ipFamilies (選用)

spec.ipFamilies

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

  • IPv4:僅適用於單一堆疊 IPv4 服務。
  • IPv6 僅適用於 IPv6 服務。
  • IPv4,IPv6:適用於主要 IP 位址為 IPv4 的雙堆疊 Service。
  • IPv6,IPv4:適用於主要 IP 位址為 IPv6 的雙堆疊 Service。

如為雙重堆疊叢集中的單一堆疊 IPv6 LoadBalancer 服務,請將這個欄位的值設為 IPv6,並將 spec.ipFamilyPolicy 欄位的值設為 SingleStack。在僅限 IPv6 的叢集中,這些是預設值,您可以省略。詳情請參閱「IPv6 LoadBalancer 服務」。

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

在 GKE 1.36.0-gke.2646000 以上版本中,預先發布版支援單一堆疊 IPv6 LoadBalancer Service。

健康狀態檢查通訊埠

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

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

externalTrafficPolicy 健康狀態檢查通訊埠
Cluster

您無法使用 spec.healthCheckNodePort。

Local

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

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

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

每項自動建立的防火牆規則都具備下列特徵:

  • 防火牆規則的方向為輸入,動作為允許。 Google Cloud中的默示拒絕輸入防火牆規則,代表 GKE 在建立輸入防火牆規則時,會使用許可清單模式。
  • GKE 會將防火牆規則的通訊協定和目的地通訊埠,設為 Service 的 spec.ports[] 清單中指定的通訊協定和目的地通訊埠。
  • GKE 會明確將目的地參數設為 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)。
  • 如果是 IPv6 LoadBalancer Service,請在 spec.loadBalancerSourceRanges[] 欄位中指定 IPv6 CIDR 範圍 (例如 2001:db8::/32 範圍)。GKE 會為 Service 的 IPv6 轉送規則建立個別防火牆規則。如果 Service 不含 loadBalancerSourceRanges[] 欄位,GKE 會將該防火牆規則的來源參數設為所有 IPv6 位址 (::/0)。

靜態 IP 位址

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

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

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

  • 如要搭配內部 LoadBalancer 服務使用這個註解,叢集必須啟用 GKE 子集。GKE 1.36 以上版本預設會啟用 GKE 子集。
  • 如要搭配使用這個註解和外部 LoadBalancer 服務,您必須在建立外部 LoadBalancer 服務時,將服務資訊清單中的 spec.loadBalancerClass 欄位設為 networking.gke.io/l4-regional-external 值。
  • 在 GKE 1.37.1-gke.2097000 以上版本中,如果是單一堆疊 IPv6 外部 LoadBalancer Service,您也可以在 EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式下,從區域性自有 IPv6 公開委派前置字串預留靜態 IPv6 位址範圍。
  • 如果是內部 LoadBalancer 服務,您可以從 INTERNAL_IPV6_SUBNETWORK_CREATION 模式中自有 IPv6 公開委派前置字串佈建的內部子網路,保留靜態 IPv6 位址範圍。

共用 IP 位址的注意事項

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

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

  • 如要讓兩個以上的內部 LoadBalancer 服務使用相同的內部 IPv4 位址,則必須以 SHARED_LOADBALANCER_VIP 用途建立靜態 IP 位址。

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

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

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

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

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

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

如果叢集執行的 GKE 版本低於 1.37,且 LoadBalancer Service 資訊清單「未」將 spec.loadBalancerClass 欄位設為 networking.gke.io/l4-regional-external 值,或未包含 cloud.google.com/l4-rbs: "enabled" 註解,GKE 會建立以目標集區為基礎的區域性外部直通式網路負載平衡器。如果叢集執行 GKE 1.37 以上版本,您必須明確設定 spec.loadBalancerClass: "networking.gke.io/l4-regional-external-legacy",才能建立以目標集區為基礎的區域性外部直通式網路負載平衡器。

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

在 1.37 以上版本中,GKE 預設會建立後端服務型區域性外部直通式網路負載平衡器。在舊版中,如果 LoadBalancer Service 資訊清單包含設為 networking.gke.io/l4-regional-external 值的 spec.loadBalancerClass 欄位,GKE 就會建立負載平衡器。以後端服務為基礎的區域性外部直通式網路負載平衡器,其轉送規則最多支援五個不連續的通訊埠編號,或一個連續通訊埠範圍。

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

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

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

  • LoadBalancer Service 資訊清單的 cloud.google.com/network-tier 註解中指定的級別 (如果資訊清單中有該註解),或
  • 專案的預設級別 (如果 LoadBalancer Service 資訊清單中沒有 cloud.google.com/network-tier 註解)。

除非您另行設定,否則專案的預設級別為 Premium。

預留 IP 位址

GKE 不會保留使用 spec.loadBalancerIP 或 networking.gke.io/load-balancer-ip-addresses 註解設定的靜態 IP 位址。這表示刪除 Service 時,指派給 Service 的 IP 位址可能會釋出。

如要保留 IP 位址,您必須在專案中手動建立位址資源。靜態 IP 位址必須具備下列屬性:

  • 僅限區域性。
  • 與叢集位於相同區域。
  • 與 LoadBalancer 服務位於相同的網路服務級別。
  • 名稱不使用 LoadBalancer 名稱、k8s- 等前置字串或服務的 UUID。

如果您未自行保留位址,專案記錄可能會包含有關建立及快速移除位址資源的項目。這是正常服務佈建的一部分,應在預期之內。

LoadBalancer 子網路

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

  • 將內部直通式網路負載平衡器分組,這些負載平衡器是由相同虛擬私有雲網路和區域中,兩個以上 GKE 叢集的內部 LoadBalancer 服務建立。
  • 建立內部 LoadBalancer Service,其內部直通式網路負載平衡器的 IPv4 位址與叢集的節點 IPv4 位址不同。
  • 建立內部 LoadBalancer Service,其內部直通式網路負載平衡器的 IPv6 位址範圍與叢集的節點和 Pod IPv6 位址不同。如果叢集的子網路具有外部 IPv6 位址範圍,則必須使用自訂 LoadBalancer 子網路,才能支援內部 LoadBalancer 服務。

您可以設定外部 LoadBalancer Service,在與叢集位於相同區域和虛擬私有雲網路的自訂子網路中,使用臨時或靜態 IPv6 位址範圍。使用自訂子網路建立外部 LoadBalancer 服務,其區域性外部直通式網路負載平衡器的 IPv6 位址範圍,與叢集的節點和 Pod IPv6 位址分開。如果叢集的子網路具有「內部」IPv6 位址範圍,則必須使用自訂 LoadBalancer 子網路,才能支援外部 LoadBalancer 服務。

內部直通式網路負載平衡器和區域性外部直通式網路負載平衡器的 IPv6 位址,通常來自虛擬私有雲網路中的子網路範圍。在 GKE 1.37.1-gke.2097000 以上版本中,單一堆疊 IPv6 外部 LoadBalancer 服務的 IPv6 位址,可以改為來自自備 IPv6 公開委派前置字串。如果位址來自子網路,該子網路的 IPv6 存取權類型必須與您建立的負載平衡器類型相符:內部 LoadBalancer 服務需要具有「內部」IPv6 位址範圍的子網路 (包括從 BYOIPv6 前置碼佈建的子網路),而外部 LoadBalancer 服務則需要具有「外部」IPv6 位址範圍的子網路。如需何時需要自訂 LoadBalancer 子網路的摘要,請參閱「IPv6 LoadBalancer 服務」。

自訂子網路註解

使用 networking.gke.io/load-balancer-subnet: SUBNET_RESOURCE_NAME 註解,指示 LoadBalancer 服務在自訂子網路中使用臨時或靜態 IP 位址,其中 SUBNET_RESOURCE_NAME 是自訂子網路的名稱。您可以使用這個註解,為僅支援 IPv4、僅支援 IPv6 或雙重堆疊的內部 LoadBalancer 服務,或僅支援 IPv6 或雙重堆疊的外部 LoadBalancer 服務指定自訂子網路。

如要使用 networking.gke.io/load-balancer-subnet 註解,您必須符合下列規定:

  • 叢集必須執行 GKE 1.29 以上版本。
  • 如要為內部 LoadBalancer 服務指定自訂子網路,叢集必須啟用 GKE 子集。1.36 以上版本預設會啟用 GKE 子設定。
  • 如要為外部 LoadBalancer 服務指定自訂子網路,必須設定以後端服務為基礎的負載平衡器。在 GKE 1.37 以上版本中,這項設定是預設行為。在舊版中,建立外部負載平衡器 Service 時,您必須在 Service 資訊清單中加入設為 networking.gke.io/l4-regional-external 值的 spec.loadBalancerClass 欄位。
  • 如果是單一堆疊 IPv6 叢集 (使用 --stack-type=ipv6 旗標建立),當負載平衡器存取權類型與節點子網路存取權類型不同時,您必須使用這個註解。舉例來說,如果您在節點子網路使用 INTERNAL IPv6 存取權類型 (ULA) 的叢集上部署外部 LoadBalancer Service,或在節點子網路使用 EXTERNAL IPv6 存取權類型 (GUA) 的叢集上部署內部 LoadBalancer Service,請使用這個註解。這個註解指定的子網路必須具有與對應負載平衡器類型相符的 IPv6 存取權類型 (EXTERNAL 或 INTERNAL)。或者,外部 LoadBalancer Service 可以從 BYOIPv6 公開委派前置碼 (而非子網路) 取得 IPv6 位址範圍;在這種情況下,請勿使用這個註解。

內部 LoadBalancer 服務的子網路和 IPv4 位址

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

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

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

下表說明僅支援 IPv6 或雙重堆疊的內部 LoadBalancer Service,適用的子網路規格和 IPv6 位址範圍組合。雖然內部直通式網路負載平衡器 IPv6 轉送規則使用內部 /96 IPv6 位址範圍,但 GKE 只會將節點設定為接受目的地與轉送規則 /96 範圍的第一個 IPv6 位址 (/128) 相符的封包。

靜態 IPv6 位址範圍 臨時 IPv6 位址範圍
自訂雙重堆疊或僅限 IPv6 的子網路
  • 必須與叢集位於相同的虛擬私有雲網路和區域。
  • 必須具備內部 IPv6 位址範圍 (存取權類型 INTERNAL),可以是 Google 提供的內部 IPv6 位址範圍,也可以是從 INTERNAL_IPV6_SUBNETWORK_CREATION 模式的公開委派前置碼佈建的 BYOIPv6 內部
  • 必須使用 networking.gke.io/load-balancer-subnet 註解指定。
自訂子網路和靜態 IPv6 位址範圍:靜態內部 /96 IPv6 位址範圍必須在自訂子網路的內部 /64 IPv6 位址範圍內建立。 自訂子網路和暫時 IPv6 位址範圍:GKE 會從自訂子網路的內部 /64 IPv6 位址範圍,使用未分配的內部 /96 IPv6 位址範圍。
叢集雙重堆疊或僅限 IPv6 子網路
  • 必須有內部 IPv6 位址範圍 (存取權類型 INTERNAL),可以是 Google 提供的內部 IPv6 位址範圍,也可以是 BYOIPv6 內部位址範圍。
叢集子網路和靜態 IPv6 位址範圍:靜態內部 /96 IPv6 位址範圍必須建立在叢集子網路的內部 /64 IPv6 位址範圍中。 叢集子網路和臨時 IPv6 位址範圍:GKE 會使用叢集子網路內部 /64 IPv6 位址範圍中未分配的內部 /96 IPv6 位址範圍。

外部 LoadBalancer 服務的子網路和 IPv4 位址

如果是僅限 IPv4 和雙堆疊外部 LoadBalancer 服務,外部 IPv4 位址 (無論是靜態外部 IPv4 位址或臨時外部 IPv4 位址) 都不是來自子網路。

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

下表說明單一堆疊 IPv6 或雙堆疊外部 LoadBalancer 服務的子網路或子前置字串,以及 IPv6 位址範圍的有效組合。雖然區域性外部直通式網路負載平衡器 IPv6 轉送規則使用外部 /96 IPv6 位址範圍,但 GKE 只會將節點設為接受目的地與轉送規則 /96 範圍的第一個 IPv6 位址 (/128) 相符的封包。

靜態 IPv6 位址範圍 臨時 IPv6 位址範圍
自訂雙重堆疊或僅限 IPv6 的子網路
自訂子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須在自訂子網路的外部 /64 IPv6 位址範圍中建立。靜態外部 IPv6 位址範圍只能在進階級建立。 自訂子網路和臨時 IPv6 位址範圍:GKE 會使用自訂子網路外部 /64 IPv6 位址範圍中未分配的外部 /96 IPv6 位址範圍。
叢集雙重堆疊或僅限 IPv6 子網路
  • 必須具備外部 IPv6 位址範圍 (存取權類型 EXTERNAL)。
叢集子網路和靜態 IPv6 位址範圍:靜態外部 /96 IPv6 位址範圍必須建立在叢集子網路的外部 /64 IPv6 位址範圍中。靜態外部 IPv6 位址範圍只能在進階級建立。 叢集子網路和暫時性 IPv6 位址範圍:GKE 會從叢集子網路的外部 /64 IPv6 位址範圍,使用未分配的外部 /96 IPv6 位址範圍。
BYOIPv6 公開委派前置字串
  • 僅適用於 GKE 1.37.1-gke.2097000 以上版本的單一堆疊 IPv6 外部 LoadBalancer 服務。
  • 區域子前置碼必須與叢集位於相同區域、使用 EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式,且可分配的前置碼長度必須為 /96。
  • 子前置字串必須處於 ANNOUNCED 狀態。
  • 適用於單一堆疊 IPv6 叢集和雙重堆疊叢集 (Service 本身必須是單一堆疊 IPv6)。叢集的子網路可以有內部或外部 IPv6 位址範圍 (存取權類型 INTERNAL 或 EXTERNAL);由於位址範圍來自子前置字串,因此不需要外部 IPv6 子網路。
  • 必須使用進階級、以區域性後端服務為基礎的外部直通式網路負載平衡器 (spec.loadBalancerClass: networking.gke.io/l4-regional-external)。
BYOIPv6 前置字串和靜態 IPv6 位址範圍:您必須使用 --endpoint-type=NETLB 和 --ip-collection 旗標,從區域子前置字串保留靜態外部 /96 IPv6 位址範圍,並使用 networking.gke.io/load-balancer-ip-addresses 註解參照靜態位址。您也可以視需要加入 networking.gke.io/ip-collection-v6 註解。如果加入,這個註解必須參照您預留靜態位址的子前置字串。 BYOIPv6 前置字元和臨時 IPv6 位址範圍:使用 networking.gke.io/ip-collection-v6 註解指定區域子前置字元。GKE 會從子前置字串分配可用的外部 /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 Service,請將其部署至 IPv4/IPv6 雙重堆疊叢集,並根據您使用的負載平衡器類型,完成下列任一操作:

  • 如為內部 LoadBalancer Service,則必須啟用 GKE 子設定。單一堆疊 IPv6 和雙重堆疊叢集預設會啟用 GKE 子集。詳情請參閱「啟用內部負載平衡器子設定」。
  • 如果是外部 LoadBalancer 服務,則必須使用以後端服務為基礎的區域性外部直通式網路負載平衡器。詳情請參閱「後端服務型外部網路負載平衡器」。

您可以為每項 Service 定義 ipFamilyPolicy 和 ipFamilies 規格。詳情請參閱「IPv4/IPv6 雙重堆疊」。

雙堆疊 LoadBalancer 服務的限制

  • 在堆疊類型為 ipv4 的叢集上,不支援使用 IPv6 位址的 LoadBalancer Service。詳情請參閱「為 VPC 原生叢集使用雙重堆疊 IP 位址」或「設定單一堆疊 IPv6 叢集」。
  • 使用單一堆疊位址建立的 LoadBalancer 服務無法升級為雙堆疊服務。

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

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

IPv6 LoadBalancer Service

IPv6 LoadBalancer Service 是轉送規則具有 IPv6 位址的 LoadBalancer Service。Service 可以是單一堆疊 IPv6,也可以是雙重堆疊,同時具有 IPv4 和 IPv6 轉送規則。如要在雙重堆疊叢集中建立單一堆疊 IPv6 LoadBalancer Service,請將 spec.ipFamilyPolicy 欄位的值設為 SingleStack,並將 spec.ipFamilies 欄位的值設為 IPv6。在僅限 IPv6 的叢集中,這些是預設值,您可以省略。

IPv6 LoadBalancer 服務一律使用 GCE_VM_IP NEG 後端,其 IPv6 位址來自虛擬私有雲網路中的子網路範圍,或自備 IPv6 (BYOIPv6) 公開委派前置碼。

GKE 1.36.0-gke.2646000 以上版本提供預先發布版的單一堆疊 IPv6 LoadBalancer 服務。

IPv6 LoadBalancer 服務的限制

  • 您無法使用 spec.loadBalancerIP 欄位指定 IPv6 位址。請改用 networking.gke.io/load-balancer-ip-addresses 註解。
  • 外部 IPv6 LoadBalancer 服務 (包括靜態外部 IPv6 位址範圍) 僅支援進階級。GKE 會拒絕設定 cloud.google.com/network-tier: Standard 註解的外部 IPv6 LoadBalancer Service。
  • 您無法將單一堆疊 IPv6 LoadBalancer 服務變更為使用 IPv4 位址。如果將 spec.ipFamilies 欄位的值設為 IPv4,或將 spec.ipFamilyPolicy 欄位的值設為 RequireDualStack,系統會拒絕這項操作。
  • networking.gke.io/ip-collection-v6 註解只能用於 GKE 1.37.1-gke.2097000 以上版本的單一堆疊 IPv6 外部 LoadBalancer Service。GKE 不支援雙重堆疊 Service、IPv4 Service 或內部 LoadBalancer Service 的 networking.gke.io/ip-collection-v6 註解,且您無法將這個註解與 networking.gke.io/load-balancer-subnet 註解合併。

選擇負載平衡器的子網路

提供負載平衡器 IP 位址的子網路,其 IPv6 存取權類型必須與負載平衡器類型相符。如果叢集的子網路已有必要的存取權類型,GKE 就會使用叢集的子網路。否則,您必須建立具有必要存取權類型的自訂 LoadBalancer 子網路,並使用 networking.gke.io/load-balancer-subnet 註解指定這個子網路。唯一的例外狀況是使用 BYOIPv6 公開委派前置字串的外部 LoadBalancer Service,因為該前置字串會提供 IPv6 位址範圍,不受叢集子網路的存取權類型影響。

下表摘要說明提供負載平衡器 IPv6 位址範圍的子網路或前置字元:

LoadBalancer Service 類型 叢集子網路的 IPv6 存取權類型 負載平衡器 IPv6 位址範圍的來源
內部 INTERNAL 叢集的子網路。不需加上註解。
內部 EXTERNAL 自訂 LoadBalancer 子網路,具有 INTERNAL IPv6 存取權類型,並以 networking.gke.io/load-balancer-subnet 註解指定。
內部 (使用 BYOIPv6) INTERNAL或EXTERNAL 子網路的內部 IPv6 位址範圍來自 INTERNAL_IPV6_SUBNETWORK_CREATION 模式的 BYOIPv6 公開委派前置碼,並以 networking.gke.io/load-balancer-subnet 註解指定 (如果該子網路是叢集的子網路,則不需要註解)。
外部 EXTERNAL 叢集的子網路。不需加上註解。
外部 INTERNAL 自訂 LoadBalancer 子網路,具有 EXTERNAL IPv6 存取權類型,並以 networking.gke.io/load-balancer-subnet 註解指定。
使用 BYOIPv6 的外部
(GKE 1.37.1-gke.2097000 以上版本)
INTERNAL或EXTERNAL EXTERNAL_IPV6_FORWARDING_RULE_CREATION 模式中的 BYOIPv6 公開委派前置碼,以 networking.gke.io/ip-collection-v6 註解指定,或由從前置碼保留的靜態 IPv6 位址指定。請勿指定 networking.gke.io/load-balancer-subnet 註解。

如要瞭解子網路和 IPv6 位址範圍的有效組合,請參閱「內部 LoadBalancer 服務的子網路和 IPv6 位址範圍」和「外部 LoadBalancer 服務的子網路和 IPv6 位址範圍」。

自備 IPv6 位址 (BYOIPv6)

您可以自備 IPv6 位址 (BYOIPv6),用於內部和外部 IPv6 LoadBalancer 服務。

如果是直接從公開委派前置字元分配位址的外部 LoadBalancer Service,GKE 服務代理程式 (service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com) 必須具備特定 Identity and Access Management (IAM) 權限。在擁有公開委派前置字串的專案中,將 Compute 公開 IP 管理員角色 (roles/compute.publicIpAdmin) 授予這個代理。這個角色包含 compute.publicDelegatedPrefixes.use 權限。

無論是初次建立 Service,還是每次同步 Service 時,GKE 都需要這項權限。

外部 LoadBalancer 服務 (GKE 1.37.1-gke.2097000 以上版本):單一堆疊 IPv6 外部 LoadBalancer 服務 (spec.ipFamilyPolicy: SingleStack 和 spec.ipFamilies: ["IPv6"]) 會直接從公開委派前置字串 (PDP) 的區域 IPv6 子前置字串,分配外部 /96 BYOIPv6 位址範圍。只要 Service 是單一堆疊 IPv6,GKE 就能在單一堆疊 IPv6 叢集和雙重堆疊叢集上支援這項功能。叢集的子網路可以採用內部或外部 IPv6 存取權類型,因為位址範圍源自子前置碼,而非子網路。

區域 IPv6 子前置字串必須符合下列規定:

  • 已設為EXTERNAL_IPV6_FORWARDING_RULE_CREATION模式
  • 可分配的前置碼長度設為 /96
  • 處於「ANNOUNCED」狀態

如要分配臨時外部 BYOIPv6 位址範圍,請在 networking.gke.io/ip-collection-v6 註解中指定子前置字串 (以完整資源網址或部分資源路徑 projects/PROJECT_ID/regions/REGION/publicDelegatedPrefixes/SUB_PREFIX_NAME 的形式提供)。或者,如要使用從子前置字串保留的靜態外部 BYOIPv6 位址範圍,請使用 networking.gke.io/load-balancer-ip-addresses 註解。

如果您變更 networking.gke.io/ip-collection-v6 註解,GKE 會使用新前置字串中的新位址重新建立 IPv6 轉送規則,這會短暫中斷流量。如果移除註解,Service 會還原為 Google 提供的位址,該位址來自具有外部 IPv6 位址範圍的子網路。如果叢集子網路使用內部 IPv6 位址範圍,則必須同時新增 networking.gke.io/load-balancer-subnet 註解,以免發生錯誤。詳情請參閱「針對外部 LoadBalancer 服務使用自備 IPv6 位址 (BYOIPv6)」。

內部 LoadBalancer 服務:IPv6 內部 LoadBalancer 服務會使用內部 IPv6 子網路的 BYOIPv6 位址。您可以使用以 INTERNAL_IPV6_SUBNETWORK_CREATION 模式設定的公開委派前置字串 (PDP) 區域 IPv6 子前置字串,建立這個子網路。詳情請參閱「建立及使用 IPv6 子前置字串」。

如要設定 Service,請使用 networking.gke.io/load-balancer-subnet 註解指定 BYOIPv6 子網路,或將該子網路設為叢集的預設子網路。您可以視需要使用 networking.gke.io/load-balancer-ip-addresses 註解,指定預留的靜態內部 BYOIPv6 位址。

內部 LoadBalancer 服務不支援 networking.gke.io/ip-collection-v6 註解。如果您套用這個註解,GKE 會忽略該註解,並發出 IPCollectionV6Error 警告事件。詳情請參閱「將自備 IPv6 位址 (BYOIPv6) 用於內部 LoadBalancer 服務」。

後續步驟