Cloud NAT NAT ルールの使用

1. 概要

Cloud NAT は強力なツールです。これを使用すると、Compute Engine と Google Kubernetes Engine(GKE)のワークロードは、外部 IP を使用した外部アクセスにさらされることなく、スケーラブルかつ安全な方法でインターネット リソースにアクセスできます。

Cloud NAT はプロキシレスの設計を採用しており、Andromeda SDN レイヤに直接 NAT を実装しています。そのため、ワークロードのパフォーマンスへの影響はありません。また、多数の VM、リージョン、VPC に容易にスケーリングできます。

NAT ルールは Cloud NAT の拡張版です。Cloud NAT の NAT ルール機能を使用すると、Cloud NAT を使用してインターネットに接続する方法を定義するアクセスルールを作成できます。現在、NAT ルールでは、宛先アドレスに基づいた送信元 NAT アドレスの選択がサポートされています。

NAT ルールを使用しない場合、Cloud NAT が有効になっている VM は、同じ NAT IP アドレスのセットを使用して、すべてのインターネット アドレスに到達します。

NAT のユースケースでは、Cloud NAT が特定の宛先に異なる送信元 IP アドレスを使用することがあります。NAT ルールは、一致とそれに対応するアクションを定義します。NAT ルールを指定すると、パケットが各 NAT ルールと照合されます。ルールが一致すると、その一致に対応するアクションが実行されます。

詳細については、NAT ルールに関するドキュメントのセクション をご覧ください。

学習内容

  • NAT ルールに備えて Cloud NAT ゲートウェイを設定する方法。
  • Common Expression Language(CEL)を使用して NAT ルールを設計する方法。
  • NAT ルールを作成して NAT ゲートウェイに接続する方法。
  • インスタンスから NAT ルールをテストする方法
  • NAT ゲートウェイのルールを更新する方法。
  • NAT ルールを削除して Cloud NAT をデフォルトの動作に戻す方法。

必要なもの

  • Google Compute Engine に関する基本的な知識
  • ネットワークと TCP/IP に関する基本的な知識
  • Unix / Linux コマンドラインに関する基本的な知識
  • GCP のネットワーキング ツアー(Networking in Google Cloud ラボなど)を完了しておくことをおすすめします。
  • Cloud NAT の基本を理解していること。

2. Google Cloud コンソールと Cloud Shell の使用

このラボでは、GCP とやり取りするために Google Cloud コンソールと Cloud Shell の両方を使用します。

Google Cloud Console

Cloud コンソールには https://console.cloud.google.com からアクセスできます。

75eef5f6fd6d7e41.png

セルフペース型の環境設定

  1. Cloud コンソールにログインして、新しいプロジェクトを作成するか、既存のプロジェクトを再利用しますGmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • [プロジェクト名] は、このプロジェクトの個人識別子です。命名規則に従っていれば、自由に使用でき、いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトで一意である必要があり、不変です(一度設定すると変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常、それが何であるかは関係ありません。ほとんどの Codelab では、プロジェクト ID を参照する必要があります(通常は PROJECT_ID で識別されます)。気に入らない場合は、別のランダムな ID を生成するか、独自の ID が使用可能かどうかを確認します。「固定」しますプロジェクトが作成されます。
  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは、$300 USD 分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

bce75f34b2c53987.png

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

f6ef2b5f13479f3a.png

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。そのため、ネットワークのパフォーマンスと認証機能が大幅に向上しています。このラボでの作業はすべて、ブラウザから実行できます。

3. ラボの設定

このラボでは、プロジェクトを使用して 2 つの VPC を作成し、それぞれにサブネットを設定します。外部 IP アドレスを予約してから、1 つの Cloud NAT ゲートウェイ(Cloud Router を使用)、2 つのプロデューサー インスタンス、1 つのコンシューマ インスタンスを作成して構成します。Cloud NAT のデフォルトの動作を検証したら、Cloud NAT カスタムルールを作成して動作を検証します。

ネットワーキング アーキテクチャの概要:

815147de3de0bd19.png

4. 外部 IP アドレスを予約する

このラボで使用するすべての外部 IP アドレスを予約します。これにより、コンシューマ VPC とプロデューサー VPC の両方で、関連するすべての NAT ルールとファイアウォール ルールを作成できます。

Cloud Shell から次の操作を行います。

gcloud compute addresses  create nat-address-1 nat-address-2 nat-address-3 producer-address-1 producer-address-2 --region us-east4

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Created [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

環境変数として予約した IP アドレスを入力します。

export natip1=`gcloud compute addresses list --filter name:nat-address-1 --format="get(address)"`
export natip2=`gcloud compute addresses list --filter name:nat-address-2 --format="get(address)"`
export natip3=`gcloud compute addresses list --filter name:nat-address-3 --format="get(address)"`
export producerip1=`gcloud compute addresses list --filter name:producer-address-1 --format="get(address)"`
export producerip2=`gcloud compute addresses list --filter name:producer-address-2 --format="get(address)"`

出力は想定されていませんが、アドレスが正しく入力されたことを確認するためのものです。すべての環境変数の値を出力しましょう。

$ env | egrep '^(nat|producer)ip[1-3]'

出力:

producerip1=<Actual Producer IP 1>
producerip2=<Actual Producer IP 2>
natip1=<NAT IP 1>
natip2=<NAT IP 2>
natip3=<NAT IP 3>

5. プロデューサー VPC とインスタンスの設定。

次に、プロデューサー リソース用のリソースを作成します。プロデューサー VPC で実行されるインスタンスは、2 つのパブリック IP「producer-address-1」を使用してインターネットに接続するサービスを提供します。「producer-address-2」ををタップします。

まず、VPC を作成します。Cloud Shell から次の操作を行います。

gcloud compute networks create producer-vpc --subnet-mode custom

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/producer-vpc].
NAME      SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
producer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp

次に、us-east4 にサブネットを作成します。Cloud Shell から次の操作を行います。

gcloud compute networks subnets create producer-e4 \
   --network producer-vpc --range 10.0.0.0/24 --region us-east4

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/producer-e4].
NAME              REGION       NETWORK       RANGE
producer-e4       us-east4  producer-vpc  10.0.0.0/24

次に、NAT IP アドレスがポート 8080 のプロデューサー インスタンスに到達できるように VPC ファイアウォール ルールを作成します。

Cloud Shell で 1 つ目のルールを作成します。

gcloud compute firewall-rules create producer-allow-8080 \
  --network producer-vpc --allow tcp:8080 \
  --source-ranges $natip1,$natip2,$natip3

出力:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/producer-allow-8080].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
producer-allow-8080  producer-vpc  INGRESS    1000      tcp:8080        False

次のステップでは、2 つのプロデューサー インスタンスを作成します。

プロデューサー インスタンスは、Docker Hub にある Docker コンテナで IP エコー サービスを実行します(ソースコードはサービス作成者の GitHub リポジトリから入手できます)。

すべての必要なソフトウェアを使用してインスタンスをすばやくプロビジョニングするには、Compute Engine でのコンテナのデプロイ機能を使用します。

NAT ルールを作成できるように、各インスタンスをそれぞれ異なる予約済み IP アドレスでプロビジョニングします。

最初のインスタンスを作成します。Cloud Shell から次の操作を行います。

gcloud compute instances create-with-container producer-instance-1 \
--zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-1,network-tier=PREMIUM,subnet=producer-e4 \
--container-image=mpolden/echoip --container-restart-policy=always

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-1].
NAME                 ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
producer-instance-1  us-east4-a  e2-medium                  10.0.0.2     <producer IP 1>  RUNNING

次に、2 つ目のインスタンスを作成します。Cloud Shell から次の操作を行います。

gcloud compute instances create-with-container producer-instance-2 \
 --zone=us-east4-a --machine-type=e2-medium \
--network-interface=address=producer-address-2,network-tier=PREMIUM,subnet=producer-e4 \
--container-image=mpolden/echoip --container-restart-policy=always

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/producer-instance-2].
NAME                 ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
producer-instance-2  us-east4-a  e2-medium                  10.0.0.3     <producer IP 2>  RUNNING

6. コンシューマ VPC、Cloud NAT、インスタンスの設定

プロデューサー サービスを作成したら、次はコンシューマ VPC とその Cloud NAT ゲートウェイを作成します。

VPC とサブネットを作成したら、TCP 送信元 IP 範囲の IAP を許可する単純な上り(内向き)ファイアウォール ルールを追加します。これにより、gcloud を使用してコンシューマ インスタンスに直接 SSH 接続できます。

次に、手動割り当てモードでシンプルな Cloud NAT ゲートウェイを作成し、予約済みアドレス「nat-address-1」を使用します。関連付けられていますCodelab の後半では、ゲートウェイの構成を更新してカスタムルールを追加します。.

まず、VPC を作成します。Cloud Shell から次の操作を行います。

gcloud compute networks create consumer-vpc --subnet-mode custom

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/networks/consumer-vpc].
NAME      SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
consumer-vpc  CUSTOM       REGIONAL

Instances on this network will not be reachable until firewall rules
are created. As an example, you can allow all internal traffic between
instances as well as SSH, RDP, and ICMP by running:

$ gcloud compute firewall-rules create <FIREWALL_NAME> --network consumer-vpc --allow tcp,udp,icmp --source-ranges <IP_RANGE>
$ gcloud compute firewall-rules create <FIREWALL_NAME> --network producer-vpc --allow tcp:22,tcp:3389,icmp

次に、us-east4 にサブネットを作成します。Cloud Shell から次の操作を行います。

gcloud compute networks subnets create consumer-e4 \
   --network consumer-vpc --range 10.0.0.0/24 --region us-east4

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/regions/us-east4/subnetworks/consumer-e4].
NAME              REGION       NETWORK       RANGE
consumer-e4       us-east4  consumer-vpc  10.0.0.0/24

次に、IAP 範囲のアドレスがポート 22 のコンシューマ インスタンスに到達できるように VPC ファイアウォール ルールを作成します。

1 つ目のファイアウォール ルールについては、Cloud Shell から次のコマンドを実行します。

gcloud compute firewall-rules create consumer-allow-iap \
  --network consumer-vpc --allow tcp:22 \
  --source-ranges 35.235.240.0/20

出力:

Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/global/firewalls/consumer-allow-iap].
Creating firewall...done.
NAME                 NETWORK       DIRECTION  PRIORITY  ALLOW     DENY  DISABLED
consumer-allow-iap  consumer-vpc  INGRESS    1000      tcp:22        False

NAT ゲートウェイを作成する前に、まず Cloud Router インスタンスを作成する必要があります(プライベート ASN 番号を使用しますが、このラボのアクティビティには関係ありません)。Cloud Shell から次の操作を行います。

gcloud compute routers create consumer-cr \
--region=us-east4 --network=consumer-vpc \
 --asn=65501

出力:

Creating router [consumer-cr]...done.
NAME         REGION       NETWORK
consumer-cr  us-east4  consumer-vpc

次に、NAT ゲートウェイ インスタンスを作成します。Cloud Shell から次の操作を行います。

gcloud compute routers nats create consumer-nat-gw \
    --router=consumer-cr \
    --router-region=us-east4 \
    --nat-all-subnet-ip-ranges \
    --nat-external-ip-pool=nat-address-1

出力:

Creating NAT [consumer-nat-gw] in router [consumer-cr]...done.

コンシューマのテスト インスタンスを作成します。後でインスタンス内で参照できるように、予約済みのプロデューサー IP をここに入力します。Cloud Shell から次の操作を行います。

gcloud compute instances create consumer-instance --zone=us-east4-a \
--machine-type=e2-medium --network-interface=subnet=consumer-e4,no-address \
--metadata=producer-service-ip1=$producerip1,producer-service-ip2=$producerip2

出力:

Created [https://www.googleapis.com/compute/v1/projects/<Project-ID>/zones/us-east4-a/instances/consumer-instance].
NAME               ZONE           MACHINE_TYPE  PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
consumer-instance  us-east4-a  e2-medium                  10.0.0.2                  RUNNING

7. Cloud NAT のデフォルトの動作を確認する

この時点で、コンシューマ インスタンスは同じ予約済み IP「nat-address-1」を使用するデフォルトの Cloud NAT 動作を使用します。内部 IP アドレスを使用して通信できます

Cloud NAT の新しい NAT ルール機能を使用する前に、この動作を検証しましょう。

コンシューマ インスタンスに SSH 接続します。Cloud Shell から次の操作を行います。

gcloud compute ssh consumer-instance --zone=us-east4-a

インスタンスのシェルが表示されます。

出力例(簡略化のために出力全体を省略しています)

No zone specified. Using zone [us-east4-a] for instance: [consumer-instance].
External IP address was not found; defaulting to using IAP tunneling.
...
...
<username>@consumer-instance:~$

コンシューマ インスタンス内から両方のプロデューサー IP を取得し、環境変数として設定します。

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

次に、両方のプロデューサー インスタンスに対して curl を実行し、返された送信元 IP アドレスを確認します。

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.136.8.83

両方のエンドポイントに同じ IP アドレスが返されます。これは、外部予約済み IP「nat-address-1」の値と同じです。

同様に、外部 IP リフレクタ サービスに対する curl を実行すると、同じ IP が表示されるはずです。次に例を示します。

<username>@consumer-instance:~$ curl http://ifconfig.co
34.136.8.83
<username>@consumer-instance:~$ curl http://ifconfig.me
34.136.8.83
<username>@consumer-instance:~$ curl http://ip.fyr.io
34.136.8.83

インスタンスの SSH セッションを終了します。NAT ルールを構成した後、SSH で接続します。

8. Cloud NAT ルールを作成する

NAT ルールは Common Expression Language 構文を使用して記述します。ルール式言語の詳細については、ルール式言語をご覧ください。

gcloud コマンドを使用して、既存の NAT ゲートウェイに NAT ルールを追加することもできます。Cloud NAT ルールを作成するための両方のオプションについて説明します。

まず、NAT ルールの YAML ファイルを作成します。

Cloud Shell から次の操作を行います。

export projectid=`gcloud config get-value project`

cat <<EOF >natrulesfile.txt
rules:
 - ruleNumber: 100
   match: destination.ip == '$producerip2'
   action:
     sourceNatActiveIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-2
EOF

次に、このルールファイルを使用して既存の NAT ゲートウェイを更新します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

次のような出力が表示されます。

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

ルールが正常に構成されていることを確認します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4

次のような出力が表示されます。

RULE_NUMBER  MATCH
100          destination.ip == '35.192.142.134'

gcloud コマンドのみを使用して、同じルールを再作成してみましょう。まず、既存のルールを削除します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules delete 100 \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --quiet

次のような出力が表示されます。

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

その後、この gcloud コマンドを使用してルールを再作成します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules create 100 \
 --match='destination.ip == "'$producerip2'"' \
--source-nat-active-ips=nat-address-2 --nat=consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

次のような出力が表示されます。

Creating Rule [100] in NAT [consumer-nat-gw]...done.

ルールが正常に作成されたことを確認するには、前のコマンドを繰り返します。今回は YAML 形式スイッチを追加して、ルールの詳細全体を表示します。

Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules list\
 --nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4  --format=yaml

次のような出力が表示されます。

---
action:
  sourceNatActiveIps:
  - https://www.googleapis.com/compute/alpha/projects/<Project-ID>/regions/us-east4/addresses/nat-address-2
match: destination.ip == <actual IP for producer-IP 2>
ruleNumber: 100

最後に、今度は両方の「nat-address1」が「nat-address-2」外部アドレスは「IN_USE」と表示されます。これを確認するには、Cloud Shell から次のコマンドを実行します。

$ gcloud compute addresses list

次のような出力が表示されます(実際の IP アドレスは、予約したアドレスと一致している必要があります)。

NAME                ADDRESS/RANGE   TYPE      PURPOSE  NETWORK  REGION       SUBNET  STATUS
nat-address-1       34.136.8.83     EXTERNAL                    us-east4          IN_USE
nat-address-2       34.70.137.35    EXTERNAL                    us-east4          IN_USE
nat-address-3       34.135.103.88   EXTERNAL                    us-east4          RESERVED
producer-address-1  34.66.0.105     EXTERNAL                    us-east4          IN_USE
producer-address-2  35.192.142.134  EXTERNAL                    us-east4          IN_USE

9. Cloud NAT ルールの動作を確認する

この時点で、コンシューマ インスタンスは、作成した Cloud NAT ルールを使用して nat-address-2 を使用して producer-address-2 と通信します。

この動作を検証してみましょう。コンシューマ インスタンスに SSH 接続します。Cloud Shell から次の操作を行います。

gcloud compute ssh consumer-instance --zone=us-east4-a

インスタンスのシェルが表示されます。

出力例(簡略化のために出力全体を省略しています)

No zone specified. Using zone [us-east4-a] for instance: [consumer-instance].
External IP address was not found; defaulting to using IAP tunneling.
...
...
<username>@consumer-instance:~$

コンシューマ インスタンス内から両方のプロデューサー IP を取得し、環境変数として設定します。

export producerip1=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip1" -H "Metadata-Flavor: Google"`

export producerip2=`curl -s "http://metadata.google.internal/computeMetadata/v1/instance/attributes/producer-service-ip2" -H "Metadata-Flavor: Google"`

次に、両方のプロデューサー インスタンスに対して curl を実行し、返された送信元 IP アドレスを確認します。

<username>@consumer-instance:~$ curl http://$producerip1:8080
34.136.8.83
<username>@consumer-instance:~$ curl http://$producerip2:8080
34.70.137.35

両方のエンドポイントに対して異なる IP アドレスが返されるはずです。最初の IP アドレスはデフォルトの動作と同じである必要があります。2 番目の IP アドレスは「nat-address-2」と等しくする必要があります。新しい NAT ルールの追加後に開始されます

外部 IP リフレクタ サービスへの curl コマンドを実行しても、デフォルトの動作と同じ IP が表示されます。次に例を示します。

<username>@consumer-instance:~$ curl http://ifconfig.co
34.136.8.83
<username>@consumer-instance:~$ curl http://ifconfig.me
34.136.8.83
<username>@consumer-instance:~$ curl http://ip.fyr.io
34.136.8.83

インスタンスの SSH セッションを終了します。SSH で再度アドレス ドレインをテストします。

10. 更新(&G)Cloud NAT ルールを削除する

既存の Cloud NAT ルールを更新できます。たとえば、新しい IP アドレスを関連付けたり、既存のルールに関連付けられている既存の IP アドレスをドレインしたりできます。

NAT ルールファイルを次のように更新しましょう。

Cloud Shell から次の操作を行います。

export projectid=`gcloud config get-value project`

cat <<EOF >natrulesfile.txt
rules:
 - ruleNumber: 100
   match: destination.ip == '$producerip2'
   action:
     sourceNatDrainIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-2
     sourceNatActiveIps:
     -  /projects/$projectid/regions/us-east4/addresses/nat-address-3
EOF

この新しいファイルには「nat-address-2」が配置されます。ドレインされた状態にします「nat-address-3」を追加しますアクティブな状態にします。これにより、nat-address-2 を使用する既存の接続が正常に終了し、nat-address-3 のみを使用する新しい接続を作成できるようになります。

次に、このルールファイルを使用して既存の NAT ゲートウェイを更新します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats update consumer-nat-gw \
    --router=consumer-cr \
    --rules=natrulesfile.txt \
    --router-region=us-east4

次のような出力が表示されます。

Updating nat [consumer-nat-gw] in router [consumer-cr]...done.

ルールが正常に構成されていることを確認します。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules list \
--nat=consumer-nat-gw --router=consumer-cr \
--router-region=us-east4 --format=yaml

次のような出力が表示されます。

---
action:
  sourceNatActiveIps:
  - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-3
  sourceNatDrainIps:
  - https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-2
match: destination.ip == '35.192.142.134'
ruleNumber: 100

「nat-address-2」がドレインされた状態になりますコンシューマ VPC からの新しい接続で正しい NAT IP が使用されるようになったことを確認する演習は、ユーザーの責任で行っていただきます。

最後に、Cloud NAT ゲートウェイから NAT ルールを削除してデフォルトの動作に戻します。次の gcloud コマンドを使用できます。Cloud Shell から次の操作を行います。

gcloud alpha compute routers nats rules delete 100 \
 --nat=consumer-nat-gw --router=consumer-cr \
 --router-region=us-east4 --quiet

次のような出力が表示されます。

Updated [https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/routers/consumer-cr]

NAT ルールがこれ以上存在しないことを確認するには、NAT ゲートウェイの describe コマンドを使用します。

gcloud alpha compute routers nats describe consumer-nat-gw \
 --router=consumer-cr --router-region=us-east4

次のような出力が表示されます。

enableEndpointIndependentMapping: false
name: consumer-nat-gw
natIpAllocateOption: MANUAL_ONLY
natIps:
- https://www.googleapis.com/compute/alpha/projects/ghaleb-s2/regions/us-east4/addresses/nat-address-1
sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES

「rules:」セクションがあります。NAT ルールが構成されていないことを示します。

11. クリーンアップ手順

定期的な請求が発生しないようにするため、この Codelab に関連付けられているリソースをすべて削除する必要があります。

まず、すべてのインスタンスを削除します。

Cloud Shell から次の操作を行います。

gcloud compute instances delete consumer-instance \
producer-instance-1 producer-instance-2 \
 --zone us-east4-a --quiet

予想される出力 :

Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/consumer-instance].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project Id>/zones/us-east4-a/instances/producer-instance-2].

次に、Cloud Router を削除します。Cloud Shell から次の操作を行います。

gcloud compute routers delete consumer-cr \
--region us-east4 --quiet

次のような出力が表示されます。

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/routers/consumer-cr].

すべての外部 IP アドレスを解放します。Cloud Shell から次の操作を行います。

gcloud compute addresses delete nat-address-1 \
 nat-address-2 nat-address-3 producer-address-1 \
producer-address-2 --region us-east4 --quiet

次のような出力が表示されます。

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-2].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/nat-address-3].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-1].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/addresses/producer-address-2].

VPC ファイアウォール ルールを削除します。Cloud Shell から次の操作を行います。

gcloud compute firewall-rules delete consumer-allow-iap \
 producer-allow-8080 --quiet

次のような出力が表示されます。

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/consumer-allow-iap].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/firewalls/producer-allow-8080].

サブネットを削除します。Cloud Shell から次の操作を行います。

gcloud compute networks subnets delete consumer-e4 \
producer-e4 --region=us-east4 --quiet

次のような出力が表示されます。

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/consumer-e4].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/regions/us-east4/subnetworks/producer-e4].

最後に、VPC を削除します。Cloud Shell から次の操作を行います。

gcloud compute networks delete consumer-vpc \
producer-vpc --quiet

次のような出力が表示されます。

Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/consumer-vpc].
Deleted [https://www.googleapis.com/compute/v1/projects/<Project ID>/global/networks/producer-vpc].

12. 完了

これで Cloud NAT ルールのラボが完了しました。

学習した内容

  • NAT ルールに備えて Cloud NAT ゲートウェイを設定する方法。
  • Common Expression Language(CEL)を使用して NAT ルールを設計する方法。
  • NAT ルールを作成して NAT ゲートウェイに接続する方法。
  • インスタンスから NAT ルールをテストする方法
  • NAT ゲートウェイのルールを更新する方法。
  • NAT ルールを削除して Cloud NAT をデフォルトの動作に戻す方法。

次のステップ

  • こちらの例のような、より複雑な NAT ルールの作成を試します。
  • NAT IP アドレスのドレインを試し、接続の影響を確認します。
  • Google Cloud Platform のネットワーキングについて学習する

©Google, Inc. or its affiliates. All rights reserved. Do not distribute.