本頁面說明 Service 資訊清單的參數,這些參數可控制 LoadBalancer Service 的行為和設定。閱讀本頁面前,請確認您已熟悉 Google Kubernetes Engine (GKE) LoadBalancer 服務概念。
服務參數
GKE 支援下列 LoadBalancer Service 參數。
| 參數 | 服務欄位和說明 | 內部 | 外部 | 版本支援 |
|---|---|---|---|---|
| 內部直通式網路負載平衡器 |
指示 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 以上版本。 | ||
| 自訂子網路 | 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"
指定 如為內部 LoadBalancer Service,請使用 |
(僅適用於單一堆疊 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+ 以上版本正式發布。 | ||
| 所有通訊埠 | 如果在 |
GKE 1.18.19-gke.1400 以上版本 | ||
| ipFamilyPolicy |
定義 GKE 如何將 IP 位址分配給 Service。您可以將 如要在雙重堆疊叢集中建立單一堆疊 IPv6 LoadBalancer Service,請將這個欄位的值設為 |
1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。 GKE 1.36.0-gke.2646000 以上版本提供單一堆疊 IPv6 LoadBalancer Service 預先發布版。 |
||
| ipFamilies (選用) |
定義 IP 位址系列,以分配單一堆疊或雙重堆疊服務。請使用下列任一值:
如為雙重堆疊叢集中的單一堆疊 IPv6 LoadBalancer 服務,請將這個欄位的值設為 |
1.29 以上版本的 GKE 叢集支援 LoadBalancer 服務的雙堆疊網路。 在 GKE 1.36.0-gke.2646000 以上版本中,預先發布版支援單一堆疊 IPv6 LoadBalancer Service。 |
健康狀態檢查通訊埠
如「負載平衡器健康狀態檢查」一文所述,GKE 建立區域性外部直通式網路負載平衡器或內部直通式網路負載平衡器時,一律會部署負載平衡器健康狀態檢查。
能否設定 healthCheckNodePort 參數,取決於下列 externalTrafficPolicy 設定:
externalTrafficPolicy |
健康狀態檢查通訊埠 |
|---|---|
Cluster |
您無法使用 |
Local |
您可以使用 |
防火牆規則和來源 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
|
您可以為僅限 IPv4、僅限 IPv6 和雙重堆疊的內部和外部 LoadBalancer 服務,指定靜態 IPv4 位址、靜態 IPv6 位址範圍,或兩者。這個註解需要 GKE 1.29 以上版本,並符合下列額外需求條件:
|
共用 IP 位址的注意事項
如果每個負載平衡器的轉送規則都使用不重複的 IP 位址、通訊協定、通訊埠規格和網路服務級別規格組合 (如本節表格所示),則兩個以上的 LoadBalancer 服務可以參照相同的靜態 IP 位址。此外:
靜態 IPv6 位址實際上是
/96IPv6 位址範圍,但 GKE 只會將節點設為接受/96範圍內第一個 IPv6 位址 (/128) 的封包。如要讓兩個以上的內部 LoadBalancer 服務使用相同的內部 IPv4 位址,則必須以
SHARED_LOADBALANCER_VIP用途建立靜態 IP 位址。
| 內部 LoadBalancer 服務 | 外部 LoadBalancer 服務 | |
|---|---|---|
| 通訊埠規格 | 內部直通式網路負載平衡器的轉送規則最多支援五個個別通訊埠編號,也可以設為使用所有通訊埠。 如果內部 LoadBalancer 服務指定的 IP 位址和通訊協定相同的轉送規則,通訊埠不得重疊。也就是說,您無法建立多個共用相同 IP 位址、通訊協定和通訊埠的內部 LoadBalancer 服務。例如:
詳情請參閱:使用通用 IP 位址的內部直通式網路負載平衡器轉送規則。 |
如果叢集執行的 GKE 版本低於 1.37,且 LoadBalancer Service 資訊清單「未」將 以目標集區為基礎的區域性外部直通式網路負載平衡器,其轉送規則必須使用連續通訊埠範圍。連續通訊埠範圍包含 Service 所需的所有通訊埠,但也可能包含 Service 未使用的其他通訊埠。舉例來說,如果外部 LoadBalancer Service 是由以目標集區為基礎的區域性外部直通式網路負載平衡器提供,且在 Service 資訊清單中指定通訊埠 80 和 443,則該 Service 會使用通訊埠範圍為 80-443 的負載平衡器轉送規則。這個通訊埠範圍可防止其他外部 LoadBalancer 服務使用通訊埠 80、443 和 80 到 443 之間的任何數字。 在 1.37 以上版本中,GKE 預設會建立後端服務型區域性外部直通式網路負載平衡器。在舊版中,如果 LoadBalancer Service 資訊清單包含設為 |
| 網路服務級別 | 無法設定,內部位址一律為進階級。 | 可為靜態區域性外部 IPv4 位址設定。靜態區域性外部 IPv6 位址範圍只能在進階級建立。 靜態外部 IP 位址的網路服務級別規格必須符合下列任一條件:
除非您另行設定,否則專案的預設級別為 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旗標建立),當負載平衡器存取權類型與節點子網路存取權類型不同時,您必須使用這個註解。舉例來說,如果您在節點子網路使用INTERNALIPv6 存取權類型 (ULA) 的叢集上部署外部 LoadBalancer Service,或在節點子網路使用EXTERNALIPv6 存取權類型 (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 位址範圍:靜態內部 /96 IPv6 位址範圍必須在自訂子網路的內部 /64 IPv6 位址範圍內建立。 |
自訂子網路和暫時 IPv6 位址範圍:GKE 會從自訂子網路的內部 /64 IPv6 位址範圍,使用未分配的內部 /96 IPv6 位址範圍。 |
叢集雙重堆疊或僅限 IPv6 子網路
|
叢集子網路和靜態 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 位址範圍:靜態外部 /96 IPv6 位址範圍必須建立在叢集子網路的外部 /64 IPv6 位址範圍中。靜態外部 IPv6 位址範圍只能在進階級建立。 |
叢集子網路和暫時性 IPv6 位址範圍:GKE 會從叢集子網路的外部 /64 IPv6 位址範圍,使用未分配的外部 /96 IPv6 位址範圍。 |
BYOIPv6 公開委派前置字串
|
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。
- ipFamilies 為
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 服務」。
後續步驟
- 瞭解 LoadBalancer Service。
- 瞭解如何設定內部負載平衡器。
- 閱讀應用程式負載平衡器的 Ingress 總覽。
- 瞭解如何使用獨立 NEG。
- 進一步瞭解虛擬私有雲防火牆規則。