多個網路介面的總覽與範例

本頁提供虛擬機器 (VM) 執行個體中多個網路介面的總覽,包含這些介面的運作方式與設定範例。如要瞭解如何建立使用多個介面的設定,請參閱建立多個網路介面

總覽

Google Cloud Platform (GCP) 虛擬私人雲端 (VPC) 網路預設為獨立的私人網路網域。網路具有全域範圍並包含地區子網路。只要防火牆規則允許,VPC 網路中的 VM 執行個體可透過內部 IP 位址彼此通訊。不過,除非您設有虛擬私人雲端對等互連VPN 等機制,否則不同網路「之間」並不允許任何內部 IP 位址通訊。

VPC 網路中的每個執行個體都設有預設的網路介面。您可以建立額外的網路介面並連結到您的 VM。多個網路介面可讓您建立執行個體直接連結至多個 VPC 網路的設定。每個介面都必須具有內部 IP 位址,而且每個介面也可能會有外部 IP 位址。視執行個體的類型而定,每個執行個體最多可有 8 個介面。詳情請參閱介面數量上限

一般來說,如果要將執行個體設為網路設備,在網路之間用來執行負載平衡、入侵偵測與防護 (IDS/IPS)、網路應用程式防火牆 (WAF) 或 WAN 最佳化,您可能需要多個介面。如果在執行個體中運作的應用程式需要分隔流量,例如分隔資料層流量與管理層流量,這種情形也適合使用多個網路介面。

使用案例

如果個別執行個體需要存取一個以上的虛擬私人雲端網路,但您不想直接連結兩個網路,這時便可使用多個網路介面。

  • 網路與安全功能:多個網路介面會啟用虛擬網路設備功能,例如負載平衡器、網路位址轉譯 (NAT) 伺服器及搭配多個網路介面進行設定的 Proxy 伺服器。詳情請參閱範例 1:網路與安全虛擬設備

  • 範圍與 DMZ 隔離:層級式網路架構有個重要的最佳做法,那就是將公開服務從內部網路及其服務中隔離。使用多個網路介面建立執行個體上具有個別網路介面的設定,由其中一個介面接受公開流量,而另一個介面處理存取權控管嚴格更多的後端不公開流量。

    能夠透過網際網路連上的任何資源都應該跟您的內部網路及其服務隔開。這樣做可以大幅減少安全性漏洞影響的範圍及帶來的損害。舉例來說,在會連線至應用程式伺服器所在中層網路的每個網路伺服器上,您可以設置第二個網路介面。應用程式伺服器也可同時位於資料庫伺服器所在的後端網路。每個具有雙重位置的執行個體皆可在前端接收及處理要求,並啟動與後端的連線,將要求傳送到後端網路上的伺服器。

    藉由設定個別介面 (公開介面與不公開介面),您可以將不同的防火牆規則與存取權控管個別套用到各個介面,並在公開網域到私人網域的通訊中,強制執行安全性功能。詳情請參閱範例 2:在共用虛擬私人雲端網路中使用第三方設備的情境

  • 個別介面的頻寬隔離:這包含避免控管層與資料層之間發生隊頭問題。您可以使用網路介面隔開管理、控管、儲存及資料層網路。部分應用程式的控管機制 (例如活動訊號) 具有高敏感度。在這類的應用程式中,建議將控管機制與資料路徑介面隔開,確保在流量尖峰或流量阻塞時,也能保有最小頻寬。在這種情況下,請使用專屬虛擬介面將控管流量與其他流量隔開。每個介面都有虛擬佇列。如果某個虛擬私人雲端網路發生頻寬尖峰及受到分散式阻斷服務攻擊,虛擬佇列可避免這些問題影響其他虛擬私人雲端網路。這些個別介面的虛擬佇列也能讓您避免隊頭阻塞的問題,並為各個 I/O 介面提供相同的執行個體 CPU。詳情請參閱範例 3:分隔軟體式服務 (SaaS) 架構中的管理層與資料層介面

設定範例

本節將檢視多個網路介面的一些常見使用範例。

範例 1:網路與安全虛擬設備

網路應用程式防火牆、安全應用程式層級防火牆及 WAN 加速器等網路與安全虛擬設備,通常會搭配多個虛擬介面進行設定。每個介面都設有專屬的私人 IP 位址,也可選擇設定專屬的公開 IP 位址。

下圖顯示的是一般設定。在此特定案例中,您在公開網路到私人網路的路徑上設定了虛擬網路設備。如此一來,流量就只能從公開的外部用戶端,透過應用程式層級的虛擬化防火牆強制執行點,連線至不公開的 VPC 網路。這個應用程式層級的防火牆會在虛擬機器的最上層強制執行。

使用案例 1:佈建並設定具有多個介面的執行個體 (按一下可放大)
使用案例 1:佈建並設定具有多個介面的執行個體 (按一下可放大)

佈建及設定範例 1 的執行個體

以下內容假設 subnet0subnet1subnet2 已存在,且彼此的範圍並不重疊。如要設定範例中的 VM-appliance,請使用下列指令。

gcloud compute instances create vm-appliance \
    --network-interface subnet=subnet0,no-address \
    --network-interface subnet=subnet1 \
    --network-interface subnet=subnet2,no-address \
    --machine-type n1-standard-4

這個指令會建立具有三個網路介面的執行個體:

  • nic0 會連結至 subnet0,沒有公開 IP 位址
  • nic1 會連結至 subnet1,有一個臨時的公開 IP 位址
  • nic2 會連結至 subnet2,沒有公開 IP 位址

範例 2:在共用 VPC 網路中使用第三方設備的情境

如果您需要共用一組集中式第三方設備來處理託管在不同專案中的工作負載或應用程式,則適合使用此設定。下方顯示的範例有四個不同的應用程式,分別為 App1、App2、App3 和 App4,這些應用程式託管在不同的服務專案中。您需要這些應用程式在網際網路輸入流量中受到保護,並且想要在集中位於共用 VPC 託管專案的第三方設備中檢查並篩選輸出流量。

使用案例 2:具有第三方設備的共用 VPC 範例 (按一下可放大)
使用案例 2:具有第三方設備的共用 VPC 範例 (按一下可放大)

佈建及設定範例 2 的 VM 和網路介面

如要建立範例中的 VM 與網路介面,請使用下列指令。

如要建立 VM-appliance:

gcloud compute instances create VM-appliance \
    --network-interface subnet=subnet-dmz,address='reserved-address' \
    --network-interface subnet=subnet-1,no-address \
    --network-interface subnet=subnet-2,no-address \
    --network-interface subnet=subnet-3,no-address \
    --network-interface subnet=subnet-4,no-address \
    --machine-type=n1-standard-4

這會建立具有五個網路介面的執行個體:

  • nic0 會連結至屬於 network-dmz 的 subnet-dmz,具有靜態位址「reserved-address」
  • nic1 會連結至屬於 network-1 的 subnet-1,沒有公開 IP
  • nic2 會連結至屬於 network-2 的 subnet-2,沒有公開 IP
  • nic3 會連結至屬於 network-3 的 subnet-3,沒有公開 IP
  • nic4 會連結至屬於 network-4 的 subnet-4,沒有公開 IP

範例 3:分隔軟體式服務 (SaaS) 架構中的管理層與資料層介面

如果您在 GCP 中執行的服務會提供給其他客戶 (用戶群) 使用,則可以設定分開的管理介面以便管理您的服務。您可以使用與用戶群所用介面無關的管理介面來執行軟體升級、維護程序及疑難排解等作業。

下圖顯示的是託管在雲端中的服務。身為服務生產端,您將提供給各個用戶群的服務隔離在個別的 VPC 網路中。也就是說,您必須針對各個用戶群建立 VPC 網路,並建立特定的執行個體以服務每個客戶。舉例來說,您必須建立執行個體來為用戶群 A 提供服務,並將這些執行個體隔離在網路 A,以便用戶群 A 的內部部署機器能夠存取服務,但其他用戶群無法存取該服務。之後您也必須為用戶群 B 和用戶群 C 建立相同的設定。

不過,您必須能夠存取各個用戶群的 GCP 託管服務,才能執行軟體更新、提供支援以及進行疑難排解。如要完成這項操作,您需要在各個執行個體中新增管理介面,然後建立管理介面與管理網路的關聯,而且這個管理網路必須能夠透過私人連線連結至您的內部部署設備。

使用案例 3:軟體式服務 (SaaS) 範例 (按一下可放大)
使用案例 3:軟體式服務 (SaaS) 範例 (按一下可放大)

用戶群 A 的執行個體有兩個介面:一個介面屬於用戶群 A 的網路,另一個介面屬於生產端 (SaaS 供應商) 的管理網路。同樣地,用戶群 B 的執行個體也有兩個介面:一個介面屬於用戶群 B 的網路,另一個介面屬於生產端 (SaaS 供應商) 的管理網路。

佈建及設定範例 3 的執行個體

如要設定範例中的用戶群執行個體,請使用下列指令範例。

如要建立 VM-A:

gcloud compute instances create vm-a \
    --network-interface subnet=subnet-a,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.2, \
    no-address

這會建立具有兩個網路介面的執行個體:

  • nic0 會連結至屬於 network-a 的 subnet-a
  • nic1 會連結至屬於 network-mgmt 的 subnet-mgmt

如要建立 VM-B:

gcloud compute instances create vm-b\
    --network-interface subnet=subnet-b,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.3, \
    no-address

這會建立具有兩個網路介面的執行個體:

  • nic0 會連結至屬於 network-b 的 subnet-b
  • nic1 會連結至屬於 network-mgmt 的 subnet-mgmt

如要建立 VM-C:

gcloud compute instances create vm-c\
    --network-interface subnet=subnet-c,no-address \
    --network-interface subnet=subnet-mgmt,private-network-ip=198.168.0.4, \
    no-address

這會建立具有兩個網路介面的執行個體:

  • nic0 會連結至屬於 network-c 的 subnet-c
  • nic1 會連結至屬於 network-mgmt 的 subnet-mgmt

其他的作業詳細資料

共用 VPC 環境中的多個網路介面

共用 VPC 可讓您在雲端組織機構的各個專案中共同使用 VPC 網路。

共用 VPC 網路託管在集中式共用 VPC 託管專案中,您可以透過共用 VPC 建立與共用 VPC 網路相關聯的執行個體。如需設定共用 VPC 網路的完整資訊,請參閱佈建共用 VPC

當您建立具有多個網路介面的執行個體時,您的執行個體或執行個體範本可能會有連結至專案所在子網路的特定介面,而且其他介面可能連結至共用 VPC 網路。

如果要建立的執行個體需要有一或多個與共用 VPC 網路相關聯的介面,您在共用 VPC 託管專案中必須具有 compute.networkUser 角色。

多個網路介面的 DNS 解析

使用執行個體主機名稱進行內部 DNS 查詢時,該查詢會解析為執行個體的主要介面 (nic0)。如果執行個體的 nic0 介面所屬的 VPC 網路與發出內部 DNS 查詢的執行個體的 VPC 網路不同,則查詢作業將會失敗。

系統不會為各個介面產生不公開的 Compute Engine DNS 記錄。

多個網路介面的 DHCP 行為

在預設的多個介面設定中,OS 設為使用 DHCP。每個介面的 DHCP 與 ARP 行為會跟具有單一介面的執行個體的 DHCP 與 ARP 相同。

在使用 DHCP 的多個介面執行個體上,每個介面都會取得所在子網路的路徑。此外,執行個體也會取得與主要介面 eth0 相關聯的單一預設路徑。除非您另外手動設定,否則當流量從執行個體傳送到直接連線的子網路以外的任何目的地時,都會透過 eth0 上的預設路徑傳送出去。

在這個範例中,主要介面 eth0 會取得預設路徑 (default via 10.138.0.1 dev eth0),且 eth0eth1 兩個介面都會取得各自子網路的路徑。

instance-1:~$ ip route
default via 10.138.0.1 dev eth0
10.137.0.0/20 via 10.137.0.1 dev eth1
10.137.0.1 dev eth1 scope link
10.138.0.0/20 via 10.138.0.1 dev eth0
10.138.0.1 dev eth0 scope link

詳情請參閱設定政策轉送

多個網路介面的靜態路徑

靜態路徑會個別套用到每個虛擬私人雲端網路,或是虛擬私人雲端網路中符合所設網路標記的特定執行個體。

每個虛擬私人雲端網路皆可擁有一組不同的路徑。當您設定具有多個介面的執行個體時,每個介面會屬於不同的 VPC 網路。因此,與各個介面相關聯的流量會依照介面所屬的 VPC 網路的路徑傳送。

在路徑中使用具有多個網路介面的執行個體標記

如果您選擇使用標記搭配路徑,請注意標記是套用於執行個體層級,因此標記會套用到虛擬機器執行個體的所有介面。如果您不想使用此設定,可以自行設定您的配置,以便只有特定標記會用於指定 VPC 網路中的路徑,並有效確保這些標記僅會套用到與特定 VPC 網路相關聯的介面。

多個網路介面的負載平衡器

如果像是執行個體群組或目標集區等達到負載平衡的後端具有多個網路介面,負載平衡器只會將流量傳送到後端執行個體的預設介面。

這點適用於 GCP 支援的所有負載平衡器類型

多個網路介面的防火牆規則

您可以將防火牆規則設定為僅允許由下列條件組合定義的特定流量:

  • 來源 IP 範圍 (允許的 IP 位址區塊清單) 或來源標記 (一組允許的執行個體)
  • 目的地通訊協定和/或通訊埠。

防火牆規則會個別套用到每個 VPC 網路,或套用到 VPC 網路中符合所設目標標記的特定執行個體。

每個 VPC 網路皆可擁有一組不同的防火牆規則。當您設定具有多個網路介面的執行個體時,每個介面會屬於不同的 VPC 網路。每個介面都會受到各自所屬 VPC 網路套用的防火牆規則限制。

針對具有多個網路介面的執行個體,在防火牆中使用標記

如果您決定使用標記來實作防火牆規則,請記住這些標記會套用於執行個體層級,並且套用至執行個體的所有介面。如果您不想使用此設定,可以自行設定您的配置,以便只有特定標記會用於指定 VPC 網路中的路徑和防火牆規則,並確保這些標記僅會套用到與特定 VPC 網路相關聯的介面。

舉例來說,如果您在標記中使用 VPC 網路的名稱,使用者就可清楚標示這些標記套用到哪些 VPC 網路以及哪些介面。

選擇以標記名稱標示特定 VPC 網路後,只能使用該特定 VPC 網路所用防火牆規則的標記。

舉例來說,請設想下列情境:您有兩個 VPC 網路,分別是 network1network2。執行個體 vm-1 透過兩個不同的介面同時連結至兩個 VPC 網路:nic0network1 相關聯,nic1network2 相關聯。

下圖顯示這項設定。

在防火牆中使用標記 (按一下可放大)
在防火牆中使用標記 (按一下可放大)

在這個情境中,請套用下列防火牆規則:

  1. network1 中的所有執行個體僅接受來自 VM1 的 SSH 連線。
  2. network2 中的所有執行個體僅接受來自 VM1 的 HTTP/HTTPS 連線。

如要設定這些規則:

  1. network1 中的所有執行個體僅接受來自 VM1 的 SSH 連線。

    1. 在 VM1 中套用僅會用於 Network1 的標記。在本範例中,此標記為 vm1-network1-foo

      gcloud compute instances add-tags vm1 \
          --tags vm1-network1-foo
      
    2. 使用 vm1-network1-foo 標記做為來源標記來設定 network1 的防火牆規則以允許 SSH (TCP,連接埠 22):

      gcloud compute firewall-rules create allow-ssh-from-vm1 \
          --allow tcp:22 \
          --network network1 \
          --source-tags vm1-network1-foo
      
  2. network2 中的所有執行個體僅接受來自 VM1 的 HTTP/HTTPS 連線。

    1. 在 VM1 中套用僅會用於 Network2 的標記。在本範例中,此標記為 vm1-network2-foo

      gcloud compute instances add-tags vm1 \
          --tags vm1-network2-foo
      
    2. 使用 vm1-network2-foo 標記做為來源標記來設定 Network2 的防火牆規則以允許 HTTP 與 HTTPS (TCP,通訊埠 80、443):

      gcloud compute firewall-rules create allow-http-https-from-vm1 \
          --allow tcp:80,443 \
          --network network2\
          --source-tags vm1-network2-foo
      
防火牆規則 (按一下可放大)
防火牆規則 (按一下可放大)

後續步驟

參閱建立具有多個網路介面的執行個體一文。