連線至 VM

本文說明如何在 Google Distributed Cloud (GDC) 實體隔離方案中,建立虛擬機器 (VM) 執行個體的網路連線。

Google Distributed Cloud (GDC) 實體隔離方案會使用金鑰型 SSH 驗證機制,建立與虛擬機器 (VM) 執行個體的連線。根據預設,在具有作業系統 (OS) 的 VM 上,本機使用者並未設定密碼。

本文適用於平台管理員或應用程式運作人員群組中的開發人員,他們會連線至 Distributed Cloud 環境中的 VM 執行個體。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。

事前準備

連線至 VM 前,請先完成下列前置作業:

  • 啟用存取權管理。您必須在訪客環境中啟用存取權管理,才能繼續操作。根據預設,新 VM 會啟用存取權管理功能。
  • 啟用 VM 外部存取權,允許任何對等互連端透過傳輸控制通訊協定 (TCP) 通訊埠 22 存取。
  • 叢集的登入權限。按照「登入」中的 CLI 步驟登入叢集。
  • 如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。

    取得 kubeconfig 檔案路徑

    如要對 Management API 伺服器執行指令,請確認您具備下列資源:

    1. 如果沒有 Management API 伺服器的 kubeconfig 檔案,請登入並產生該檔案。

    2. 請使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER。

    要求 IAM 角色

    請與 IAM 專案管理員聯絡,要求在專案中取得下列角色:

    • 虛擬機器專案管理員 (project-vm-admin):建立、修改、列出及刪除專案命名空間中的 VM。

    • 專案檢視者(project-viewer):查看專案命名空間中的所有資源。

    所有 VM 角色都必須繫結至 VM 所在專案的命名空間。按照步驟驗證存取權。

    建立 VM 連線

    本節說明如何與特定作業系統 (OS) 的 VM 建立連線。

    連線至 VM

    如要連線至特定 OS 的 VM,請使用 GDC 控制台、gdcloud CLI 或 Virtual Machine Manager API。

    控制台

    1. 在導覽選單中,依序點選「虛擬機器」>「執行個體」。

    2. 在 VM 清單中,找出要連線的執行中 VM 所在資料列。在「連線」欄中,按一下「SSH」。

    3. SSH 瀏覽器終端機隨即開啟。在殼層中輸入任何指令,或按一下「FTP」FTP瀏覽檔案結構並上傳檔案。

    gdcloud

    執行 gdcloud compute ssh 指令,使用 SSH 連線至 VM:

    gdcloud compute ssh VM_NAME \
      --project=PROJECT_ID
    

    請替換下列變數:

    • VM_NAME:VM 的名稱。
    • PROJECT_ID:VM 所在專案的 ID。

    如果您已為 CLI 設定預設屬性,則可從這個指令中省略 --project 旗標。例如:

    gdcloud compute ssh VM_NAME
    

    API

    VirtualMachine 資源會使用 GuestEnvironmentSynced 條件來表示其啟動狀態。當 GuestEnvironmentSynced 條件為 True 時,表示 VM 已完成啟動,可以進行 SSH 連線。

    下列範例程式碼片段顯示 VirtualMachine 資源,其中 GuestEnvironmentSynced 條件設為 True:

    {
        "apiVersion": "virtualmachine.gdc.goog/v1",
        "kind": "VirtualMachine",
        ...
        "status": {
            "conditions": [
                {
                    "lastTransitionTime": "2026-01-25T09:52:52Z",
                    "message": "No message available",
                    "observedGeneration": 3,
                    "reason": "AccessManagementReady",
                    "status": "True",
                    "type": "GuestEnvironmentSynced"
                },
            ],
        },
    }
    

    確認 VM 的 GuestEnvironmentSynced 狀態為 True 後,請按照下列步驟連線至 VM:

    • 開啟終端機。
    • 建立安全殼層金鑰組。
    • 上傳公開金鑰和使用者名稱,並設定存留時間 (TTL) 值。

    GDC 會擷取安全殼層金鑰和使用者名稱,並使用該使用者名稱建立使用者帳戶。在 VM 上,GDC 會將公開金鑰儲存在 VM 的使用者 ~/.ssh/authorized_keys 檔案中。

    請按照下列步驟操作,透過指令列連線至 VM:

    1. 建立安全殼層金鑰組和使用者名稱。

      在 OS 工作站上,使用 ssh-keygen 公用程式建立新的安全殼層金鑰組。下列程式碼範例會建立 RSA (Rivest–Shamir–Adleman) 金鑰組:

      ssh-keygen -t rsa \
        -f ~/.ssh/KEY_FILENAME \
        -C USERNAME \
        -b 2048
      

      請根據下列定義替換變數。

      變數定義
      KEY_FILENAME 安全殼層金鑰檔案的名稱。舉例來說,my-ssh-key 檔案名稱會產生名為 my-ssh-key 的私密金鑰檔案,以及名為 my-ssh-key.pub 的公開金鑰檔案。
      USERNAME 您在 VM 上的使用者名稱,例如 testuser 或 testuser_gmail_com。

      ssh-keygen 公用程式會將私密金鑰檔案儲存在 ~/.ssh/KEY_FILENAME 路徑中,並將公開金鑰檔案儲存在 ~/.ssh/KEY_FILENAME.pub 路徑中。

      使用者 testuser 的公開金鑰與以下範例類似:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. 將金鑰上傳至 VM,並使用公開金鑰、使用者名稱和金鑰的存留時間 (TTL) 值建立 Kubernetes 資源。

      下列範例使用 access_request.yaml 檔案,透過 KEY_FILENAME 私密金鑰和 10 分鐘的存留時間值,授予 VM 執行個體的存取權:

      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineAccessRequest
      metadata:
        namespace: VM_NAMESPACE
        name: AR_NAME
      spec:
        ssh:
          key: |
            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
          ttl: 10m
        user: USERNAME
        vm: VM_NAME
      

      請依據下列定義替換變數:

      變數定義
      VM_NAMESPACE VM 的命名空間。
      AR_NAME 存取要求的名稱。
      USERNAME 您在 VM 上的使用者名稱,例如 testuser 或 testuser_gmail_com。
      VM_NAME VM 執行個體的名稱。
    3. 建立金鑰:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
        create -f access_request.yaml
      
    4. 查看存取權要求狀態:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
        -n VM_NAMESPACE \
        get virtualmachineaccessrequests.virtualmachine.gdc.goog
      

      將 VM_NAMESPACE 替換為 VM 的命名空間。

      configured 狀態表示您可以連線至 VM。

    5. 連線至 VM:

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      替換下列值:

      • PATH_TO_PRIVATE_KEY:私密安全殼層金鑰檔案的路徑,該檔案對應至您新增至 VM 的公開金鑰。
      • USERNAME 替換成您在建立安全殼層金鑰時指定的使用者名稱。例如:cloudysanfrancisco_example_com 或 cloudysanfrancisco。
      • EXTERNAL_IP 替換為 VM 的外部輸入 IP 位址。

    疑難排解

    本節說明如何排解建立存取要求後,連線至 VM 執行個體時可能發生的問題。

    請按照下列步驟找出可能的問題:

    1. 確認 VM 正在運作。在下列指令中,將可編輯的變數替換為您的值:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
        -n VM_NAMESPACE \
        get virtualmachines.virtualmachine.gdc.goog VM_NAME
      

      如果 VM 未運作,您就無法連線或設定新要求。

    2. 確認 VM 已執行幾分鐘。如果 VM 剛啟動,SSH 存取所需的服務可能尚未執行。通常會在開機後五分鐘內執行。

    3. 確認您未超過存取要求的存留時間值。時間達到存留時間值後,系統就會移除金鑰。

    4. 如果 VirtualMachineAccessRequest 顯示 configured 狀態,請確認是否符合下列規定:

      1. 您已啟用資料移轉,可透過通訊埠 22 傳輸資料至 VM。
      2. 您的機器會轉送至 VM。例如,您可以使用
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 指令檢查轉送。
    5. 如果 VirtualMachineAccessRequest 顯示 failed 狀態,請查看完整狀態並檢閱錯誤訊息,瞭解要求失敗的原因:

      kubectl --kubeconfig MANAGEMENT_API_SERVER \
        -n VM_NAMESPACE \
        describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME
      

      將上述指令中的可編輯變數替換為您自己的值。

    6. 如果 VirtualMachineAccessRequest 的狀態為空白,表示客體環境可能未執行。