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

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

開始前,請務必熟悉「多個網路介面總覽」一文中所述,具有多個網路介面的執行個體特性。

IAM 角色

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

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

在共用 VPC 環境中建立及刪除含有多個介面的執行個體和執行個體範本:具有「Owner」、「Editor」或「Compute Instance Admin (v1)」角色的使用者可以建立含有多個介面的執行個體。如果任何介面都已連結至共用虛擬私有雲主專案中的子網路,您也必須為整個主專案或您要使用的子網路,設定Compute 網路使用者角色 (roles/compute.networkUser)。

如要進一步瞭解權限,請參閱 Compute Engine 身分與存取權管理說明文件

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

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

系統一律會將第一個介面建立為 nic0,這也一定會是預設介面。

主控台

  1. 前往 Google Cloud 控制台的「Create an instance」頁面。

    前往「Create an instance」

  2. 在「Name」欄位中輸入執行個體的名稱。

  3. 在「Region」欄位中選取區域。

  4. 在「Zone」(可用區) 欄位中,選取可用區。

  5. 在「Advanced options」部分展開「Networking」,然後執行下列操作:

    1. 在「Network interfaces」(網路介面) 專區中,展開網路介面進行編輯。

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

      如果您想在介面上設定 IPv6 位址,請選取已設定 IPv6 位址範圍的子網路。子網路的 IPv6 存取類型會決定執行個體是接收內部 IPv6 位址或外部 IPv6 位址。

    3. 請為介面選取下列其中一個IP 堆疊類型

      • IPv4 (單一堆疊)
      • IPv4 和 IPv6 (雙重堆疊)
      • IPv6 (單一堆疊) (預先發布版)
    4. 針對具有 IPv4 位址的介面,請執行下列操作:

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

        • 臨時 (自動):自動指派新的臨時 IPv4 位址
        • 臨時 (自訂):手動指定新的臨時 IPv4 位址
        • 清單中的已保留靜態內部 IPv4 位址
        • 預留靜態內部 IPv4 位址,以便預留及指派新的靜態內部 IPv4 位址
      2. 在「外部 IPv4 位址」中,選取下列任一選項:

        • 臨時:指派新的臨時 IPv4 位址
        • 「無」:不指派外部 IPv4 位址
        • 清單中的預留靜態 IPv4 位址
        • 預留靜態外部 IP 位址,以便預留及指派新的靜態外部 IPv4 位址
    5. 針對有 IPv6 位址的介面,請根據已連線子網路的存取類型執行下列操作:

      1. 在「主要內部 IPv6 位址」中,選取下列任一選項:
        • 臨時 (自動):自動指派新的臨時內部 IPv6 位址
        • 臨時 (自訂):手動指定新的臨時內部 IPv6 位址
        • 清單中的已保留靜態內部 IPv6 位址
        • 預留靜態內部 IPv6 位址,以便預留及指派新的靜態內部 IPv6 位址
      2. 在「外部 IPv6 位址」中,選取下列任一選項:
        • 自動分配:自動指派新的臨時外部 IPv6 位址
        • 清單中的預約靜態外部 IPv6 位址
        • 預留靜態外部 IPv6 位址,以便預留及指派新的靜態外部 IPv6 位址
    6. 如要完成修改網路介面,請按一下「Done」

  6. 如要新增其他介面,請按一下「新增網路介面」

  7. 繼續執行個體建立程序。

  8. 按一下 [建立]。

gcloud

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

請針對每個介面分別加入 --network-interface 標記,並在後方接上任何適當的網路金鑰,例如 networksubnetprivate-network-ipaddressexternal-ipv6-addressvlan

加入 vlan 鍵可建立動態網路介面卡。如果您建立動態 NIC,則必須在建立執行個體後,按照設定動態 NIC 的訪客作業系統的步驟操作。

如需建立具有多個介面的執行個體的範例,請參閱設定範例

這個程式碼片段只說明 --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_ANETWORK_B:介面連結的網路。
  • SUBNET_ASUBNET_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 位址。您必須先預留外部 IPv6 位址。如未指定,Google Cloud 會自動從子網路指派外部 IPv6 位址。
  • VLAN_ID:VLAN ID。指定 VLAN ID 會將網路介面設定為 Dynamic NIC。您必須在指令中將 Dynamic NIC 放在其上層 vNIC 之後。

API

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

加入 vlan 欄位會建立動態網路介面卡。如果您建立動態 NIC,則必須在建立執行個體後,按照設定動態 NIC 的訪客作業系統的步驟操作。

請參閱以下例子:

  • 如要建立僅具備內部 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_AIPV4_ADDRESS_B:您要指派給每個網路介面的內部 IPv4 位址。
    • REGION:包含執行個體的區域。
    • SUBNET_A, SUBNET_B:每個網路介面所在的子網路。
    • VLAN_ID:VLAN ID。指定 VLAN ID 會將網路介面設定為 Dynamic NIC。您必須在上層 vNIC 要求後放置 Dynamic NIC。
  • 如要建立同時具備內部 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"
        "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 位址。如未指定,Google Cloud 會自動從子網路中指派內部 IPv6 位址。

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 和動態 NIC

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

  • 名為 nic0 的 vNIC,是下列項目的父項:
    • 名為 nic0.2 的動態網路介面卡
  • 名為 nic1 的 vNIC,是下列項目的父項:
    • 名為 nic1.4 的動態網路介面卡
    • 名為 nic1.5 的動態網路介面卡
gcloud beta 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

建立含有動態 NIC 的執行個體後,您也必須為動態 NIC 設定來賓作業系統

設定僅含 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 執行個體 (Preview)。

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

由於專案中每個區域的子網路名稱不得重複,因此依名稱指定子網路會隱含地將每個介面與 VPC 網路建立關聯。每個介面都必須使用位於不重複 VPC 網路中的子網路:

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

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