自動建立的防火牆規則


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

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

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

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

最佳做法

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

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

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

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

防火牆規則

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

  • GKE 叢集
  • GKE 服務
  • GKE 閘道和 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 中執行的軟體傳送的封包,目的地為叢集的節點和 Pod IP 位址。hostNetwork:true
節點 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 服務防火牆規則

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

名稱 目的 來源 目標 (定義目的地) 通訊協定和通訊埠
k8s-fw-[loadbalancer-hash] 允許輸入流量抵達服務。 資料來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,則預設值為 0.0.0.0/0

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

LoadBalancer 虛擬 IP 位址 Service 資訊清單中指定的通訊埠上的 TCP 和 UDP。
k8s-[cluster-id]-node-http-hc externalTrafficPolicy 設為 Cluster 時,允許外部直通式網路負載平衡器服務的健康狀態檢查
  • 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 時,允許外部直通式網路負載平衡器服務的健康狀態檢查
  • 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] 啟用下列其中一項設定後,允許輸入流量抵達服務:
  • GKE 子設定
  • 後端服務型外部直通式網路負載平衡器
  • 您可以停用這些虛擬私有雲防火牆規則的自動建立功能。詳情請參閱「管理自動建立的防火牆規則」。
  • 資料來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,則預設值為 0.0.0.0/0

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

    LoadBalancer 虛擬 IP 位址 Service 資訊清單中指定的通訊埠上的 TCP 和 UDP。
    k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw externalTrafficPolicy 設為 Local,且啟用下列任一項目時,允許對服務進行健康狀態檢查
  • GKE 子設定
  • 後端服務型外部直通式網路負載平衡器
    • 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 子設定
  • 後端服務型外部直通式網路負載平衡器
    • 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 防火牆規則

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

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

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

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

    節點標記 TCP:所有容器目標通訊埠 (適用於 NEG)

    GKE Ingress 防火牆規則

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

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

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

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

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

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

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

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

    如要瞭解如何停用防火牆規則,請參閱適用於 GKE LoadBalancer Service 的使用者管理防火牆規則

    共用虛擬私有雲

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

    擴充子網路的必要防火牆規則

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

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

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

    後續步驟