本頁面說明 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 位址。舉例來說,這項規則允許的流量包括:
|
節點 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 網路總覽。
- 瞭解如何設定應用程式的網路政策。
- 瞭解 Cloud de Confiance中的其他預先填入防火牆規則。
- 進一步瞭解如何在採用 Shared VPC 的專案中建立防火牆規則。