複数のネットワーク インターフェースを持つ VM を作成する

デフォルトでは、Virtual Private Cloud(VPC)ネットワーク内の各仮想マシン(VM)インスタンスには 1 つのネットワーク インターフェースがあります。ただし、複数のネットワーク インターフェースを持つインスタンスを構成することもできます。1 つのインスタンスで複数のネットワーク インターフェースを使用する場合、各インターフェースは異なる VPC ネットワークのサブネットに接続する必要があります。複数のネットワーク インターフェースを同じサブネットや同じ VPC ネットワーク内のサブネットに接続することはできません。

複数のネットワーク インターフェースが不要な場合は、インスタンスの作成と起動の手順に沿って、デフォルトのネットワーク構成でインスタンスを作成してください。

複数のネットワーク インターフェースとその仕組みの詳細については、複数のネットワーク インターフェースをご覧ください。

始める前に

IAM ロール

複数のネットワーク インターフェースを持つインスタンスを作成するには、次のいずれかのロールが必要です。

共有 VPC 環境を使用しないプロジェクトでの複数のインターフェースを持つインスタンスおよびインスタンス テンプレートの作成と削除: プロジェクト レベルでオーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、その同じプロジェクトの一部である VPC ネットワークとサブネットに関連付けられている複数のインターフェースを持つインスタンスを作成できます。

共有 VPC 環境での複数のネットワーク インターフェースを持つインスタンスおよびインスタンス テンプレートの作成と削除: プロジェクト レベルでオーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、複数のインターフェースを持つインスタンスを作成できます。いずれかのインターフェースが共有 VPC ホスト プロジェクトのサブネットに接続されている場合は、共有 VPC ホスト プロジェクト レベルまたは共有 VPC サブネット レベルで Compute ネットワーク ユーザーのロールroles/compute.networkUser)も必要になります。

権限の詳細については、Compute Engine IAM ドキュメントをご覧ください。

複数のネットワーク インターフェースを持つ VM インスタンスを作成する

インスタンスの作成に関する一般的な手順については、VM インスタンスを作成して起動するをご覧ください。

最初のインターフェースは、常に nic0 として作成されます。また、これが常にデフォルトのインターフェースになります。これは、 Google Cloudネットワーキングの他の側面で重要となります。たとえば、 Google Cloud ロードバランサ(パススルー ネットワーク ロードバランサを除く)は、nic0 にのみトラフィックを分散します。

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. [名前] フィールドに、インスタンスの名前を入力します。

  3. [リージョン] フィールドでリージョンを選択します。

  4. [ゾーン] フィールドでゾーンを選択します。

  5. [詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。

    1. [ネットワーク インターフェース] セクションで、ネットワーク インターフェースを開いて編集します。

    2. [ネットワーク] と [サブネットワーク] で、使用するネットワークとサブネットワークを選択します。

      インターフェースに IPv6 アドレスを構成する場合は、IPv6 アドレス範囲が構成されているサブネットを選択します。サブネットの IPv6 アクセスタイプによって、VM が内部 IPv6 アドレスを受信するのか、外部 IPv6 アドレスを受信するのかが決まります。

    3. インターフェースの IP スタックタイプに次のいずれかのオプションを選択します。

      • IPv4(シングルスタック)
      • IPv4 と IPv6(デュアルスタック)
      • IPv6(シングルスタック)プレビュー
    4. IPv4 アドレスのインターフェースの場合は、次の操作を行います。

      1. [プライマリ内部 IPv4 アドレス] で次のいずれかを選択します。

        • エフェメラル: 新しいエフェメラル IPv4 アドレスを割り振ります。
        • リストから予約された静的内部 IPv4 アドレス。
        • 静的内部 IPv4 アドレスを予約: 新しい静的内部 IPv4 アドレスを予約して割り当てます。
      2. [外部 IPv4 アドレス] で、次のいずれかを選択します。

        • エフェメラル: 新しいエフェメラル IPv4 アドレスを割り当てます。
        • なし: 外部 IPv4 アドレスを割り振りません。
        • リストから予約された静的 IPv4 アドレス。
        • 静的外部 IP アドレスを予約: 新しい静的外部 IPv4 アドレスを予約して割り当てます。
    5. IPv6 アドレスのインターフェースの場合は、接続されたサブネットのアクセスタイプに応じて、次の操作を行います。

      1. [プライマリ内部 IPv6 アドレス] で次のいずれかを選択します。
        • 自動割り当て: 新しいエフェメラル内部 IPv6 アドレスを自動的に割り当てます。
        • リストから予約された静的内部 IPv6 アドレス。
        • 静的内部 IPv6 アドレスを予約: 新しい静的内部 IPv6 アドレスを予約して割り当てます。
      2. [外部 IPv6 アドレス] で、次のいずれかを選択します。
        • 自動割り当て: 新しいエフェメラル外部 IPv6 アドレスを自動的に割り当てます。
        • リストから予約された静的外部 IPv6 アドレス。
        • 静的外部 IPv6 アドレスを予約: 新しい静的外部 IPv6 アドレスを予約して割り当てます。
    6. ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。

  6. 別のインターフェースを追加するには、[ネットワーク インターフェースを追加] をクリックします。

  7. VM 作成プロセスを続行します。

  8. [作成] をクリックします。

gcloud

新しいインスタンスにネットワーク インターフェースを作成するには、instances create コマンドを使用します。

インターフェースごとに --network-interface フラグを指定し、さらに networksubnetprivate-network-ipaddressexternal-ipv6-address などの適切なネットワーキング キーを指定します。複数のインターフェースを持つ VM の作成方法の例については、構成例をご覧ください。

このスニペットは、インスタンス作成時に指定できる多くのパラメータの 1 つである --network-interface フラグについて示すことのみを目的としたものです。

必要なネットワーク インターフェースの数をサポートしているマシンタイプを確認するには、ネットワーク インターフェースの最大数の表をご覧ください。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        private-network-ip=INTERNAL_IPV4_ADDRESS \
        address=EXTERNAL_IPV4_ADDRESS | no-address, \
        internal-ipv6-address=INTERNAL_IPV6_ADDRESS \
    ...
    --network-interface \
        network=NETWORK,subnet=SUBNET, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96 \
        ipv6-network-tier=PREMIUM \
    ...

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

  • INSTANCE_NAME: 作成する VM インスタンスの名前。
  • ZONE: インスタンスが作成されるゾーン。
  • NETWORK: インターフェースが接続するネットワーク。
  • SUBNET: インターフェースが接続するサブネット。
  • STACK_TYPE: インターフェースのスタックタイプ。

    デフォルト値は IPV4_ONLY です。デュアルスタック インターフェースを構成するには IPV4_IPV6 を指定します。IPv6 専用インターフェースを構成するには IPV6_ONLY を指定します(プレビュー版)。

  • IPv4 アドレスを持つインターフェースの値:

    • INTERNAL_IPV4_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv4 アドレス。割り当て済みの有効なアドレスのみを使用する場合は、省略します。
    • EXTERNAL_IPV4_ADDRESS: インターフェースの外部 IPv4 アドレス。

      外部 IPv4 アドレスは予約済みである必要があります。インターフェースに外部 IP アドレスを使用しない場合は、address=EXTERNAL_IPV4_ADDRESS の代わりに「no-address」を指定します。インターフェースでエフェメラル外部 IP アドレスを受信する場合は、address='' を指定します。

  • IPv6 アドレスのインターフェースの値:

    • INTERNAL_IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。
    • EXTERNAL_IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な外部 IPv6 アドレス。外部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから外部 IPv6 アドレスを自動的に割り当てます。

API

instances.insert メソッドを使用して、複数のネットワーク インターフェースを持つ VM インスタンスを作成します。

  • 内部 IPv4 アドレスのみを持つ VM インスタンスを作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "networkIP": "IPV4_ADDRESS",
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスを含むゾーン。
    • IPV4_ADDRESS: ネットワーク インターフェースに割り当てる内部 IPv4 アドレス。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
  • 内部 IPv4 アドレスと内部 IPv6 アドレスの両方を持つ VM インスタンスを作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV4_IPV6,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスを含むゾーン。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
    • IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。
  • 内部 IPv6 アドレスのみを持つ VM インスタンス(プレビュー)を作成するには、次の操作を行います。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    ....
    
    "networkInterfaces": [
      {
        "subnetwork": "regions/REGION/subnetworks/SUBNET"
        "ipv6Address": "IPV6_ADDRESS",
        "internalIpv6PrefixLength": 96,
        "stackType": IPV6_ONLY,
        "ipv6AccessType": INTERNAL
      },
        for each interface, specify a network...
    ],
    other instance settings...
    }
    

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

    • PROJECT_ID: インスタンスが含まれているプロジェクトの ID。
    • ZONE: インスタンスを含むゾーン。
    • REGION: インスタンスが含まれるリージョン。
    • SUBNET: ネットワーク インターフェースが配置されているサブネット。
    • IPV6_ADDRESS: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。内部 IPv6 アドレスは予約済みである必要があります。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。

Terraform

Terraform リソースを使用すると、複数のネットワーク インターフェースを持つ VM インスタンスを作成できます。

Terraform 引数の例の値は変更できます。

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace with your project ID in quotes
  zone         = "us-central1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = var.subnet_1 # Replace with self link to a subnetwork in quotes
    network_ip = "10.0.0.14"
  }
  network_interface {
    subnetwork = var.subnet_2 # Replace with self link to a subnetwork in quotes
    network_ip = "10.10.20.14"
  }
}

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

構成例

以降のセクションでは、複数のインターフェースを持つ VM を作成する方法について説明します。

IPv4 アドレスのみを持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、3 つのネットワーク インターフェースを持つインスタンスを作成します。

 gcloud compute instances create vm1 --machine-type=n1-standard-4 \
    --network-interface '' \
    --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \
    --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address

インターフェースは次のように作成されます。

  • nic0 はデフォルト設定で作成されます。インターフェースは、デフォルトの VPC ネットワークのサブネットに接続し、内部 IP アドレスとエフェメラル外部 IP アドレスが自動的に割り振られます。

  • nic1 は、ネットワーク net1 のサブネット subnet-a に接続されます。内部 IPv4 アドレスは 10.10.10.2 であり、静的外部 IPv4 アドレスは EXTERNAL_IPV4_ADDRESS です。

  • nic2 は、ネットワーク net2 のサブネット subnet-b に接続されます。内部 IPv4 アドレスは 10.10.20.2 であり、外部 IP アドレスはありません。

gcloud compute instances create コマンドと --network-interface フラグの詳細については、コマンドのドキュメントをご覧ください。

追加したネットワーク インターフェースの IP アドレスを使用して、DNS 転送を設定できます。Cloud DNS 転送ゾーンの構成の詳細については、転送ゾーンをご覧ください。

IPv4 アドレスと IPv6 アドレスの両方を持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、2 つのネットワーク インターフェースを持つデュアル スタック インスタンスを作成します。

gcloud compute instances create vm1 \
    --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \
    --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=ZONE_A

インターフェースは次のように作成されます。

  • nic0 は、ネットワーク dual-int のサブネット int-subnet に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル内部 IPv6 アドレスが割り振られます。

  • nic1 は、ネットワーク dual-ext のサブネット ext-subnet に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル外部 IPv6 アドレスが割り振られます。

IPv6 アドレスのみを持つ複数のネットワーク インターフェースを構成する

次のサンプル コマンドは、2 つのネットワーク インターフェースを持つ IPv6 専用インスタンス(プレビュー)を作成します。

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int,subnet=int-subnet,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM \
    --machine-type=n1-standard-4 --zone=us-west2-a

インターフェースは次のように作成されます。

  • nic0 は、ネットワーク ipv6-only-int のサブネット int-subnet に接続され、エフェメラル内部 IPv6 アドレスが割り振られます。

  • nic1 は、ネットワーク ipv6-only-ext のサブネット ext-subnet に接続され、エフェメラル外部 IPv6 アドレスが割り振られます。

インスタンス グループに複数のネットワーク インターフェースを構成する

非マネージド インスタンス グループとマネージド インスタンス グループでは、複数のネットワーク インターフェースを持つインスタンスを使用できます。

非マネージド インスタンス グループの場合は、各インスタンスを個別に作成します。各 VM の nic0 ネットワーク インターフェースが同じサブネットに接続するようにします。次に、非マネージド インスタンス グループに VM インスタンスを追加します。

マネージド インスタンス グループに複数のネットワーク インターフェースを構成するには、各インターフェースに --network-interface フラグを 1 回設定して、インスタンス テンプレートでインターフェースごとにネットワーク構成を指定する必要があります。次の例では、3 つのネットワーク インターフェースを持つインスタンス テンプレートを作成します。

gcloud compute instance-templates create template-1 \
    --network-interface subnet=net0-subnet-a \
    --network-interface subnet=net1-subnet-b,no-address \
    --network-interface subnet=net2-subnet-c,no-address \
    --region REGION_A

プロジェクトの各リージョンのサブネット名は一意である必要があるため、名前でサブネットを指定すると、各インターフェースが暗黙的に VPC ネットワークに関連付けられます。各インターフェースでは、一意の VPC ネットワーク内のサブネットを使用する必要があります。

  • nic0net0-subnet-a サブネットを使用します。
  • nic1net1-subnet-b サブネットを使用します。
  • nic2net2-subnet-c サブネットを使用します。

--network-interface フラグの no-address オプションは、外部 IPv4 アドレスなしでインターフェースが構成されていることを示します。内部 IP アドレスは、インターフェースで使用されるサブネットから取得されます。フラグと構文の詳細については、instance-templates create コマンドの --network-interface フラグをご覧ください。