在網路之間遷移 VM

本頁說明如何將 VM 執行個體從一個網路遷移至另一個網路。如果 VM 使用多個網路介面連線至多個網路,這個程序會更新其中一個介面,其餘介面則維持不變。

系統支援下列遷移作業:

  • 從舊版網路連線至同一專案中的虛擬私有雲網路
  • 從一個虛擬私有雲網路連線至同一專案中的另一個虛擬私有雲網路
  • 從虛擬私有雲網路的一個子網路連線至同一網路的另一個子網路
  • 從服務專案網路到 Shared VPC 主專案的共用網路

無論如何,VM 都會留在原本的區域和可用區。只有附加的網路會變更。

事前準備

  • 參閱虛擬私有雲說明文件。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上的分頁,瞭解如何使用範例:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,無須設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  • 設定預設地區和區域
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

需求條件

遷移 VM 前,請確認 VM 符合下列條件:

  • VM 僅使用 IPv4 位址。
  • VM 必須停止運作。為確保 VM 中的客體 OS 能在停止作業完成前正常關機,您可以選擇在 VM 中啟用正常關機
  • VM 不得加入執行個體群組或網路端點群組 (NEG)。申請條件如下:
    • 如果 VM 屬於非代管執行個體群組或 NEG,則必須先從群組中移除 VM,才能遷移。
    • 如果 VM 屬於代管執行個體群組 (MIG),則無法遷移。請改為使用具有不同 VM 屬性的執行個體範本,建立新的 MIG。
    • 您可以移動目標集區中的執行個體,不必先移除。目標集區會擴大,涵蓋這兩個聯播網。

限制

  • 您無法將 VM 介面遷移至舊版網路。
  • 遷移期間,系統會變更分配給網路介面的 MAC 位址。這可能會影響與 MAC 位址緊密相關的服務,例如第三方授權協議。
  • 如果將 VM 遷移至 IP 範圍不同的網路或子網路,執行個體的內部 IP 位址就必須變更。如果遷移至 IP 範圍相同的子網路,只要舊 IP 位址未在目的地使用,您就可以在遷移期間指定該位址,繼續沿用。
  • 如果目標子網路的 IP 範圍與來源不同,介面的 IP 位址會變更,以符合新的子網路範圍。
  • 您可以在新位置保留 VM 現有的外部 IP 位址。如要這麼做,您必須具備目標網路的 compute.subnetworks.useExternalIp 權限,且目標網路不得因 constraints/compute.vmExternalIpAccess 限制而停用外部 IP 位址。

遷移 VM

遷移 VM 前,請先詳閱需求限制

Google 建議您先在新網路中建立必要的防火牆規則、路徑、負載平衡器和其他網路基礎架構資源,再遷移 VM。這麼做可以縮短 VM 離線時間。

如要遷移 VM,請選取下列任一選項:

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 按一下 VM 執行個體名稱,開啟詳細資料頁面。

  3. 如果 VM 正在執行,請按一下 「停止」停止 VM。如果沒有「停止」選項,請依序按一下 「更多動作」> 「停止」

  4. VM 停止後,按一下「編輯」

  5. 在「Network interfaces」(網路介面) 下方,按一下要移動的介面。

  6. 在介面的「Network」(網路) 欄位中,選取介面的新網路。

  7. 在介面的「Subnetwork」(子網路) 欄位中,選取介面的新子網路。

  8. 在「內部 IP 位址」欄位中,如要讓系統從子網路範圍分配 IP 位址,請指定「自動」;如要自行指定未使用的 IP 位址,請指定「自訂」

  9. 按一下「完成」,關閉網路介面編輯面板。

  10. 按一下 [儲存]

  11. VM 儲存完畢後,按一下「Start」(啟動)

  12. 如果出現確認對話方塊,請按一下「開始」

gcloud

  1. 停止 VM

    gcloud compute instances stop INSTANCE_NAME \
        --zone=ZONE_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
  2. 遷移 VM

    gcloud compute instances network-interfaces update INSTANCE_NAME \
        --zone=ZONE_NAME \
        --network-interface=NIC \
        --network=NETWORK_NAME \
        --subnetwork=SUBNET_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • NIC 是您要更新的介面名稱。在單一介面 VM 中,NICnic0
    • NETWORK_NAME 是目標網路名稱。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用目標網路的完整名稱:projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME 是目標子網路名稱。這個子網路必須與 VM 位於同一區域。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用子網路的完整名稱:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
  3. 啟動 VM

    遷移作業可能需要幾分鐘,請稍候再嘗試在新位置啟動 VM。

    gcloud compute instances start INSTANCE_NAME \
        --zone=ZONE_NAME

    其中

    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。

REST

  1. 停止 VM

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/stop
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。
  2. 查看執行個體的詳細資料。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • INSTANCE_NAME 是 VM 執行個體名稱。
  3. 找出介面的指紋。

    您需要指紋才能更新網路介面。

    檢查指令輸出內容,找出 networkInterfaces 欄位內容。找到要更新的介面名稱項目 (在單一介面 VM 中,名稱為 nic0)。複製這個項目中 fingerprint 欄位的字串,以供下一個步驟使用。

  4. 遷移 VM

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/updateNetworkInterface?networkInterface=NIC
    {
      "network": NETWORK_NAME,
      "subnetwork": SUBNET_NAME,
      "networkIP": IP_ADDRESS,
      "name": NIC,
      "fingerprint": FINGERPRINT
    }
    • PROJECT_ID 是您的專案 ID。
    • ZONE_NAME 是包含執行個體的區域名稱。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • NIC 是您要更新的介面名稱。在單一介面 VM 中,NICnic0
    • NETWORK_NAME 是目標網路名稱。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用目標網路的完整名稱:projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME
    • SUBNET_NAME 是目標子網路名稱。這個子網路必須與 VM 位於同一區域。如果您要將 VM 從服務專案網路遷移至主專案網路,必須使用子網路的完整名稱:projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME
    • IP_ADDRESS 是您希望執行個體在新位置擁有的內部 IP 位址。如果省略這個欄位,介面會自動指派一個。
    • FINGERPRINT 是您在上一個步驟中取得的指紋。
  5. 啟動 VM

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_NAME/instances/INSTANCE_NAME/start
    

    其中

    • PROJECT_ID 是您的專案 ID。
    • INSTANCE_NAME 是 VM 執行個體名稱。
    • ZONE_NAME 是包含執行個體的區域名稱。

後續步驟