使用 Egress NAT 政策在 Autopilot 叢集中設定 IP 位址偽裝


本頁說明如何設定以 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):

  1. 取得叢集的憑證:

    gcloud container clusters get-credentials CLUSTER-NAME
    

    CLUSTER_NAME 替換為叢集名稱。

  2. 檢查輸出 NAT 政策是否正在執行:

    kubectl get crds egressnatpolicies.networking.gke.io
    

    如果 Egress NAT 政策正在執行,輸出結果會與下列內容相似:

     NAME                                  CREATED AT
     egressnatpolicies.networking.gke.io   2022-03-16T21:05:43Z
    
  3. 取得已建立的輸出 NAT 政策清單:

    kubectl get egressnatpolicies
    

    輸出結果會與下列內容相似:

      NAME             AGE
      default          44h
      gke-bbfa6c0e-1   44h
    

編輯現有的預設政策

GKE 支援兩種自動產生的 NAT 政策:「預設政策」和「由 GKE 管理的政策」。您可以編輯預設政策,並設定預設非偽裝目的地

如要編輯現有的預設政策,請按照下列步驟操作:

  1. 取得叢集的憑證:

    gcloud container clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME 替換為叢集名稱。

  2. 編輯預設的 Egress NAT 政策:

    kubectl edit egressnatpolicies default
    
  3. 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 位址。

  4. 如要確認已部署編輯過的預設政策,請檢查 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 政策,請執行下列步驟:

  1. 將下列資訊清單儲存為 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_1CIDR_2CIDR 格式的 IP 位址範圍。封包傳送至這些目的地時,叢集不會偽裝 IP 位址來源,並會保留來源 Pod IP 位址。如需超過兩個 CIDR,請按照相同格式在 destinations 清單中新增更多項目。
  2. 部署新政策:

    kubectl create -f egress_nat_policy.yaml
    
  3. 檢查 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 替換為要刪除的政策名稱。

後續步驟