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

このページでは、Google Kubernetes Engine��GKE)Autopilot モードで作成されたクラスタが、Egress NAT ポリシーで IP マスカレードを実行するように構成する方法について説明します。

GKE Standard モードでの 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 をインストールして初期化する。gcloud CLI をインストール済みの場合は、gcloud components update コマンドを実行して最新のバージョンを取得します。以前のバージョンの 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"
    

    変更が適用されるまでには、最大で 3 分ほどかかる場合があります。

新しい 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_1CIDR_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 は、削除するポリシーの名前に置き換えます。

次のステップ