本頁面說明 Google Kubernetes Engine (GKE) 預設會在 Google Cloud中自動建立的 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 位址。舉例來說,這項規則允許的流量包括:
|
節點 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 服務防火牆規則
建立服務時,GKE 會建立下列輸入防火牆規則。您可以管理虛擬私有雲防火牆規則的建立作業,防止系統建立部分防火牆規則。
| 名稱 | 目的 | 來源 | 目標 (定義目的地) | 通訊協定和通訊埠 |
|---|---|---|---|---|
k8s-fw-[loadbalancer-hash] |
|
來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,預設值為 0.0.0.0/0。
詳情請參閱「防火牆規則和來源 IP 位址許可清單」。 |
LoadBalancer 虛擬 IP 位址 | Service 資訊清單中指定通訊埠的 TCP 和 UDP。 |
k8s-fw-[loadbalancer-hash]-deny |
k8s-fw-[loadbalancer-hash] 規則未明確允許的所有流量。 |
0.0.0.0/0 | LoadBalancer 虛擬 IP 位址 | 全部 |
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] |
啟用下列任一設定後,允許 IPv4 輸入流量抵達服務: |
來源為 spec.loadBalancerSourceRanges。如果省略 spec.loadBalancerSourceRanges,則預設為 0.0.0.0/0。
詳情請參閱「防火牆規則和來源 IP 位址許可清單」。 |
LoadBalancer 虛擬 IP 位址 | 服務資訊清單中指定的通訊埠上的 TCP 和 UDP。 |
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-ipv6 |
啟用下列任一項目時,允許 IPv6 輸入流量連線至服務:
|
來源為 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 流量。 |
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 |
::/0 | LoadBalancer 虛擬 IP 位址/96 範圍 | 全部 |
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 控制器可以更新這項規則。 |
|
0.0.0.0/0 | TCP:1 到 65535 |
GKE Ingress 防火牆規則
建立 Ingress 資源時,GKE 會建立下列 Ingress 防火牆規則:
| 名稱 | 目的 | 來源 | 目標 (定義目的地) | 通訊協定和通訊埠 |
|---|---|---|---|---|
k8s-fw-l7-[random-hash] |
允許對 建立第一個 Ingress 資源時,Ingress 控制器會建立這項規則。如果建立更多 Ingress 資源,Ingress 控制器可以更新這項規則。 |
|
節點標記 | 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 防火牆規則所使用的目標標記。
後續步驟
- 請參閱 GKE 網路總覽。
- 瞭解如何設定應用程式的網路政策。
- 瞭解 Google Cloud中的其他預先填入防火牆規則。
- 進一步瞭解如何在採用 Shared VPC 的專案中建立防火牆規則。