本頁面說明如何停用 GKE 為 LoadBalancer 服務建立的 Ingress 允許 VPC 防火牆規則。
在下列情況中,停用 LoadBalancer Service 的自動建立防火牆規則可能很有用:
- 如果您在兩個以上的 GKE 叢集中有多個 LoadBalancer Service,自行管理防火牆規則會更有效率。舉例來說,您手動建立的防火牆規則可允許多個 LoadBalancer Service 的輸入流量,不必讓 GKE 為每個 LoadBalancer Service 建立專屬的防火牆規則。
- 您可以改用階層式防火牆政策、全域網路防火牆政策或區域網路防火牆政策,這些防火牆政策中的規則支援其他動作、更彈性的目標,以及地理位置、威脅情報、位址群組和 FQDN 等功能。
如要停用 LoadBalancer Service 的自動建立防火牆規則,您必須在建立或更新叢集時指定 --disable-l4-lb-firewall-reconciliation
標記。--disable-l4-lb-firewall-reconciliation
標記不會影響其他自動建立的虛擬私有雲防火牆規則,例如有助於節點間通訊的規則,或是允許 Service 進行健康狀態檢查的規則。
需求條件
- 如要為 LoadBalancer Service 使用使用者管理的防火牆規則,GKE 叢集必須使用 1.31.3-gke.105600 以上版本。
限制
GKE 支援停用下列 LoadBalancer Service 類型的防火牆規則自動建立功能:
您無法停用下列 LoadBalancer Service 類型的防火牆規則自動建立功能:
- 未使用 GKE 子集的 Internal LoadBalancer 服務
- 以目標集區為基礎的外部 LoadBalancer Service
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
手動管理防火牆規則的策略
在 GKE 叢集中停用 LoadBalancer Service 的虛擬私有雲防火牆規則自動建立功能前,請先與安全管理員合作,制定手動設定防火牆規則的策略。
決定要使用哪種防火牆政策:階層式防火牆政策、全域網路防火牆政策或區域網路防火牆政策。如需建立防火牆政策的步驟,請參閱:
您也可以使用虛擬私有雲防火牆規則,這類規則不會使用任何政策。
您手動建立的防火牆規則必須是允許輸入規則,因為默示拒絕輸入防火牆規則會禁止傳入流量。停用自動建立虛擬私有雲防火牆規則後,除非您已建立與 LoadBalancer Service 流量相符的傳入允許防火牆規則,否則傳入流量不會抵達節點。
視防火牆規則的參數而定,單一輸入允許防火牆規則可套用至一或多個 LoadBalancer 服務。為您建立的每個輸入允許防火牆規則定義下列參數:
目標參數:確認防火牆規則至少包含含有 LoadBalancer 服務的叢集的所有節點。支援的目標取決於規則所在的防火牆政策類型,或是您是否使用虛擬私有雲防火牆規則。如要瞭解防火牆政策中規則的目標參數,請參閱「目標」。
「Protocols and ports」(通訊協定和通訊埠):包含防火牆規則需要套用的 LoadBalancer 服務所使用的所有通訊協定和目的地通訊埠。
到達網頁參數:您可以對到達網頁參數採用下列其中一種策略:
- 在目的地參數中,加入防火牆規則需要套用的所有 LoadBalancer 服務 IP 位址。如要找出 LoadBalancer 服務的 IP 位址,請使用下列指令:
kubectl get svc LOADBALANCER_NAME \ -n NAMESPACE_NAME \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}
- 您可以選擇省略目的地參數。如果省略目的地參數,目標參數會隱含定義目的地。詳情請參閱「連入規則的目標和 IP 位址」。
來源參數:指定用戶端使用的來源 (例如 IP 位址),這些用戶端需要連線至防火牆規則適用的負載平衡器服務。
如需建立防火牆規則的步驟,請參閱:
如要確保手動建立的防火牆規則運作正常,請執行 Network Intelligence Center (NIC) 連線測試。執行連線測試時:
- 將目的地設為 LoadBalancer 服務的 IP 位址。
- 將來源設為用戶端的 IP 位址。
詳情請參閱「排解連線問題」。
停用 LoadBalancer Service 的虛擬私有雲防火牆規則建立功能
本節說明如何停用 LoadBalancer Service 的虛擬私有雲防火牆規則自動建立功能。
建立新的 GKE 叢集,並停用虛擬私有雲防火牆規則建立功能
如要為新建立的叢集停用 LoadBalancer Service 的自動建立虛擬私有雲防火牆規則,請使用
--disable-l4-lb-firewall-reconciliation
標記建立叢集:Autopilot:
gcloud container clusters create-auto CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=VERSION
標準:
gcloud container clusters create CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --enable-l4-ilb-subsetting \ --cluster-version=VERSION
更改下列內容:
CLUSTER_NAME
:新叢集的名稱。VERSION
:GKE 版本。
建立外部或內部 LoadBalancer 服務:
確認 GKE 未為 LoadBalancer 服務建立允許輸入的防火牆規則。(系統自動建立的 Ingress 允許防火牆規則會採用以下格式的名稱:
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
)。下列指令會傳回包含
k8s2
的防火牆規則清單:gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
如果
externalTrafficPolicy
參數設為Local
,回應應只傳回k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
形式的健康狀態檢查防火牆規則。並使用spec.healthCheckNodePort
參數定義的 TCP 連接埠。如果未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
如果
externalTrafficPolicy
參數設為Cluster
,系統會改為傳回下列健康狀態檢查防火牆規則。k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
如要進一步瞭解為 GKE 服務產生的防火牆規則,請參閱「自動建立的防火牆規則」一文。
更新現有 GKE 叢集,停用虛擬私有雲防火牆規則建立功能
停用虛擬私有雲防火牆規則建立功能前,請注意下列更新現有叢集的相關事項:
- 更新現有叢集以停用虛擬私有雲防火牆規則建立功能時,GKE 不會刪除任何 GKE 為 LoadBalancer Service 自動建立的現有防火牆規則。
- GKE 會停止更新現有規則,也不會為新的 LoadBalancer Service 建立規則。
- 如要重新啟用虛擬私有雲防火牆規則建立功能,請搭配
gcloud_name container clusters update
指令使用--enable-l4-lb-firewall-reconciliation
標記。
如要停用現有叢集的自動防火牆規則建立功能,請按照下列步驟操作:
更新叢集,停用 LoadBalancer Service 的防火牆規則自動建立和管理功能:
gcloud container clusters update CLUSTER_NAME \ --disable-l4-lb-firewall-reconciliation \ --cluster-version=supported_version
更改下列內容:
CLUSTER_NAME
:新叢集的名稱。VERSION
:GKE 版本。
建立外部或內部 LoadBalancer 服務:
確認 GKE 不會為 LoadBalancer 服務建立允許輸入的防火牆規則。(系統自動建立的允許輸入防火牆規則會採用以下格式的名稱:
k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]
)。下列指令會傳回包含
k8s2
的防火牆規則清單:gcloud compute firewall-rules list --format="value(name)" | grep "k8s2"
如果
externalTrafficPolicy
參數設為Local
,回應應只傳回k8s2-[cluster-id]-[namespace]-[service-name]-[suffixhash]-fw
形式的健康狀態檢查防火牆規則。並使用spec.healthCheckNodePort
參數定義的 TCP 連接埠。如果未指定,Kubernetes 控制層會從節點埠範圍指派健康狀態檢查埠。k8s2-rkdld6go-default-ilb-svc-dluvsefq-fw default INGRESS 1000 tcp:30868 False
如果
externalTrafficPolicy
參數設為Cluster
,系統會改為傳回下列健康狀態檢查防火牆規則。k8s2-rkdld6go-l4-shared-hc-fw default INGRESS 1000 tcp:10256 False
如要進一步瞭解為 GKE 服務產生的防火牆規則,請參閱「自動建立的防火牆規則」一文。
排解連線問題
下列範例說明如何使用 Network Intelligence Center 連線測試,測試與外部 LoadBalancer 服務的連線:叢集:
Network Intelligence Center:
- 在 Google Cloud 控制台中,前往 Network Intelligence Center 並啟動新的連線測試。
- 從下拉式選單中選擇「任何外部公用 IP 位址」做為來源,並從目的地選取負載平衡器。
- 重新執行連線能力測試。
gcloud CLI:
下列範例指令會建立並執行測試,來源為本機工作站的公開 IP 位址,目的地為外部負載平衡器的外部 IP 位址:
gcloud network-management connectivity-tests create TEST_NAME \ --source-ip-address=SOURCE_IP_ADDRESS \ --source-network-type=NON_GCP_NETWORK \ --destination-ip-address=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.status.loadBalancer.ingress[0].ip}') \ --destination-port=$(kubectl get svc LOADBALANCER_NAME -o jsonpath='{.spec.ports[0].targetPort}') \ --destination-network=projects/PROJECT_ID/global/networks/NETWORK_NAME
更改下列內容:
TEST_NAME
:連線測試的名稱。SOURCE_IP_ADDRESS
:需要連線至外部 LoadBalancer 服務的系統 IP 位址。例如LOADBALANCER_NAME
:外部 LoadBalancer 服務的名稱。PROJECT_ID
:包含叢集 VPC 網路的專案 ID。如果叢集使用共用虛擬私有雲網路,請使用主專案的專案 ID。NETWORK_NAME
:叢集 VPC 網路的名稱。
查看測試結果:
gcloud network-management connectivity-tests describe TEST_NAME
後續步驟
- 進一步瞭解防火牆政策。
- 如要瞭解 GKE 預設自動建立的 ingress 允許虛擬私有雲防火牆規則,請參閱「自動建立的防火牆規則」。
- 如要瞭解 LoadBalancer 服務的參數,請參閱這篇文章。
- 瞭解 Google Cloud中的其他預先填入防火牆規則。
- 進一步瞭解如何在採用共用虛擬私有雲的專案中建立防火牆規則。