建立具備多個網路介面的 VM

本頁面說明如何建立具備多個網路介面的 VM 執行個體。

事前準備

開始之前,請務必熟悉具有多個網路介面的執行個體特性,詳情請參閱「多個網路介面總覽」。

IAM 角色

如要建立內含多個網路介面的執行個體,您必須具備以下其中一種角色:

在不使用 Shared VPC 環境的專案中,建立及刪除具有多個介面的執行個體和執行個體範本:具備「擁有者」、「編輯者」或「Compute 執行個體管理員 (v1)」角色的使用者,可以建立具有多個介面的執行個體,並與同一專案中的虛擬私有雲網路和子網路建立關聯。

在 Shared VPC 環境中建立及刪除具有多個介面的執行個體和執行個體範本:具備「擁有者」、「編輯者」或「Compute 執行個體管理員 (v1)」角色的使用者,可以建立具有多個介面的執行個體。如果任何介面連結至 Shared VPC 主專案中的子網路,您也必須具備整個主專案或所需子網路的 Compute 網路使用者角色 (roles/compute.networkUser)。

如要進一步瞭解權限,請參閱 Compute Engine IAM 說明文件。

建立具備多個網路介面的 VM 執行個體

本節說明如何建立具有多個網路介面的執行個體,包括 vNIC 和 Dynamic NIC。如需建立執行個體的一般操作說明,請參閱「建立並啟動 VM 執行個體」。

第一個介面一律會建立為 nic0,且一律為預設介面。

控制台

  1. 前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。

    前往「Create an instance」(建立執行個體)

  2. 在「機器設定」窗格中,執行下列操作:

    1. 在「Name」(名稱) 欄位中,輸入執行個體的名稱。
    2. 在「Region」(區域) 欄位中選取區域。
    3. 在「Zone」(可用區) 欄位中,選取可用區。
  3. 在導覽選單中,按一下「Networking」(網路),即可查看「Networking」(網路) 窗格。

  4. 在「Network interfaces」(網路介面) 部分,展開要編輯的網路介面。

    1. 在「Network」(網路) 和「Subnetwork」(子網路) 部分,選取要使用的網路和子網路。

      如要設定介面的 IPv6 位址,請選取已設定 /64 IPv6 位址範圍的子網路。子網路的 IPv6 存取權類型會決定執行個體接收內部 /96 IPv6 位址範圍,還是外部 /96 IPv6 位址範圍。

    2. 為介面的「IP stack type」(IP 堆疊類型) 選取下列其中一個選項:

      • IPv4 (單一堆疊)
      • IPv4 和 IPv6 (雙重堆疊)
      • IPv6 (單一堆疊)
    3. 如果介面使用 IPv4 位址,請按照下列步驟操作:

      1. 在「主要內部 IPv4 位址」部分,選取下列其中一個選項:

        • 「Ephemeral (Automatic)」(臨時 (自動)):自動指派新的臨時 IPv4 位址
        • 「Ephemeral (Custom)」(臨時 (自訂)):手動指定新的臨時 IPv4 位址
        • 清單中預留的靜態內部 IPv4 位址
        • 「Reserve static internal IPv4 address」(預留靜態內部 IPv4 位址):預留及指派新的靜態內部 IPv4 位址
      2. 在「外部 IPv4 位址」部分,選取下列其中一項:

        • 「Ephemeral」(臨時),指派新的臨時 IPv4 位址
        • 無:不指派外部 IPv4 位址
        • 清單中的預留靜態 IPv4 位址
        • 保留靜態外部 IP 位址:保留並指派新的靜態外部 IPv4 位址
      3. 您可以視需要為網路介面指派一或多個別名 IP 範圍。如要指派別名 IP 範圍,請按照下列步驟操作:

        1. 在「Alias IP ranges」(別名 IP 範圍) 中,按一下 「Add IP range」(新增 IP 範圍)。
        2. 在「Subnet range」(子網路範圍),選取要使用的子網路主要 IPv4 位址範圍,或子網路次要 IPv4 位址範圍。
        3. 在「Alias IP range」(別名 IP 範圍) 中,以 CIDR 標記法輸入 IP 範圍。這個範圍必須是所選子網路 IP 範圍中未使用的範圍。

        如要進一步瞭解如何將別名 IP 範圍指派給 VM 網路介面,請參閱「設定別名 IP 範圍」。

    4. 如果介面具有 IPv6 位址,請根據所連子網路的存取權類型,執行下列操作:

      1. 在「主要內部 IPv6 位址」部分,選取下列其中一個選項:
        • 「Ephemeral (Automatic)」(臨時 (自動)):自動指派新的臨時內部 IPv6 位址範圍
        • 「Ephemeral (Custom)」(臨時 (自訂)):手動指定新的臨時內部 IPv6 位址範圍
        • 從清單中選取預留的靜態內部 IPv6 位址範圍
        • 預留靜態內部 IPv6 位址:預留及指派新的靜態內部 IPv6 位址範圍
      2. 在「External IPv6 address」(外部 IPv6 位址) 部分,選取下列其中一項:
        • Ephemeral (Automatic) (臨時 (自動)):自動指派新的臨時外部 IPv6 位址範圍
        • 臨時 (自訂):手動指定新的臨時外部 IPv6 位址範圍
        • 從清單中選取預留的靜態外部 IPv6 位址範圍
        • 預留靜態外部 IPv6 位址:預留及指派新的靜態外部 IPv6 位址範圍
    5. 如要完成修改網路介面,請按一下「Done」(完成)。

  5. 如要新增其他網路介面,請按照下列步驟操作:

    1. 如要新增 vNIC,請按一下「Add a network interface」(新增網路介面),然後填寫表單,輸入 vNIC 的詳細資料。

    2. 如要新增 Dynamic NIC,請按一下「Add a Dynamic Network Interface」(新增動態網路介面),然後執行下列操作:

      1. 在「Parent network interface」(上層網路介面) 欄位中,選取要建立 Dynamic NIC 的上層 vNIC。
      2. 在「VLAN ID」欄位中,輸入 Dynamic NIC 的 VLAN ID。
      3. 輸入動態 NIC 的其餘詳細資料,完成表單。
  6. 繼續執行個體建立程序。

  7. 點選「建立」。

gcloud

如要在新執行個體上建立網路介面,請使用 gcloud compute instances create 指令。

請為每個介面加入 --network-interface 旗標,後面加上任何適當的網路金鑰,例如 network、subnet、private-network-ip、address、external-ipv6-address 和 vlan。

加入 vlan 鍵會建立 Dynamic NIC。如果您建立 Dynamic NIC,則在建立執行個體後,也必須按照為 Dynamic NIC 設定訪客 OS 的步驟操作。

如要查看如何建立具有多個介面的執行個體,請參閱設定範例。

這個程式碼片段僅說明 --network-interface 旗標,這是建立執行個體時可指定的眾多參數之一。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --network-interface \
        network=NETWORK_A,subnet=SUBNET_A, \
        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_B,subnet=SUBNET_B, \
        stack-type=STACK_TYPE, \
        external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \
        external-ipv6-prefix-length=96, \
        ipv6-network-tier=PREMIUM, \
        vlan=VLAN_ID \
    ...

更改下列內容:

  • INSTANCE_NAME:要建立的執行個體名稱。
  • ZONE:建立執行個體的可用區。
  • NETWORK_A、NETWORK_B:介面連結的網路。
  • SUBNET_A、SUBNET_B:介面附加的子網路。
  • STACK_TYPE:介面的堆疊類型。

    預設值為 IPV4_ONLY。指定 IPV4_IPV6 即可設定雙重堆疊介面,指定 IPV6_ONLY 則可設定僅限 IPv6 的介面。

  • 具有 IPv4 位址的介面值:

    • INTERNAL_IPV4_ADDRESS:您希望介面在目標子網路中擁有的內部 IPv4 位址。如果只要指派任何有效位址,請省略這個欄位。
    • EXTERNAL_IPV4_ADDRESS:介面的外部 IPv4 位址。

      您必須預先保留外部 IPv4 位址。如果不想讓介面有外部 IP 位址,請指定「no-address」,而非 address=EXTERNAL_IPV4_ADDRESS。如要讓介面接收暫時外部 IP 位址,請指定 address=''。

  • 具有 IPv6 位址的介面值:

    • INTERNAL_IPV6_ADDRESS:您希望介面在目標子網路中擁有的內部 IPv6 位址範圍。如未指定,Google Cloud 會自動從子網路指派內部 IPv6 位址範圍。
    • EXTERNAL_IPV6_ADDRESS:您希望介面在目標子網路中擁有的外部 IPv6 位址範圍。如未指定,Google Cloud 會自動從子網路指派外部 IPv6 位址範圍。
  • VLAN_ID:VLAN ID。指定 VLAN ID 後,網路介面會設為 Dynamic NIC。在指令中,Dynamic NIC 必須放在上層 vNIC 之後。

API

使用 instances.insert 方法建立具有多個網路介面的執行個體。

加入 vlan 欄位會建立 Dynamic NIC。如果您建立 Dynamic NIC,則在建立執行個體後,也必須按照為 Dynamic NIC 設定訪客 OS 的步驟操作。

請參閱以下例子:

  • 如要建立只有內部 IPv4 位址的執行個體,請按照下列步驟操作:

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

    更改下列內容:

    • PROJECT_ID:執行個體所在專案的 ID。
    • ZONE:執行個體所在的可用區。
    • IPV4_ADDRESS_A、IPV4_ADDRESS_B:要指派給各個網路介面的內部 IPv4 位址。
    • REGION:執行個體所在的區域。
    • SUBNET_A, SUBNET_B:各網路介面所在的子網路。
    • VLAN_ID:VLAN ID。指定 VLAN ID 後,網路介面會設為 Dynamic NIC。在要求中,Dynamic NIC 必須放在上層 vNIC 之後。
  • 如要建立同時具有內部 IPv4 和內部 IPv6 位址的執行個體,請按照下列步驟操作:

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

    更改下列內容:

    • PROJECT_ID:執行個體所在專案的 ID。
    • ZONE:執行個體所在的可用區。
    • REGION:執行個體所在的區域。
    • SUBNET_A, SUBNET_B:每個網路介面所在的子網路。
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B:您希望介面在目標子網路中擁有的內部 IPv6 位址範圍。如未指定,Google Cloud 會自動從子網路指派內部 IPv6 位址範圍。
    • VLAN_ID:VLAN ID。指定 VLAN ID 後,網路介面會設為 Dynamic NIC。Dynamic NIC 必須放在上層 vNIC 後方。
  • 如要建立只有內部 IPv6 位址的執行個體,請按照下列步驟操作:

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

    更改下列內容:

    • PROJECT_ID:執行個體所在專案的 ID。
    • ZONE:執行個體所在的可用區。
    • REGION:執行個體所在的區域。
    • SUBNET_A, SUBNET_B:每個網路介面所在的子網路。
    • IPV6_ADDRESS_A, IPV6_ADDRESS_B:您希望介面在目標子網路中擁有的內部 IPv6 位址範圍。如未指定,Google Cloud 會自動從子網路指派內部 IPv6 位址範圍。
    • VLAN_ID:VLAN ID。指定 VLAN ID 後,網路介面會設為 Dynamic NIC。Dynamic NIC 必須放在上層 vNIC 後方。

Terraform

您可以使用 Terraform 資源,建立具有多個網路介面的執行個體。

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 指令」。

設定範例

下列各節說明如何建立具有多個介面的執行個體。

設定多個 vNIC 和 Dynamic NIC

下列範例指令會建立具有下列網路介面的執行個體:

  • 名為 nic0 的 vNIC,是下列項目的父項:
    • 名為 nic0.2 的 Dynamic NIC
  • 名為 nic1 的 vNIC,是下列項目的父項:
    • 名為 nic1.4 的 Dynamic NIC
    • 名為 nic1.5 的 Dynamic NIC
gcloud compute instances create vm1 \
    --zone zone-a \
    --network-interface=network=network-a,subnet=subnet-a \
    --network-interface=network=network-b,subnet=subnet-b,vlan=2 \
    --network-interface=network=network-c,subnet=subnet-c \
    --network-interface=network=network-d,subnet=subnet-d,vlan=4 \
    --network-interface=network=network-e,subnet=subnet-e,vlan=5

建立具有 Dynamic NIC 的執行個體後,您也必須為 Dynamic NIC 設定訪客 OS。

設定多個網路介面,僅使用 IPv4 位址

下列範例指令會建立具有三個網路介面的執行個體。

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 是以預設設定建立。這個介面會連結至預設虛擬私有雲網路中的子網路,並具有自動分配的內部 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 位址

下列範例指令會建立具有兩個網路介面的雙堆疊執行個體。

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 位址的網路介面

下列範例指令會建立具有三個網路介面的僅限 IPv6 執行個體。

gcloud compute instances create vm1 \
    --network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \
    --network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \
    --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \
    --machine-type=n1-standard-4 --zone=us-west2-a

介面的建立情況如下:

  • nic0 已連結至網路 ipv6-only-int-a 中的子網路 int-subnet-a,並具有自動分配的臨時內部 IPv6 位址。

  • nic1 已連結至網路 ipv6-only-int-b 中的子網路 int-subnet-b,並具有自訂臨時內部 IPv6 位址範圍 fd20:db8:0:0:1:0::/96。

  • nic2 附加至網路 ipv6-only-ext 中的子網路 ext-subnet,並具有靜態外部 IPv6 位址範圍 EXTERNAL_IPV6_ADDRESS。

為執行個體群組設定多個網路介面

您可以在非代管執行個體群組和代管執行個體群組中,使用具有多個網路介面的執行個體。

如果是非代管執行個體群組,請個別建立每個執行個體,確保每個執行個體的 nic0 網路介面都連結至同一個子網路。接著,將執行個體新增至非代管執行個體群組。

如要為代管執行個體群組設定多個網路介面,您必須在執行個體範本中指定每個介面的網路設定,方法是為每個介面設定一次 --network-interface 旗標。下列範例會建立具有三個網路介面的執行個體範本:

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

專案中每個區域的子網路名稱都不得重複,因此依名稱指定子網路,會隱含將每個介面與虛擬私有雲網路建立關聯。在本範例中,每個介面都使用專屬虛擬私有雲網路中的子網路:

  • nic0 使用 net0-subnet-a 子網路
  • nic1 使用 net1-subnet-b 子網路
  • nic2 使用 net2-subnet-c 子網路

--network-interface 旗標中的 no-address 選項表示介面未設定外部 IPv4 位址。內部 IP 位址來自介面使用的子網路。如需旗標和語法的完整資訊,請參閱 instance-templates create 指令的 --network-interface 旗標。

後續步驟