本頁說明如何設定以 Google Kubernetes Engine (GKE) Autopilot 模式建立的叢集,透過 Egress NAT 政策執行 IP 偽裝。
如要進一步瞭解 GKE Standard 模式中的 IP 偽裝,請參閱「設定 IP 偽裝代理程式」。
總覽
透過 GKE Egress NAT 政策,您可以設定 Autopilot 叢集的 IP 偽裝行為。
GKE 支援兩種自動產生的輸出 NAT 政策:
- 由 GKE 管理,且為固定值,無法編輯。
- 可編輯的預設政策。
本頁說明如何編輯及部署 Egress NAT 政策,方法是編輯預設政策或建立 Egress NAT 政策。本頁也會說明如何刪除已建立的 Egress NAT 政策。
如要進一步瞭解輸出 NAT 政策行為,請參閱 Autopilot 叢集的流量偽裝行為。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
請確認您擁有執行 1.23.4-gke.1600 以上版本,或 1.22.7-gke.1500 以上版本的 Autopilot 叢集。叢集必須啟用 GKE Dataplane V2。
確認叢集正在執行工作負載。詳情請參閱如何要求資源。
檢查輸出 NAT 政策狀態
您可以使用 Google Cloud CLI 工具,檢查叢集是否正在執行 Egress NAT 政策自訂資源定義 (CRD):
取得叢集的憑證:
gcloud container clusters get-credentials CLUSTER-NAME
將
CLUSTER_NAME
替換為叢集名稱。檢查輸出 NAT 政策是否正在執行:
kubectl get crds egressnatpolicies.networking.gke.io
如果 Egress NAT 政策正在執行,輸出結果會與下列內容相似:
NAME CREATED AT egressnatpolicies.networking.gke.io 2022-03-16T21:05:43Z
取得已建立的輸出 NAT 政策清單:
kubectl get egressnatpolicies
輸出結果會與下列內容相似:
NAME AGE default 44h gke-bbfa6c0e-1 44h
編輯現有的預設政策
GKE 支援兩種自動產生的 NAT 政策:「預設政策」和「由 GKE 管理的政策」。您可以編輯預設政策,並設定預設非偽裝目的地。
如要編輯現有的預設政策,請按照下列步驟操作:
取得叢集的憑證:
gcloud container clusters get-credentials CLUSTER_NAME
將
CLUSTER_NAME
替換為叢集名稱。編輯預設的 Egress NAT 政策:
kubectl edit egressnatpolicies default
以
cidr
屬性新增或移除目的地,並以 CIDR 格式執行 NoSNAT 動作:apiVersion: networking.gke.io/v1 kind: EgressNATPolicy metadata: name: default spec: action: NoSNAT destinations: - cidr: 10.0.0.0/8 - cidr: 172.16.0.0/12 - cidr: 192.168.0.0/16 - cidr: 240.0.0.0/4 - cidr: 192.0.2.0/24 - cidr: 198.51.100.0/24 - cidr: 203.0.113.0/24 - cidr: 100.64.0.0/10 - cidr: 198.18.0.0/15 - cidr: 192.0.0.0/24 - cidr: 192.88.99.0/24
封包傳送至這些目的地時,叢集不會偽裝 IP 位址來源,並會保留來源 Pod IP 位址。
如要確認已部署編輯過的預設政策,請檢查 Kubernetes 事件:
kubectl get events
輸出結果會與下列內容相似:
LAST SEEN TYPE REASON OBJECT MESSAGE 13s Normal EnsuringPolicy egressnatpolicy/default Ensuring IP masquerade config for policy "default"
變更最多可能需要三分鐘才會套用。
部署新的輸出 NAT 政策
如要使用 NoSNAT 動作新增目的地,可以採取下列任一做法:
- 您可以編輯現有的預設政策。
- 您可以建立新的 Egress NAT 原則。
如要建立不屬於預設政策的新 Egress NAT 政策,請執行下列步驟:
將下列資訊清單儲存為
egress_nat_policy.yaml
:kind: EgressNATPolicy apiVersion: networking.gke.io/v1 metadata: name: POLICY_NAME spec: action: NoSNAT destinations: - cidr: CIDR_1 - cidr: CIDR_2
更改下列內容:
POLICY_NAME
:新政策的名稱。CIDR_1
和CIDR_2
:CIDR 格式的 IP 位址範圍。封包傳送至這些目的地時,叢集不會偽裝 IP 位址來源,並會保留來源 Pod IP 位址。如需超過兩個 CIDR,請按照相同格式在destinations
清單中新增更多項目。
部署新政策:
kubectl create -f egress_nat_policy.yaml
檢查 Kubernetes 事件,確認政策已部署:
kubectl get events
輸出結果會與下列內容相似:
LAST SEEN TYPE REASON OBJECT MESSAGE 13s Normal EnsuringPolicy egressnatpolicy/mypolicy Ensuring IP masquerade config for policy "mypolicy"
刪除輸出 NAT 政策
如要徹底刪除 Egress NAT 政策,請執行下列指令:
kubectl delete egressnatpolicies POLICY_NAME
將 POLICY_NAME
替換為要刪除的政策名稱。