外向きの静的 IP アドレス

デフォルトでは、Cloud Run サービスは、動的 IP アドレスプールを使用してインターネットの外部エンドポイントに接続します。Cloud Run サービスが、IP アドレスベースのファイアウォールを使用してデータベースや API などの静的 IP アドレスからの接続を必要とする外部エンドポイントに接続する場合、このデフォルトの設定は適していません。このような接続では、静的 IP アドレスを介してリクエストをルーティングするように Cloud Run サービスを構成する必要があります。

このガイドでは、静的 IP アドレスを使用して Cloud Run サービスからリクエストを送信できるようにする方法について説明します。

タスクの概要

Cloud Run サービスが静的 IP アドレス経由でリクエストをルーティングできるようにするには、Cloud NAT ゲートウェイに静的 IP アドレスが構成されている VPC ネットワーク経由ですべての送信トラフィックをルーティングするように、Cloud Run サービスの VPC 下り(外向き)を構成する必要があります。

Cloud NAT ゲートウェイと Cloud Router はコントロール プレーンのみを提供し、パケットが NAT ゲートウェイまたは Cloud Router を通過しないため、Cloud NAT 経由でルーティングしても、ネットワーク スタックで追加のホップは行われません。

同じ VPC ネットワークに接続しているすべての Cloud Run サービスは同じ下り(外向き)IP アドレスを共有します。個別の Cloud Run サービスに対して異なる下り(外向き)IP アドレスを使用するには、このガイドに沿って個別のサブネットワークとサーバーレス VPC アクセス コネクタを作成してください。

サブネットワークの作成

サーバーレス VPC アクセス コネクタのサブネットワークを作成して、Compute Engine VM や Google Kubernetes Engine クラスタなど、VPC 内に存在する他のコンピューティング リソースが、インターネットにアクセスするために構成した静的 IP を誤って使用しないようにします。

コマンドライン

  1. VPC ネットワークの名前を確認します。

    gcloud compute networks list

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

    NAME     SUBNET_MODE  BGP_ROUTING_MODE
    default  AUTO         REGIONAL

    サーバーレス VPC アクセス コネクタに接続したネットワークを特定します。

  2. サーバーレス VPC アクセス コネクタ用の VPC にサブネットワークを作成します。

    gcloud compute networks subnets create SUBNET_NAME
    --range=RANGE --network=NETWORK_NAME --region=REGION

    上記のコマンドの要素をそれぞれ次のように置き換えます。

    • SUBNET_NAME は、サブネットワークに付ける名前に置き換えます。
    • RANGE は、このサブネットワークに割り当てる CIDR 形式の IP 範囲10.124.0.0/28 など)に置き換えます。
    • NETWORK_NAME は VPC ネットワークの名前に置き換えます。
    • REGION は、サーバーレス VPC アクセス コネクタを作成するリージョンに置き換えます。

サーバーレス VPC アクセス コネクタの作成

Cloud Run サービスの送信トラフィックを VPC ネットワークにルーティングするには、サーバーレス VPC アクセス コネクタが必要です。

サーバーレス VPC アクセス コネクタを作成するには:

コマンドライン

  1. 事前に作成されたサブネットワークでサーバーレス VPC アクセス コネクタを作成します。

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
      --region=REGION \
      --subnet-project=PROJECT_ID \
      --subnet=SUBNET_NAME
    

    上記のコマンドの要素をそれぞれ次のように置き換えます。

    • CONNECTOR は、このリソースに付ける名前に置き換えます。
    • PROJECT_ID は、サブネットワークをホストする名前に置き換えます。
    • SUBNET_NAME は、作成したサブネットワークの名前に置き換えます。
    • REGION には、NAT ゲートウェイを作成するリージョンを指定します。

ネットワーク アドレス変換(NAT)の構成

サーバーレス VPC アクセス コネクタを使用すると、Cloud Run サービスからのリクエストは VPC ネットワークに到達します。静的 IP を介して外部エンドポイントに送信リクエストをルーティングするには、Cloud NAT ゲートウェイを構成する必要があります。

コマンドライン

  1. NAT ゲートウェイをプログラムする新しい Cloud Router を作成します。

    gcloud compute routers create ROUTER_NAME \
      --network=NETWORK_NAME \
      --region=REGION

    上記のコマンドの要素をそれぞれ次のように置き換えます。

    • ROUTER_NAME は、作成する Cloud Router リソースの名前に置き換えます。
    • NETWORK_NAME は、先ほど確認した VPC ネットワークの名前に置き換えます。
    • REGION には、NAT ゲートウェイを作成するリージョンを指定します。
  2. 静的 IP アドレスを予約します。予約済み IP アドレス リソースは、関連付けられているリソースが削除されて再作成されるときに、元の IP アドレスを保持します。

    gcloud compute addresses create ORIGIN_IP_NAME --region=REGION

    上記のコマンドの要素をそれぞれ次のように置き換えます。

    • ORIGIN_IP_NAME は、IP アドレス リソースに割り当てる名前で置き換えます。
    • REGION は、Cloud NAT ルーターを実行するリージョンに置き換えます。レイテンシとネットワーク コストを最小限に抑えるには、Cloud Run サービスと同じリージョンを使用することをおすすめします。
  3. 作成した静的 IP アドレスを使用して VPC ネットワークからのトラフィックをルーティングするように、このルーターに Cloud NAT ゲートウェイの構成を作成します。

    gcloud compute routers nats create NAT_NAME \
      --router=ROUTER_NAME \
      --region=REGION \
      --nat-custom-subnet-ip-ranges=SUBNET_NAME \
      --nat-external-ip-pool=ORIGIN_IP_NAME
    

    上記のコマンドの要素をそれぞれ次のように置き換えます。

    • NAT_NAME は、作成する Cloud NAT ゲートウェイ リソースの名前に置き換えます。
    • ROUTER_NAME は、Cloud Router の名前に置き換えます。
    • REGION には、NAT ゲートウェイを作成するリージョンを指定します。
    • ORIGIN_IP_NAME は、前の手順で作成した予約済み IP アドレス リソースの名前で置き換えます。

VPC ネットワーク経由での Cloud Run トラフィックのルーティング

NAT が構成されたら、サーバーレス VPC アクセス コネクタを使用して Cloud Run サービスをデプロイし、VPC ネットワーク経由ですべてのトラフィックをルーティングするように VPC 下り(外向き)を設定します。

コマンドライン

VPC コネクタを使用してすべての下り(外向き)トラフィックをルーティングする Cloud Run サービスをデプロイまたは更新します。

gcloud run deploy SERVICE_NAME \
   --image=IMAGE_URL \
   --vpc-connector=CONNECTOR_NAME \
   --vpc-egress=all-traffic

上記のコマンドの要素をそれぞれ次のように置き換えます。

  • SERVICE_NAME は、デプロイする Cloud Run サービスの名前に置き換えます。
  • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/myproject/my-image:latest など)に置き換えます。
  • CONNECTOR_NAME は、サーバーレス VPC アクセス コネクタの名前に置き換えます。

静的外部 IP の確認

上記の手順を完了すると、VPC ネットワーク上の Cloud NAT に事前定義の静的 IP アドレスが設定され、Cloud Run サービスのすべての送信トラフィックが VPC ネットワークにルーティングされます。Cloud Run サービスからのリクエストは VPC ネットワークを通過し、静的 IP アドレスを使用して外部エンドポイントに到達します。

この動作を確認して、サービスで使用されている元の IP アドレスを確認するには、元の IP アドレス(curlmyip.org など)を表示するウェブサイトまたは API にリクエストを送信します。