概要
このユースケースでは、複数の下り(外向き)IP が割り当てられた Cloud NAT ゲートウェイを作成します。これらのゲートウェイは、ゲートウェイで構成された一致するラベルと一致する Pod と VM からトラフィックを送信します。ゲートウェイは、トラフィックを送信できる各エンドポイントに下り(外向き)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 のいずれかが表示されます。