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

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

事前準備

開始之前,請先熟悉多個網路介面總覽中說明的多個網路介面執行個體特性。

IAM 角色

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

在未使用共用 VPC 環境的專案中,建立及刪除具有多個介面的執行個體和執行個體範本:如果使用者具有「擁有者」、「編輯者」或「Compute Instance Admin (v1)」角色,即可建立執行個體,並將多個介面與屬於同一專案的 VPC 網路和子網路建立關聯。

在共用 VPC 環境中建立及刪除具有多個介面的執行個體和執行個體範本: 擁有者、編輯者或 Compute Instance Admin (v1) 角色的使用者可以建立具有多個介面的執行個體。如有任何介面附加至共用虛擬私人雲端主專案中的子網路,您也必須擁有整個主專案或所需子網路的運算網路使用者角色 (roles/compute.networkUser)。

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

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

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

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

控制台

  1. 前往 Google Cloud 控制台的「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 堆疊類型選項:

      • IPv4 (單一堆疊)
      • IPv4 和 IPv6 (雙重堆疊)
      • IPv6 (單一堆疊)
    3. 如果是具有 IPv4 位址的介面,請執行下列操作:

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

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

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

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

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

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

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

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

    1. 如要新增 vNIC,請按一下「新增網路介面」,然後輸入 vNIC 的詳細資料,完成表單。

    2. 如要新增 Dynamic NIC,請按一下「新增 Dynamic Network Interface」,然後執行下列操作:

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

  7. 點選「建立」

gcloud

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

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

加入 vlan 鍵會建立動態 NIC。 如果您建立動態 NIC,也必須在建立執行個體後,按照設定動態 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_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 位址範圍。如未指定,Google Cloud 會自動從子網路指派外部 IPv6 位址範圍。
  • VLAN_ID:VLAN ID。指定 VLAN ID 會將網路介面設定為 Dynamic NIC。您必須在指令中,將 Dynamic NIC 放在上層 vNIC 後面。

API

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

包含 vlan 欄位會建立動態 NIC。 如果您建立動態 NIC,也必須在建立執行個體後,按照設定動態 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_AIPV4_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 和動態 NIC

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

  • 名為 nic0 的 vNIC,是下列項目的父項:
    • 名為 nic0.2 的動態 NIC
  • 名為 nic1 的 vNIC,是下列項目的父項:
    • 名為 nic1.4 的動態 NIC
    • 名為 nic1.5 的動態 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

建立具有動態 NIC 的執行個體後,您也必須為動態 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

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

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

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

後續步驟