デュアルスタック リソースを設定する

デュアルスタック サブネットを使用すると、Cloud Run リソースはダイレクト VPC 下り(外向き)を使用して VPC ネットワークに IPv4 トラフィックと IPv6 トラフィックを送信できます。既存の IPv4 のみ(シングルスタック)のサブネットをデュアルスタック サブネットに変更できます。

サブネットのタイプ

VPC ネットワークは、次の Compute Engine サブネット タイプをサポートしています。

  • IPv4 のみ(単一スタック)のサブネット(IPv4 サブネット範囲のみ)

  • IPv4 と IPv6(デュアル スタック)のサブネット(IPv4 と IPv6 の両方のサブネット範囲)

デュアルスタックの制限事項

既存の Cloud Run リソースのスタックタイプを変更する前に、次の制限事項を考慮してください。

  • デュアルスタック サポートは、カスタムモードの VPC ネットワークのサブネットでのみ使用できます。デュアルスタック サブネットで内部アクセスタイプを使用できるようにするには、VPC ネットワークの内部 IPv6 範囲を有効にする必要があります。VPC ネットワークをカスタムモードに設定または変換します。

  • IPv4 のみのサブネットと比較して、デュアルスタック サブネットではコールド スタートのレイテンシが増加し、アプリケーションのスケールアップ速度が制限される可能性があります。

  • NAT64 はサポートされていません。

始める前に

外部 IPv6 でサブネットを使用するには、Cloud Run サービス エージェントCompute パブリック IP 管理者ロール(roles/compute.publicIpAdminがあることを確認してください。

リソースにデュアルスタック サブネットを追加する

デュアルスタック サブネットには、IPv4 アドレス範囲と IPv6 アドレス範囲の両方が存在します。

Cloud Run リソースにデュアルスタック サブネットを追加する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで次の操作を行います。

    1. Compute Engine API を有効にします。

      Compute Engine API を有効にする

    2. VPC ネットワーク ページに移動

      [VPC ネットワーク] に移動

  2. 新しいカスタムモード ネットワークを作成する場合は、[VPC ネットワークを作成] をクリックします。既存の VPC ネットワークを使用している場合は、VPC ネットワークの名前をクリックして、[VPC ネットワークの詳細] ページを表示します。

  3. 新しいネットワークを作成する場合や既存のネットワークを変換する場合は、名前を入力し、[サブネット作成モード] が [カスタム] に設定されていることを確認してから、[この VPC ネットワークの ULA 内部 IPv6 範囲を構成する] を選択します。

  4. [サブネット] タブから [サブネットを追加] をクリックします。表示されるパネルで、次の手順を実施します。

    1. 名前を入力します。
    2. リージョンを選択します。
    3. [IP スタックタイプ] には、[IPv4 と IPv6(デュアルスタック)] を選択します。
    4. IPv4 範囲を入力します。これはサブネットのプライマリ IPv4 範囲です。
    5. [IPv6 アクセスタイプ] を選択します。

      [内部] オプションを使用できない場合は、ネットワークに内部 IPv6 範囲が割り当てられていることを確認します。

    6. [追加] をクリックします。

  5. 作成したデュアルスタック サブネットに Cloud Run サービスをデプロイするか、ジョブを実行するか、ワーカープールをデプロイします。必要なリソースの詳細を入力するときに、次の手順で新しい IPv6 アドレス範囲を選択します。

    1. [コンテナ、ボリューム、ネットワーキング、セキュリティ] をクリックし、[ネットワーキング] タブを選択します。
    2. [アウトバウンド トラフィック用の VPC に接続する]、[VPC に直接トラフィックを送信する] の順にクリックします。
    3. 前の手順で作成したネットワークを選択します。
    4. [サブネット] フィールドをクリックして、新しく作成した IPv6 アドレス範囲を選択します。

    リソースは、サブネットのスタックタイプで自動的にプロビジョニングされます。

gcloud

  1. デュアルスタック サブネットをサポートするカスタムモード ネットワークを作成するには、gcloud compute networks create コマンドを実行します。

    このネットワークのサブネットで内部 IPv6 範囲を構成するには、--enable-ula-internal-ipv6 フラグを使用します。このオプションでは、 Google Cloud が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 ULA 接頭辞を割り当てます。

    gcloud compute networks create NETWORK \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    

    NETWORK は、新しいサブネットを含む VPC ネットワークの名前に置き換えます。

  2. デュアルスタック サブネットをサポートするようにカスタムモード ネットワークを変換または更新するには、次のコマンドを実行します。

    gcloud compute networks update NETWORK \
      --subnet-mode=custom \
      --enable-ula-internal-ipv6
    

    NETWORK は、新しいサブネットを含む VPC ネットワークの名前に置き換えます。

  3. IPv6 範囲を持つデュアルスタック サブネットを作成するには、デュアルスタック設定を使用して subnets create コマンドを実行します。

    gcloud compute networks subnets create SUBNET \
      --network=NETWORK \
      --range=PRIMARY_IPv4_RANGE \
      --stack-type=IPV4_IPV6 \
      --ipv6-access-type=IPV6_ACCESS_TYPE \
      --region=REGION
    

    次のように置き換えます。

    • SUBNET: 新しいサブネットの名前。
    • NETWORK: 新しいサブネットが追加される VPC ネットワークの名前。
    • PRIMARY_IPv4_RANGE: 新しいサブネットのプライマリ IPv4 範囲(CIDR 表記)。詳細については、IPv4 サブネットの範囲をご覧ください。
    • IPV6_ACCESS_TYPE: 新しいサブネットの IPv6 アクセスタイプ(internal または external)。
    • REGION: 新しいサブネットが作成される Google Cloud リージョン。
  4. 作成したデュアルスタック サブネットに Cloud Run サービスをデプロイするか、ジョブを実行するか、ワーカープールをデプロイします。リソースは、サブネットのスタックタイプで自動的にプロビジョニングされます。

YAML

  1. 新しいサービスを作成する場合は、この手順をスキップします。既存のサービスを更新する場合は、その YAML 構成をダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. 次の属性を更新します。

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: SERVICE_NAME
        labels:
          cloud.googleapis.com/location: REGION
      spec:
        template:
          metadata:
            annotations:
              run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
              run.googleapis.com/vpc-access-egress: EGRESS_SETTING
          spec:
            containers:
            - image: IMAGE

    次のように置き換えます。

    • SERVICE_NAME: Cloud Run サービスの名前。サービス名は 49 文字以下で、リージョンとプロジェクトごとに一意である必要があります。
    • REGION: Cloud Run サービスのリージョン。サブネットのリージョンと一致する必要があります。
    • NETWORK: VPC ネットワークの名前。
    • SUBNET: サブネットの名前。複数のサービス、ジョブ、ワーカープールを同じサブネットにデプロイまたは実行できます。
    • (省略可)NETWORK_TAG_NAMES: サービスに関連付けるネットワーク タグの名前。サービスの場合、ネットワーク タグはリビジョン レベルで指定されます。サービス リビジョンには、network-tag-2 などの異なるネットワーク タグを設定できます。
    • EGRESS_SETTING: 下り(外向き)設定値
      • all-traffic: すべてのアウトバウンド トラフィックを VPC ネットワーク経由で送信します。
      • private-ranges-only: VPC ネットワーク経由で内部アドレスにのみトラフィックを送信します。
    • IMAGE: サービス コンテナ イメージの URL。

    環境変数やメモリ上限など他の構成を指定することもできます。

  3. 次のコマンドを使用して、サービスを作成または更新します。

    gcloud run services replace service.yaml

Terraform

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

  1. 次のコードを main.tf ファイルに追加します。

    /**
     * Copyright 2024 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    # Example configuration of a Cloud Run service with direct VPC
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "cloudrun-service"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        vpc_access {
          network_interfaces {
            network    = "default"
            subnetwork = "default"
            tags       = ["tag1", "tag2", "tag3"]
          }
        }
      }
    }
    

(省略可能)サービスへの未認証アクセスを許可したい場合は、サービスを一般公開にします

サブネットをシングルスタックからデュアルスタックに変更する

カスタムモードの VPC ネットワークの既存の IPv4 のみのサブネットに IPv6 サブネット範囲を追加するには、サブネットのスタックタイプをデュアルスタックに変更するをご覧ください。次に、デュアルスタック サブネットに Cloud Run サービスをデプロイするか、ジョブを実行するか、ワーカープールをデプロイします。

サブネットをデュアルスタックからシングルスタックに変更する

リソースのデュアルスタック サブネットをシングルスタック サブネットに変更するには、デュアルスタック サブネットを IPv4 のみに変更するをご覧ください。次に、デュアルスタック サブネットに Cloud Run サービスをデプロイするか、ジョブを実行するか、ワーカープールをデプロイします。

ネットワークとサブネットを確認する

リソースが VPC ネットワーク上にあることを確認するには、次のコマンドを実行します。

gcloud run services describe SERVICE_NAME --region=REGION

REGION は、新しいサブネットが作成された Google Cloud リージョンに置き換えます。

次の出力例は、ネットワークとサブネットを示しています。

  VPC Access:
    Network:        example-network
    Subnet:         example-subnet
    Egress:         private-ranges-only