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 を実行して最新のバージョンを取得します。
  • バージョン 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 は、削除するポリシーの名前に置き換えます。

次のステップ