排解具有多個網路介面的 VM 問題

本頁面提供疑難排解步驟,協助您解決在建立及使用具有多個網路介面的 VM 時可能遇到的常見問題。

無法建立具有多個介面的 VM

您可能會看見以下其中一則錯誤訊息:

  • Invalid value for field 'resource': ''. Too many network interfaces. The maximum number of network interfaces allowed for this machine type is.

    如果您看到這則錯誤訊息,表示您嘗試建立的介面數量超過執行個體機器類型支援的介面數量上限。請參閱介面數量上限表格。

  • Networks must be distinct for NICs attached to a VM.

    如果您看到這則訊息,表示您正嘗試在同一網路中建立多個介面。每個網路介面皆須連接至不同的虛擬私人雲端網路。

  • Subnetwork CIDR ranges must be non-overlapping for NICs attached to a VM.

    如果您看到這則訊息,表示與 VM 介面建立關聯的 CIDR 範圍有所重疊。這些 CIDR 範圍包括與 VM 介面建立關聯的所有主要子網路範圍,以及用於別名 IP 範圍的次要範圍。每個介面都會連接至一個子網路,且每個子網路都位於不同的 VPC 網路,且不得與其他介面的子網路重疊。舉例來說,如果您正嘗試在 REGION_A 地區建立執行個體,則可利用以下指令或 Google Cloud 主控台檢查子網路的主要 CIDR 範圍。

    gcloud compute networks subnets list --regions REGION_A
    NAME                REGION      NETWORK          RANGE
    default             REGION_A  default          10.138.0.0/20
    overlapping-subnet  REGION_A  test-network     10.138.8.0/24
    

    如要檢查次要子網路的 CIDR 範圍,請使用下列指令或 Google Cloud 控制台

    gcloud compute networks subnets describe overlapping-subnet --region REGION_A
    
    ...
    ipCidrRange: 10.128.8.0/24
    ...
    secondaryIpRanges:
    - ipCidrRange: 10.138.8.0/24
      rangeName: conflicting-range
    
  • Multiple network interfaces are not supported on legacy networks.

    如果您看到這則訊息,表示您正嘗試在舊版網路中建立執行個體。舊版網路不支援內含多個介面的執行個體。您可以使用下列任一方法,檢查網路是否為舊版網路:

    • 在 Google Cloud 控制台中,前往「VPC Networks」頁面,然後查看「Mode」欄。
    • 執行 gcloud compute networks list 指令,然後查看 SUBNET_MODE 欄位。
  • Required 'compute.instances.create' permission for 'projects/PROJECT_ID/zones/ZONE/instances/test-inst'

    如果您收到這則訊息,表示您登入的帳戶沒有建立執行個體所需的 IAM 權限。如要進一步瞭解建立執行個體所需的角色,請參閱「權限、身分與存取權管理 (IAM) 以及內含多個網路介面的執行個體」。您可以查看與專案相關聯的 IAM 政策是否授予您下列任何角色:OWNEREDITORcompute.instanceAdmin.v1。如要在共用虛擬私有雲中建立執行個體,您還需要 compute.networkUser 角色。在下列範例中,email2@gmail.com 帳戶的 IAM 權限不足,無法建立執行個體。如需詳細的操作說明,請參閱身分與存取權管理指南中的授予、變更及撤銷資源的存取權

    gcloud projects get-iam-policy PROJECT_ID
    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

    您可以要求專案擁有者或編輯者授予您 OWNEREDITORcompute.instanceAdmin.v1 等任一角色。如果您要將任何介面與屬於共用虛擬私有雲的子網路建立關聯,也需要 compute.networkUser 角色。

    gcloud projects set-iam_policy --member user:email2@gmail.com --role roles/editor
    

我無法連線至次要介面的內部 IP 位址

  • 檢查防火牆規則,確認這類規則是否允許連線至 VM 次要介面。您可以查看連接至次要介面的網路的防火牆規則,方法包括前往 Google Cloud 主控台並按一下適當的虛擬私人雲端網路,或者使用下列 gcloud 指令。

    gcloud compute firewall-rules list --filter='network:NETWORK_NAME'
    
  • 檢查您是否正嘗試透過網址或從次要介面的網路外連線至該介面。您只能從介面所在的網路中連線至介面的內部 IP。如需從外部網路連線至該介面,您可以為次要介面指派外部 IP 位址。

  • 檢查您是否正嘗試透過對等網路或同一網路的其他子網路,從次要介面連接的子網路外連線至該介面的內部 IP。您可以參閱「每個執行個體的多個網路介面」一節,瞭解虛擬私有雲端對等互連與含有多個介面的 VM 執行個體之間如何交互作用。如要從次要介面的子網路外連線至該介面,您可能必須在 VM 上設定路徑。如要進一步瞭解 DHCP 如何在 VM 中編排預設路徑,請參閱規格

  • 如果您嘗試存取 IPv6 位址,請參閱「我無法連線至次要介面的 IPv6 位址」一文。

我無法使用外部 IP 位址連線至次要介面

DHCP 伺服器只會在 VM 的主要網路介面上編寫預設路徑。如果您想使用外部 IP 連線至次要介面,有兩種做法。如果只需從外部網路連線至次要網路介面,您可以在該網路介面上設定預設路徑。否則,您可以使用為其他介面設定路由教學課程中所述的方法,在 VM 中使用來源式政策路由設定個別的路由表。

如果您嘗試存取 IPv6 位址,請參閱「我無法連線至次要介面的 IPv6 位址」一文。

我無法連線至次要介面的 IPv6 位址

如果您嘗試存取 IPv6 位址,請確認 VM 已安裝 google-guest-agent 20220603.00 以上版本。如要進一步瞭解如何管理 google-guest-agent 版本,請參閱「訪客環境」。

如果您使用的是舊版 google-guest-agent,次要介面不會收到 IPv6 子網路路徑。建議您更新 Guest Agent,確保路徑設定正確無誤。

不過,您可以改為建立啟動指令碼,為每個次要介面進行下列設定變更,做為解決方法。

sudo sysctl -w net.ipv6.conf.INTERFACE_NAME.accept_ra_rt_info_max_plen=128

INTERFACE_NAME 替換為介面名稱,例如 eth1ens5

我在使用 /32 以外的網路遮罩時遇到連線問題

根據預設,執行個體中繼資料伺服器只會回應預設閘道的 ARP 要求。

如要設定具有 /32 以外網路遮罩的介面,請使用標記 --guest-os-features MULTI_IP_SUBNET 建立映像檔,然後使用該映像檔建立執行個體。舉例來說,如果您使用的是 debian-9 映像檔,可以使用下列指令建立映像檔:

gcloud compute images create debian-9-multi-ip-subnet \
     --source-disk debian-9-disk \
     --source-disk-zone ZONE_A \
     --guest-os-features MULTI_IP_SUBNET

如要查看在映像檔上設定的訪客功能,請在訪客映像檔上執行 gcloud compute images describe 指令。

gcloud compute images describe debian-9-multi-ip-subnet

如要進一步瞭解如何建立自訂映像檔,請參閱「建立、刪除及淘汰自訂映像檔」。

我無法解析具有多個網路介面的 VM 內部主機名稱

使用內部主機名稱執行 DNS 查詢時,該項查詢會解析為執行個體的主要網路介面 (nic0)。

如果 nic0 連結至與發出 DNS 查詢的執行個體 VPC 網路不同的 VPC 網路,DNS 查詢就會失敗。內部 DNS 僅會在指定的虛擬私有雲網路中解析。詳情請參閱「Compute Engine 內部 DNS」。

透過更新執行個體屬性刪除動態 NIC 時,我收到錯誤訊息

在極少數情況下,如果您在更新執行個體的屬性時刪除動態網路介面 (NIC),更新可能會失敗。失敗後,執行個體會還原為原始狀態。在極少數情況下,系統可能會保留動態 NIC。

如果遇到這個問題,請按照下列步驟操作:

  • 如要解決問題:請再次使用相同的指令或要求來更新執行個體屬性。重新執行作業可確保執行個體達到您在原始要求中指定的狀態。

  • 為避免問題再次發生:請勿透過更新執行個體屬性,從執行個體中刪除動態網路介面卡。請改為按照「刪除動態 NIC」一文的說明,直接刪除動態 NIC。

透過更新 MIG 設定刪除動態 NIC 時,我收到錯誤訊息

在極少數情況下,如果您在更新 MIG 中的執行個體設定時刪除動態 NIC,更新可能會失敗。發生錯誤後,執行個體會還原為原始狀態。

Compute Engine 會重試更新作業,直到成功為止,藉此自動解決這個問題。您可以定期檢查代管執行個體的狀態,直到最後一次嘗試的錯誤解決為止。

使用序列主控台來解決問題

通常建議您在 VM 上啟用序列控制台,以便對設定相關問題進行偵錯。如要啟用序列主控台以進行互動式偵錯,請按照「使用序列主控台排解問題」中的步驟操作。