下り(外向き)NAT ポリシーを使用して Autopilot クラスタに IP マスカレードを構成する


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

概要

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

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

  • 固定で編集できない GKE によって管理されます。
  • 編集可能であるデフォルトのポリシー。

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

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

準備

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

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Google Cloud CLI がインストールされていることを確認します。
  • 次のいずれかの方法で、プロジェクトにデフォルトの Google Cloud CLI 設定をセットアップします。
    • プロジェクトのデフォルトの設定全般を確認する場合は、gcloud init を使用します。
    • gcloud config を使用して、プロジェクト ID、ゾーン、リージョンを個別に設定します。

    gcloud init

    1. gcloud init を実行して、次の操作を行います。

      gcloud init

      リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

      gcloud init --console-only
    2. Google Cloud アカウントを使用できるように、gcloud CLI の承認手順を行います。
    3. 新しい構成を作成するか、既存の構成を選択します。
    4. Google Cloud プロジェクトを選択します。
    5. デフォルトの Compute Engine ゾーンを選択します。
    6. デフォルトの Compute Engine リージョンを選択します。

    gcloud config

    1. デフォルトのプロジェクト ID を設定します。
      gcloud config set project PROJECT_ID
    2. デフォルトの Compute Engine リージョン(例: us-central1)を設定します。
      gcloud config set compute/region COMPUTE_REGION
    3. デフォルトの Compute Engine ゾーン(例: us-central1-c)を設定します。
      gcloud config set compute/zone COMPUTE_ZONE
    4. gcloud を最新バージョンに更新します。
      gcloud components update

    デフォルトの場所を設定することで、gcloud CLI のエラー(One of [--zone, --region] must be supplied: Please specify location など)を防止できます。

要件

GKE Egress NAT ポリシーを使用するには、次のものが必要です。

  • バージョン 1.23.4-gke.1600 以降のクラスタ、または 1.22.7-gke.1500 以降のクラスタ。
  • GKE Dataplane V2 が有効になっている Autopilot モードのクラスタ。

下り(外向き)NAT ポリシーのステータスを確認する

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

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

    gcloud container clusters get-credentials CLUSTER-NAME
    

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

  2. 下り(外向き)NAT ポリシーが実行されているかどうかを確認します。

    kubectl get crds egressnatpolicies.networking.gke.io
    

    下り(外向き)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 は、デフォルト ポリシーGKE ポリシーで管理の 2 つの自動生成された NAT ポリシーをサポートしています。デフォルト ポリシーは編集可能で、デフォルトのマスカレード以外の宛先を構成します。

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

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

    gcloud container clusters get-credentials CLUSTER_NAME
    

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

  2. デフォルトの下り(外向き)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"
    

新しい下り(外向き)NAT ポリシーをデプロイする

NoSNAT アクションで新しい宛先を追加するには、次のいずれかのオプションを使用します。

デフォルト ポリシーに含まれない新しい下り(外向き)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"
    

下り(外向き)NAT ポリシーの削除

下り(外向き)NAT ポリシーを完全に削除するには、次のコマンドを実行します。

kubectl delete egressnatpolicies POLICY_NAME

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

次のステップ