本文說明如何在 Google Distributed Cloud (GDC) 實體隔離方案中,建立虛擬機器 (VM) 執行個體的網路連線。
Google Distributed Cloud (GDC) 實體隔離方案會使用金鑰型 SSH 驗證機制,建立與虛擬機器 (VM) 執行個體的連線。根據預設,在具有作業系統 (OS) 的 VM 上,本機使用者並未設定密碼。
本文適用於平台管理員或應用程式運作人員群組中的開發人員,他們會連線至 Distributed Cloud 環境中的 VM 執行個體。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
連線至 VM 前,請先完成下列前置作業:
- 啟用存取權管理。您必須在訪客環境中啟用存取權管理,才能繼續操作。根據預設,新 VM 會啟用存取權管理功能。
- 啟用 VM 外部存取權,允許任何對等互連端透過傳輸控制通訊協定 (TCP) 通訊埠 22 存取。
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
如果沒有 Management API 伺服器的 kubeconfig 檔案,請登入並產生該檔案。
請使用 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。
控制台
在導覽選單中,依序點選「虛擬機器」>「執行個體」。
在 VM 清單中,找出要連線的執行中 VM 所在資料列。在「連線」欄中,按一下「SSH」。
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:
建立安全殼層金鑰組和使用者名稱。
在 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將金鑰上傳至 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_NAMESPACEVM 的命名空間。 AR_NAME存取要求的名稱。 USERNAME您在 VM 上的使用者名稱,例如 testuser或testuser_gmail_com。VM_NAMEVM 執行個體的名稱。 建立金鑰:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ create -f access_request.yaml查看存取權要求狀態:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachineaccessrequests.virtualmachine.gdc.goog將
VM_NAMESPACE替換為 VM 的命名空間。configured狀態表示您可以連線至 VM。連線至 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 執行個體時可能發生的問題。
請按照下列步驟找出可能的問題:
確認 VM 正在運作。在下列指令中,將可編輯的變數替換為您的值:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachines.virtualmachine.gdc.goog VM_NAME如果 VM 未運作,您就無法連線或設定新要求。
確認 VM 已執行幾分鐘。如果 VM 剛啟動,SSH 存取所需的服務可能尚未執行。通常會在開機後五分鐘內執行。
確認您未超過存取要求的存留時間值。時間達到存留時間值後,系統就會移除金鑰。
如果
VirtualMachineAccessRequest顯示configured狀態,請確認是否符合下列規定:- 您已啟用資料移轉,可透過通訊埠 22 傳輸資料至 VM。
- 您的機器會轉送至 VM。例如,您可以使用
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22指令檢查轉送。
如果
VirtualMachineAccessRequest顯示failed狀態,請查看完整狀態並檢閱錯誤訊息,瞭解要求失敗的原因:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME將上述指令中的可編輯變數替換為您自己的值。
如果
VirtualMachineAccessRequest的狀態為空白,表示客體環境可能未執行。