本頁說明 Google Kubernetes Engine (GKE) 預設會在 Google Cloud中自動建立的 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 位址。舉例來說,這項規則允許的流量包括:
|
節點 IP 位址範圍或這個節點 IP 位址範圍的超集:
|
節點標記 | 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 之間傳輸流量。 |
與 |
節點標記 | 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 時,允許外部直通式網路負載平衡器服務的健康狀態檢查。 |
|
LoadBalancer 虛擬 IP 位址 | TCP:10256 |
k8s-[loadbalancer-hash]-http-hc |
當 externalTrafficPolicy 設為 Local 時,允許外部直通式網路負載平衡器服務的健康狀態檢查。 |
|
節點標記 | spec.healthCheckNodePort 定義的 TCP 通訊埠。如未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。
詳情請參閱健康狀態檢查通訊埠。 |
k8s-[cluster-id]-node-hc |
允許內部直通式網路負載平衡器服務的健康狀態檢查,前提是 externalTrafficPolicy 已設為 Cluster 。
|
|
節點標記 | TCP:10256 |
[loadbalancer-hash]-hc |
當 externalTrafficPolicy 設為 Local 時,允許內部直通式網路負載平衡器服務的健康狀態檢查。 |
|
節點標記 | spec.healthCheckNodePort 定義的 TCP 通訊埠。如未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。
詳情請參閱「健康狀態檢查通訊埠」。 |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash] |
啟用下列其中一項設定後,允許輸入流量抵達服務:
|
資料來源為 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 ,且啟用下列任一項目時,允許對服務進行健康狀態檢查: |
|
LoadBalancer 虛擬 IP 位址 | spec.healthCheckNodePort 定義的 TCP 通訊埠。如未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。
詳情請參閱健康狀態檢查通訊埠。 |
k8s2-[cluster-id]-l4-shared-hc-fw |
當 externalTrafficPolicy 設為 Cluster ,且啟用下列任一項目時,允許對服務進行健康狀態檢查: |
|
節點標記 | TCP:10256 |
gke-[cluster-name]-[cluster-hash]-mcsd |
允許控制層存取叢集節點上的 kubelet 和指標伺服器,以用於 多叢集服務。此規則的優先順序為 900。 | 健康狀態檢查 IP 位址 | 節點標記 | TCP、UDP、SCTP、ICMP、ESP、AH |
GKE Gateway 防火牆規則
建立 Gateway 和 HTTPRoute 資源時,GKE 會建立下列 Gateway 防火牆規則:
名稱 | 目的 | 來源 | 目標 (定義目的地) | 通訊協定和通訊埠 |
---|---|---|---|---|
|
允許對網路端點群組 (NEG) 執行健康狀態檢查。 建立第一個 Gateway 資源時,Gateway 控制器會建立這項規則。如果建立更多 Gateway 資源,Gateway 控制器可以更新這項規則。 |
|
節點標記 | TCP:所有容器目標通訊埠 (適用於 NEG) |
GKE Ingress 防火牆規則
建立 Ingress 資源時,GKE 會建立下列 Ingress 防火牆規則:
名稱 | 目的 | 來源 | 目標 (定義目的地) | 通訊協定和通訊埠 |
---|---|---|---|---|
k8s-fw-l7-[random-hash] |
允許對 建立第一個 Ingress 資源時,Ingress 控制器會建立這項規則。如果建立更多 Ingress 資源,Ingress 控制器可以更新這項規則。 |
|
節點標記 | 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
防火牆規則所用的目標標記。
後續步驟
- 閱讀 GKE 網路總覽。
- 瞭解如何為應用程式設定網路政策。
- 瞭解 Google Cloud中的其他預先填入防火牆規則。
- 進一步瞭解如何在採用共用虛擬私有雲的專案中建立防火牆規則。