Cloud NAT ゲートウェイを作成する

概要

このユースケースでは、複数の下り(外向き)IP が割り当てられた Cloud NAT ゲートウェイを作成します。これらのゲートウェイは、ゲートウェイで構成された一致するラベルに一致する Pod と VM からトラフィックを下り(外向き)させます。ゲートウェイは、トラフィックを下り(外向き)させることができる各エンドポイントに下り(外向き)IP を自動的に割り当てます。

複数の下り(外向き)IP を使用したゲートウェイ設定の例

前提条件

ゲートウェイを設定する前に、適切な Identity and Access Management(IAM)権限を取得し、プロジェクトに適切なネットワーク ポリシーが設定されていることを確認して、下り(外向き)を有効にする必要があります。

詳細については、Cloud NAT を使用する前の準備 をご覧ください。

Cloud NAT ゲートウェイは、外部 leaf サブネットを入力として使用します。Cloud NAT の外部サブネットの構成の詳細については、 Cloud NAT の外部サブネットを作成するをご覧ください。

互換性のある Pod または VM 構成を確認する

NAT の概要で説明したように、Cloud NAT はデフォルトのプロジェクト下り(外向き)構成と互換性がありません 。Cloud NAT で使用する Pod または VM にラベル egress.networking.gke.io/enabled:true がないことを確認してください。

デフォルトでは、仮想マシン外部アクセス(VMEA)は、デフォルトのプロジェクト下り(外向き)構成を使用してトラフィックを下り(外向き)させるように VM を構成します。つまり、ラベル egress.networking.gke.io/enabled:"true" が VM に 自動的に追加されます。この VM が Cloud NAT ゲートウェイを使用してトラフィックを下り(外向き)させるように構成されている場合、NAT 構成が競合します。この競合を回避するには、Cloud NAT ゲートウェイを介してトラフィックを下り(外向き)させるように構成された VM に関連付けられているすべての VMEA について、その VM に関連付けられている VMEA にアノテーション egress.networking.gke.io/use-cloud-nat:"true" が設定されていることを確認します。これにより、関連付けられた VM は Cloud NAT ゲートウェイを介してのみトラフィックを下り(外向き)させます。

Cloud NAT ゲートウェイを作成する

次の例では、2 つの外部リーフ サブネット(subnet-1 と subnet-2)を持つ Cloud NAT ゲートウェイを定義します。ゲートウェイは、これらのサブネット内のすべての IP(subnet-1 から 1 つ、subnet-2 から 4 つ)を使用し、指定されたラベルを持つ各 VM または Pod のエンドポイントに自動的に割り当てます。複数の Pod または VM に同じ下り(外向き)IP を割り当てることができます。

apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
  namespace: project-1
  name: gateway-1
spec:
  workloadSelector:  # Immutable
    labelSelector:
      workloads:
        matchLabels:
          app: aa
  subnetRefs:        # Mutable
  - subnet-1
  - subnet-2

ゲートウェイのステータスを確認する

次の kubectl コマンドを実行して、ゲートウェイのステータスを確認します。

export MGMT_KUBECONFIG=<path_to_management_kubeconfig>
kubectl get cloudnatgateways gateway-1 -n project-1 --kubeconfig "${MGMT_KUBECONFIG:?}"

正しく構成されている場合、Cloud NAT ゲートウェイのステータス条件フィールドには、次の出力例に示すように、Ready タイプの条件が true に設定され、サブネットが OK とマークされます。

apiVersion: networking.gdc.goog/v1
kind: CloudNATGateway
metadata:
  namespace: project-1
  name: gateway-1
spec:
  workloadSelector:
    labelSelector:
      workloads:
        matchLabels:
          app: aa
  subnetRefs:
  - subnet-1
  - subnet-2
status:
  conditions:
  - lastTransitionTime: "2025-08-20T21:31:36Z"
    message: ""
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: Ready
  - lastTransitionTime: "2025-08-20T21:31:36Z"
    message: ""
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: SubnetsReady
  - lastTransitionTime: "2025-08-20T21:31:36Z"
    message: ""
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: PerimeterConfigurationReady
  - lastTransitionTime: "2025-08-20T21:31:36Z"
    message: ""
    observedGeneration: 1
    reason: Ready
    status: "True"
    type: EgressRoutesReady
  subnets:
  - name: subnet-1
    status: OK
  - name: subnet-2
    status: OK

Cloud NAT ゲートウェイのステータスには、次のタイプの 4 つの条件が含まれています。

  • Ready: この条件は、Cloud NAT ゲートウェイのステータスをまとめたものです。ゲートウェイが完全に設定されている場合、この 条件は true に設定されます。
  • SubnetsReady: この条件は、ゲートウェイに割り当てられたサブネットが有効かどうかを示します。
  • PerimeterConfigurationReady: この条件は、境界構成がすでに構成されているかどうかを示します(外部に公開されるノードに割り当てられた外部 IP など)。
  • EgressRoutesReady: この条件は、送信元エンドポイントからトラフィックを下り(外向き)させるルートがすでに構成されているかどうかを示します。

トラフィックをテストする

トラフィックをテストするには、ゲートウェイに割り当てられた Pod または VM のいずれかから外部エンドポイントに対して curl コマンドを発行します。受信エンドポイントには、ゲートウェイに関連付けられた下り(外向き)IP のいずれかが表示されます。