Egress NAT ポリシーを使用して Autopilot クラスタに IP マスカレードを構成する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Google Kubernetes Engine(GKE)Autopilot モードで作成されたクラスタが、Egress NAT ポリシーで IP マスカレードを実行するように構成する方法について説明します。GKE 標準モードでの IP マスカレードの詳細については、IP マスカレード エージェントを構成するをご覧ください。

概要

GKE Egress NAT ポリシーを使用すると、Autopilot クラスタの IP マスカレードの動作を構成できます。

GKE は、自動生成された 2 つの Egress NAT ポリシーをサポートしています。

  • GKE による管理は、固定のもので編集できません。
  • 編集可能であるデフォルトのポリシー。

このページでは、デフォルト ポリシーを編集するか、Egress NAT ポリシーを作成して、Egress NAT ポリシーを編集してデプロイする方法について説明します。また、作成された Egress NAT ポリシーを削除する方法についても説明します。

Egress NAT ポリシーの動作の詳細については、Autopilot クラスタのトラフィック マスカレードの動作をご覧ください。

準備

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。
  • バージョン 1.23.4-gke.1600 以降、または 1.22.7-gke.1500 以降を実行する Autopilot クラスタがあることを確認してください。クラスタで GKE Dataplane V2 を有効にする必要があります。

  • クラスタでワークロードが実行されていることを確認します。詳細については、リソースのリクエスト方法をご覧ください。

Egress NAT ポリシーのステータスを確認する

クラスタで Egress NAT ポリシーのカスタム リソース定義(CRD)が実行されているかどうかを確認するには、Google Cloud CLI ツールを使用します。

  1. クラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER-NAME
    

    CLUSTER_NAME はクラスタの名前で置き換えます。

  2. Egress NAT ポリシーが実行されているかどうかを確認します。

    kubectl get crds egressnatpolicies.networking.gke.io
    

    Egress NAT ポリシーが実行されている場合、出力は次のようになります。

     NAME                                  CREATED AT
     egressnatpolicies.networking.gke.io   2022-03-16T21:05:43Z
    
  3. 作成されたEgress NAT ポリシーのリストを取得します。

    kubectl get egressnatpolicies
    

    出力は次のようになります。

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

既存のデフォルト ポリシーを編集する

GKE は、デフォルト ポリシーGKE 管理のポリシーの 2 つの自動生成された NAT ポリシーをサポートしています。デフォルト ポリシーは編集可能で、デフォルトのマスカレード以外の宛先を構成します。

既存のデフォルト ポリシーを編集するには、次の手順を実行します。

  1. クラスタの認証情報を取得します。

    gcloud container clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME は、使用するクラスタの名前に置き換えます。

  2. デフォルトの Egress NAT ポリシーを編集します。

    kubectl edit egressnatpolicies default
    
  3. NoSNAT アクションで宛先を CIDR 形式cidr 属性として追加または削除します。

      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"
    

新しい Egress 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_1およびCIDR_2: CIDR 形式の IP アドレス範囲。これらの宛先にパケットが送信されると、クラスタで IP アドレスの送信元がマスカレードされず、送信元 Pod の IP アドレスが保持されます。3 つ以上の 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"
    

Egress NAT ポリシーを削除する

Egress NAT ポリシーを完全に削除するには、次のコマンドを実行します。

kubectl delete egressnatpolicies POLICY_NAME

POLICY_NAME は、削除するポリシーの名前に置き換えます。

次のステップ