自動建立的防火牆規則

本頁面說明 Google Kubernetes Engine (GKE) 預設會在 Cloud de Confiance by S3NS中自動建立的 Ingress 允許 VPC 防火牆規則。

適用的防火牆和輸出防火牆

GKE 使用虛擬私有雲 (VPC) 防火牆規則,控管 Pod 和節點的傳入和傳出流量。根據預設,GKE 會自動建立及管理特定防火牆規則,允許必要的流量,例如節點和 Pod 之間的通訊,以及傳送至 Kubernetes 控制層的流量。根據預設,GKE 會自動為 LoadBalancer Service 建立輸入允許虛擬私有雲防火牆規則,但您可以停用這項行為,手動管理防火牆規則或政策,或使用進階防火牆功能。

GKE 建立的允許輸入防火牆規則,並非唯一適用於叢集節點的防火牆規則。輸入和輸出適用的完整防火牆規則集,是根據階層式防火牆政策、全域網路防火牆政策、區域網路防火牆政策和其他虛擬私有雲防火牆規則定義。

最佳做法:

與貴機構的網路管理員和安全工程師合作,規劃及設計叢集、工作負載和服務的設定,並瞭解防火牆政策和規則的評估順序,以便判斷哪些防火牆規則具有優先權。

GKE 只會建立輸入 VPC 防火牆規則,因為 GKE 依賴隱含允許輸出的最低優先順序防火牆規則。

如果您已在叢集的虛擬私有雲網路中設定拒絕輸出防火牆規則,可能需要建立允許輸出規則,允許節點、Pod 和叢集控制層之間的通訊。舉例來說,如果您已為所有通訊協定和通訊埠,以及所有目的地 IP 位址建立拒絕輸出防火牆規則,除了 GKE 自動建立的輸入規則外,您還必須建立允許輸出防火牆規則。連線至控制層端點時,一律使用 TCP 目的地通訊埠 443,但叢集的節點和 Pod 之間的連線可以使用任何通訊協定和目的地通訊埠。

下列工具可協助您判斷哪些防火牆規則允許或拒絕流量:

防火牆規則

根據預設,GKE 會在建立下列資源時自動建立防火牆規則:

  • GKE 叢集
  • GKE 服務
  • GKE Gateway 和 HTTPRoute
  • GKE Ingress

除非另有指定,否則所有自動建立的防火牆規則優先順序都是 1000,這是防火牆規則的預設值。如要進一步控管防火牆行為,可以建立優先順序較高的防火牆規則。優先順序較高的防火牆規則會先套用,然後才套用自動建立的防火牆規則。

GKE 叢集防火牆規則

建立叢集時,GKE 會建立下列輸入防火牆規則:

名稱 目的 來源 目標 (定義目的地) 通訊協定和通訊埠 優先順序
gke-[cluster-name]-[cluster-hash]-master 適用於依賴 虛擬私有雲網路對接,進行控制層私人端點連線的 Autopilot 和 Standard 叢集。允許控制層存取叢集節點上的 kubelet 和指標伺服器。 控制層 IP 位址範圍 (/28) 節點標記 TCP:443 (metrics-server) 和 TCP:10250 (kubelet) 1000
gke-[cluster-name]-[cluster-hash]-vms

用於 Kubernetes 網路模型所需的叢集內通訊。 允許在節點上執行的軟體,將來源與節點 IP 位址相符的封包,傳送至叢集中的目的地 Pod IP 和節點 IP 位址。舉例來說,這項規則允許的流量包括:

  • 封包從系統精靈 (例如 kubelet) 傳送至叢集的節點和 Pod IP 位址目的地。
  • 封包從 Pod 中執行的軟體傳送hostNetwork:true至叢集的節點和 Pod IP 位址目的地。
節點 IP 位址範圍或這個節點 IP 位址範圍的超集: 如果您 擴充叢集子網路的主要 IPv4 範圍,GKE 不會更新這項防火牆規則的來源 IPv4 範圍。 如果擴充叢集子網路的主要 IPv4 範圍,請務必手動建立必要的輸入防火牆規則。 節點標記 TCP:1-65535、UDP:1-65535、ICMP 1000
gke-[cluster-name]-[cluster-hash]-all 允許叢集上所有 Pod 之間的流量,這是 Kubernetes 網路模型的必要條件。

Pod CIDR

如果叢集已啟用 不連續的多 Pod CIDR,則為叢集使用的所有 Pod CIDR 區塊。

節點標記 TCP、UDP、SCTP、ICMP、ESP、AH 1000
gke-[cluster-hash]-ipv6-all 僅適用於雙堆疊網路叢集。允許叢集中的節點和 Pod 之間傳輸流量。

與 subnetIpv6CidrBlock 中分配的 IP 位址範圍相同。

節點標記 TCP、UDP、SCTP、IPv6 的 ICMP、ESP、AH 1000
gke-[cluster-name]-[cluster-hash]-inkubelet 允許從執行 1.23.6 以上版本的全新 GKE 叢集,透過內部 Pod CIDR 和節點 CIDR 存取通訊埠 10255 (Kubelet 唯讀通訊埠)。 執行 1.26.4-gke.500 以上版本的叢集會改用 Kubelet 驗證的連接埠 (10250)。請勿新增防火牆規則,在叢集內封鎖 10250。

內部 Pod CIDR 和節點 CIDR。

節點標記 TCP:10255 999
gke-[cluster-name]-[cluster-hash]-exkubelet 在執行 1.23.6 以上版本的新 GKE 叢集中,拒絕透過 10255 連接埠公開存取。

0.0.0.0/0

節點標記 TCP:10255 1000

GKE 服務防火牆規則

建立服務時,GKE 會建立下列輸入防火牆規則。您可以管理虛擬私有雲防火牆規則的建立作業,防止系統建立部分防火牆規則。

名稱 目的 來源 目標 (定義目的地) 通訊協定和通訊埠
k8s-fw-[loadbalancer-hash]
  • 允許輸入流量抵達服務。
  • 在 1.35.1-gke.1473000 之前的 GKE 版本中,這項規則的優先順序為 1000。
  • 在 GKE 1.35.1-gke.1473000 以上版本中,這項規則的優先順序為 999。
  • 來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,預設值為 0.0.0.0/0。

    詳情請參閱「防火牆規則和來源 IP 位址許可清單」。

    LoadBalancer 虛擬 IP 位址 Service 資訊清單中指定通訊埠的 TCP 和 UDP。
    k8s-fw-[loadbalancer-hash]-deny
  • 拒絕 k8s-fw-[loadbalancer-hash] 規則未明確允許的所有流量。
  • 在 GKE 1.35.1-gke.1473000 以上版本中,這項規則的優先順序為 1000。
  • 如果 GKE 版本低於 1.35.1-gke.1473000,則沒有這項規則。
  • 0.0.0.0/0 LoadBalancer 虛擬 IP 位址 全部
    k8s-[cluster-id]-node-http-hc 當 externalTrafficPolicy 設為 Cluster 時,允許區域性外部直通式網路負載平衡器服務的健康狀態檢查。
  • 如果是 1.35.1-gke.1473000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 如果是 GKE 1.35.1-gke.1473000 以上版本,這項規則的優先順序為 999。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    LoadBalancer 虛擬 IP 位址 TCP:10256
    k8s-[loadbalancer-hash]-http-hc 當 externalTrafficPolicy 設為 Local 時,允許區域外部直通式網路負載平衡器服務的健康狀態檢查。
  • 如果是 1.35.1-gke.1473000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 在 GKE 1.35.1-gke.1473000 以上版本中,這項規則的優先順序為 999。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    節點標記 spec.healthCheckNodePort 定義的 TCP 連接埠。如未指定,Kubernetes 控制層會從節點通訊埠範圍指派健康狀態檢查通訊埠。

    詳情請參閱「健康狀態檢查埠」。

    k8s-[cluster-id]-node-hc 允許內部直通式網路負載平衡器服務的健康狀態檢查,前提是 externalTrafficPolicy 設為 Cluster。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    節點標記 TCP:10256
    [loadbalancer-hash]-hc 當 externalTrafficPolicy 設為 Local 時,允許內部直通式網路負載平衡器服務的健康狀態檢查。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    節點標記 spec.healthCheckNodePort 定義的 TCP 連接埠。如未指定,Kubernetes 控制層會從節點通訊埠範圍指派健康狀態檢查通訊埠。

    詳情請參閱「健康狀態檢查通訊埠」。

    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] 啟用下列任一設定後,允許 IPv4 輸入流量抵達服務:
  • GKE 子設定。
  • 後端服務型區域外部直通式網路負載平衡器。
  • 您可以停用自動建立這些虛擬私有雲防火牆規則的功能。詳情請參閱「管理自動建立的防火牆規則」。
  • 如果是 1.35.1-gke.1031000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 在 GKE 1.35.1-gke.1031000 以上版本中,這項規則的優先順序為 999。
  • 來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,則預設為 0.0.0.0/0。

    詳情請參閱「防火牆規則和來源 IP 位址許可清單」。

    LoadBalancer 虛擬 IP 位址 服務資訊清單中指定的通訊埠上的 TCP 和 UDP。
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-ipv6 啟用下列任一項目時,允許 IPv6 輸入流量連線至服務:
  • GKE 子設定。
  • 後端服務型區域性外部直通式網路負載平衡器。
  • 您可以停用自動建立這些虛擬私有雲防火牆規則的功能。詳情請參閱「管理自動建立的防火牆規則」。
  • 如果是 1.35.1-gke.1031000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 在 GKE 1.35.1-gke.1031000 以上版本中,這項規則的優先順序為 999。
  • 來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,則預設為 ::/0。

    詳情請參閱「防火牆規則和來源 IP 位址許可清單」。

    LoadBalancer 虛擬 IP 位址 Service 資訊清單中指定的通訊埠上的 TCP 和 UDP。
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-deny 拒絕所有未經 k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] 規則明確允許的 IPv4 流量。
  • 在 GKE 1.35.1-gke.1031000 以上版本中,這項規則的優先順序為 1000。
  • 如果 GKE 版本低於 1.35.1-gke.1031000,則沒有這項規則。
  • 0.0.0.0/0 LoadBalancer 虛擬 IP 位址 全部
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-deny-ipv6 拒絕所有未明確允許的 IPv6 流量。k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-ipv6
  • 在 GKE 1.35.1-gke.1031000 以上版本中,這項規則的優先順序為 1000。
  • 如果 GKE 版本低於 1.35.1-gke.1031000,則沒有這項規則。
  • ::/0 LoadBalancer 虛擬 IP 位址/96 範圍 全部
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw 當 externalTrafficPolicy 設為 Local,且下列任一項啟用時,允許服務的健康狀態檢查:
  • GKE 子設定。
  • 後端服務型區域外部直通式網路負載平衡器。
  • 如果是 1.35.1-gke.1031000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 如果是 GKE 1.35.1-gke.1031000 以上版本,這項規則的優先順序為 999。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    LoadBalancer 虛擬 IP 位址 spec.healthCheckNodePort 定義的 TCP 連接埠。如未指定,Kubernetes 控制層會從節點通訊埠範圍指派健康狀態檢查通訊埠。

    詳情請參閱「健康狀態檢查埠」。

    k8s2-[cluster-id]-l4-shared-hc-fw 當 externalTrafficPolicy 設為 Cluster,且啟用下列任一項目時,允許對服務進行健康狀態檢查:
  • GKE 子設定。
  • 後端服務型區域性外部直通式網路負載平衡器。
  • 如果是 1.35.1-gke.1031000 之前的 GKE 版本,這項規則的優先順序為 1000。
  • 如果是 GKE 1.35.1-gke.1031000 以上版本,這項規則的優先順序為 999。
    • 177.222.80.0/23
    • 177.222.87.0/26
    • 177.222.87.64/26
    節點標記 TCP:10256
    gke-[cluster-name]-[cluster-hash]-mcsd 允許控制層存取叢集節點上的 kubelet 和指標伺服器,以用於 多叢集服務。這項規則的優先順序為 900。 健康狀態檢查 IP 位址 節點標記 TCP、UDP、SCTP、ICMP、ESP、AH

    GKE Gateway 防火牆規則

    建立 Gateway 和 HTTPRoute 資源時,GKE 會建立下列 Gateway 防火牆規則:

    名稱 目的 來源 目標 (定義目的地) 通訊協定和通訊埠
    • gkegw1-l7-[network]-[region/global]
    • gkemcg1-l7-[network]-[region/global]

    允許對網路端點群組 (NEG) 執行健康狀態檢查。

    建立第一個 Gateway 資源時,Gateway 控制器會建立這項規則。如果建立更多 Gateway 資源,Gateway 控制器可以更新這項規則。

    0.0.0.0/0 TCP:1 到 65535

    GKE Ingress 防火牆規則

    建立 Ingress 資源時,GKE 會建立下列 Ingress 防火牆規則:

    名稱 目的 來源 目標 (定義目的地) 通訊協定和通訊埠
    k8s-fw-l7-[random-hash]

    允許對 NodePort 服務或網路端點群組 (NEG) 進行健康檢查。

    建立第一個 Ingress 資源時,Ingress 控制器會建立這項規則。如果建立更多 Ingress 資源,Ingress 控制器可以更新這項規則。

    GKE 1.17.13-gke.2600 以上版本:
    • 177.222.80.0/23
    • 使用者定義的 Proxy 專用子網路範圍 (適用於內部應用程式負載平衡器)
    節點標記 TCP:30000-32767、TCP:80 (適用於內部應用程式負載平衡器)、 TCP:所有容器目標通訊埠 (適用於 NEG)

    管理虛擬私有雲防火牆規則建立作業

    根據預設,GKE 會自動為所有 LoadBalancer Service 建立允許輸入的虛擬私有雲防火牆規則。如要自行管理 LoadBalancer Service 的防火牆規則,請停用虛擬私有雲防火牆規則的自動建立功能。

    停用 LoadBalancer Service 的虛擬私有雲防火牆規則自動建立功能,只適用於下列情況:

    如要瞭解如何停用防火牆規則,請參閱「GKE LoadBalancer 服務的使用者管理防火牆規則」。

    Shared VPC

    如果您使用 Ingress 或 LoadBalancer 服務,且叢集位於使用 Shared VPC 虛擬私有雲網路的 Shared VPC 中,服務專案中的 GKE 服務帳戶就無法在主專案中建立及更新 Ingress 允許防火牆規則。您可以授予服務專案中的 GKE 服務帳戶權限,以便建立及管理防火牆資源。詳情請參閱「Shared VPC」。

    擴充子網路所需的防火牆規則

    如果擴充叢集子網路的主要 IPv4 範圍,GKE 不會自動更新 gke-[cluster-name]-[cluster-hash]-vms 防火牆規則的來源範圍。叢集中的節點可以從子網路主要 IPv4 範圍的擴充部分接收 IPv4 位址,因此您必須手動建立防火牆規則,允許叢集節點之間進行通訊。

    您必須建立輸入防火牆規則,允許來自擴展主要子網路 IPv4 來源範圍的 TCP 和 ICMP 封包,且至少須套用至叢集中的所有節點。

    如要建立僅適用於叢集節點的輸入防火牆規則,請將防火牆規則的目標設為叢集自動建立的 gke-[cluster-name]-[cluster-hash]-vms 防火牆規則所使用的目標標記。

    後續步驟