Google Distributed Cloud (GDC) air-gapped 會使用金鑰型 SSH 驗證機制,建立與虛擬機器 (VM) 執行個體的連線。根據預設,作業系統 (OS) VM 的本機使用者不會設定密碼。
事前準備
連線至 VM 前,請務必符合下列先決條件:
- 啟用存取權管理。 如果未在訪客環境中啟用存取權管理,就無法繼續操作。根據預設,新 VM 會啟用存取權管理功能。
- 啟用 VM 外部存取權,允許傳輸控制通訊協定 (TCP) 通訊埠 22 上的任何對等互連項目存取 VM。
ProjectNetworkPolicy (PNP) 自訂資源。- 在專案中設定 PNP 後,您就能存取專案或機構外部的 VM。
- 如要診斷是否沒有 PNP,請洽詢基礎架構作業員 (IO)。
如要使用 gdcloud 指令列介面 (CLI) 指令,請務必下載、安裝及設定 gdcloud CLI。Distributed Cloud 的所有指令都使用 gdcloud 或 kubectl CLI,且需要作業系統 (OS) 環境。
取得 kubeconfig 檔案路徑
如要對 Management API 伺服器執行指令,請確認您具備下列資源:
- 登入並產生 Management API 伺服器的 kubeconfig 檔案 (如果沒有)。 
- 使用 Management API 伺服器的 kubeconfig 檔案路徑,取代這些操作說明中的 - MANAGEMENT_API_SERVER。
要求權限和存取權
如要執行本頁列出的工作,您必須具備專案虛擬機器管理員角色。按照步驟驗證您在 VM 所在專案的命名空間中,是否具備專案 VirtualMachine 管理員 (project-vm-admin) 角色。
如要使用 GDC 控制台或 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員同時指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer) 角色。
建立 VM 連線
本節說明如何連線至特定作業系統 (OS) 的 VM。
連線至 VM
如要連線至特定 OS 的 VM,請使用 GDC 控制台、gdcloud CLI 或 Virtual Machine Manager API。
控制台
- 在導覽選單中,依序點選「Virtual Machines」>「Instances」。 
- 在 VM 清單中,找出要連線的執行中 VM 所在列。在「連線」欄中,按一下「SSH」。 
- 系統會開啟 SSH 瀏覽器終端機。在 Shell 中輸入任何指令,或按一下「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
連線至 VM:
- 開啟終端機。
- 建立 SSH 金鑰組。
- 上傳公開金鑰和使用者名稱,並設定存留時間 (TTL) 值。
GDC 會擷取 SSH 金鑰和使用者名稱,並以該使用者名稱建立使用者帳戶。在 VM 上,GDC 會將公開金鑰儲存在 VM 上使用者 ~/.ssh/authorized_keys 檔案中。
如要透過指令列連線至 VM,請完成下列步驟:
- 建立 SSH 金鑰組和使用者名稱。 - 在 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私密金鑰授與 VM 執行個體存取權,TTL 值為十分鐘:- 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 執行個體的名稱。 
- 建立金鑰: - 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,其中- USERNAME是您在建立 SSH 金鑰時指定的使用者名稱。例如- 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 存取所需的服務可能尚未執行。通常會在開機後五分鐘內執行。 
- 確認存取要求未超過 TTL 值。時間達到存留時間值後,系統就會移除金鑰。 
- 如果 - VirtualMachineAccessRequest顯示- configured狀態,請確認下列規定:- 您在通訊埠 22 上啟用資料移轉功能,
- 您的機器會將路徑導向 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狀態空白,可能表示訪客環境未執行。