Questo documento è destinato ai proprietari di applicazioni che eseguono Google Distributed Cloud. Questo documento mostra come connettersi alle macchine virtuali (VM) che utilizzano VM Runtime su GDC. Puoi connetterti alle VM direttamente utilizzando un indirizzo IP o utilizzando strumenti integrati per l'accesso SSH o alla console.
Prima di iniziare
Per completare questo documento, devi avere accesso alle seguenti risorse:
- Una VM in esecuzione in uno dei tuoi cluster. Se necessario, crea una VM in Google Distributed Cloud.
- Lo strumento client
virtctl
installato come plug-in perkubectl
. Se necessario, installa lo strumento client virtctl.
Configura l'accesso SSH senza password alle VM
L'accesso SSH diretto e senza password alla tua VM è facilitato da un agente guest installato da VM Runtime su GDC. Tra le altre attività, l'agente ospite installa e fa scadere le chiavi SSH. Questa funzionalità consente un tunnel SSH per accedere alla VM da client esterni alla rete del cluster.
Attivare l'agente ospite
Per attivare l'agente ospite:
Controlla la risorsa personalizzata
VirtualMachine
per verificare che sia configurata per attivare l'agente ospite:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
Il campo
spec.osType
deve essere impostato sul sistema operativo della VM,Linux
oWindows
. La sezionespec.guestEnvironment
non deve essere configurata esplicitamente come vuota. Se la sezione è configurata come vuota (guestEnvironment: {}
), puoi rimuoverla completamente per attivare l'agente guest.La risorsa personalizzata
VirtualMachine
per la VM a cui vuoi accedere dovrebbe essere simile a questa:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...
Se necessario, utilizza
kubectl edit
per aggiornare la risorsa personalizzataVirtualMachine
.Per verificare che l'agente guest funzioni, controlla
status
nella risorsa personalizzata della VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
Quando l'agente ospite è attivo, viene visualizzato
status: "True"
per le condizioniGuestEnvironmentEnabled
eGuestEnvironmentDataSynced
.apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: ... name: vm-sample-01 ... status: conditions: - lastTransitionTime: "2022-10-05T22:40:26Z" message: "" observedGeneration: 1 reason: UserConfiguration status: "True" type: GuestEnvironmentEnabled - lastTransitionTime: "2022-10-06T21:55:57Z" message: "" observedGeneration: 1 reason: GuestEnvironmentDataSynced status: "True" type: GuestEnvironmentSynced ...
Abilitare l'accesso SSH senza password
Per attivare l'accesso SSH senza password per la tua VM:
Crea un file manifest
VirtualMachineAccessRequest
, ad esempiovm-access-request.yaml
, nell'editor che preferisci:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: name: VMAR_NAME namespace: VM_NAMESPACE spec: vm: VM_NAME user: USERNAME ssh: key: PUBLIC_SSH_KEY ttl: EXPIRATION_TIME
Sostituisci quanto segue:
VMAR_NAME
: il nome della risorsa della richiesta di accesso.VM_NAMESPACE
: lo spazio dei nomi per la VM a cui vuoi accedere.VM_NAME
: il nome della VM a cui vuoi accedere.USERNAME
: il nome utente dell'utente che accede alla VM.PUBLIC_SSH_KEY
: la chiave pubblica per l'accesso SSH. In genere, si tratta dei contenuti del fileid_rsa.pub
.EXPIRATION_TIME
: il campottl
(time-to-live) specifica per quanto tempo è valida la chiave SSH.Ad esempio, se specifichi
30m
, la chiave SSH scade dopo 30 minuti.Questo flag utilizza le seguenti unità:
s
per i secondim
per i minutih
per le ored
per i giorni
Utilizza
kubectl apply
per creare il fileVirtualMachineAccessRequest
dal file manifest. Ad esempio, se hai chiamato il file manifestvm-access-request.yaml
,kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
Sostituisci quanto segue:
MANIFEST
: il nome del file manifest della richiesta di accesso. Ad esempio,vm-access-request.yaml
.KUBECONFIG
: il percorso del file kubeconfig del cluster che ospita la VM a cui stai accedendo.
Per verificare che la configurazione della richiesta di accesso sia andata a buon fine, controlla lo stato di
VirtualMachineAccessRequest
:kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
Se la configurazione va a buon fine, la sezione
status
includestate: configured
:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: ... annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest", "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"}, "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}} creationTimestamp: "2022-10-06T21:55:57Z" finalizers: - vm.cluster.gke.io/vmar-finalizer generation: 2 name: vmar-sample namespace: default resourceVersion: "13033921" uid: 282d72ad-f48d-4e89-af22-336940ac9f58 spec: ssh: key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host ttl: 5m0s user: sample-user vm: vm-sample-01 status: processedAt: "2022-10-06T21:55:57Z" state: configured
Disattivare l'agente ospite
Quando crei una nuova VM e imposti il campo osType
, l'agente guest viene abilitato.
Mentre questa funzionalità è in anteprima, puoi disattivarla modificando la risorsa personalizzata
VirtualMachine
. La disattivazione dell'agente guest disattiva l'accesso
SSH senza password alla VM.
Per disattivare l'agente ospite:
Utilizza
kubectl
per arrestare la VM prima di apportare modifiche alla configurazione:kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
Modifica la risorsa VM:
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Aggiorna la configurazione di
VirtualMachine
per aggiungere unspec.guestEnvironment
vuoto in modo esplicito:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}
Salva e chiudi il manifest della VM aggiornato nell'editor.
Utilizza
kubectl
per avviare la VM:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
Connettersi utilizzando un indirizzo IP
Se la tua VM ha un indirizzo IP accessibile e disponi già delle credenziali per accedere alla VM, puoi connetterti utilizzando un protocollo come SSH, VNC o RDP.
Connettiti tramite indirizzo IP
Se puoi connetterti direttamente all'indirizzo IP della tua VM, utilizza uno dei seguenti metodi:
SSH
Visualizza i dettagli della tua VM per vedere il suo indirizzo IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
VM_NAME
: il nome della VM.VM_NAMESPACE
: lo spazio dei nomi per la tua VM.
L'output di esempio seguente mostra le informazioni sulla VM e l'indirizzo IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Connettiti alla VM utilizzando un client SSH:
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
Sostituisci i seguenti valori:
USERNAME
: il nome utente di un account sulla VM.IP_ADDRESS
: l'indirizzo IP della VM ottenuto nel passaggio precedente.PATH_TO_KEY
: il percorso della chiave SSH privata.
VNC o RDP
Virtual Network Computing (VNC) e Remote Desktop Protocol (RDP) ti consentono di utilizzare la console grafica per accedere alla tua VM. Quando utilizzi un indirizzo IP, devi abilitare VNC o RDP nel sistema operativo guest prima di poterli utilizzare per connetterti alla VM. Per informazioni su come attivare e utilizzare VNC o RDP, consulta la documentazione del sistema operativo guest.
Per accedere alla VM, devi anche disporre di credenziali esistenti, ad esempio quelle che definisci per creare le credenziali utente iniziali quando crei una VM.
Visualizza i dettagli della tua VM per vedere il suo indirizzo IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
VM_NAME
: il nome della VM.VM_NAMESPACE
: lo spazio dei nomi per la tua VM.
L'output di esempio seguente mostra le informazioni sulla VM e l'indirizzo IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Connettiti all'indirizzo IP della VM ottenuto nel passaggio precedente utilizzando uno strumento client e la porta appropriata, ad esempio la porta VNC
5900
o la porta RDP3389
.
Connessione tramite un servizio
Se la tua VM si connette a pod-network
predefinito e non riesci a comunicare
direttamente con l'indirizzo IP della tua VM, esponi la VM dietro un bilanciatore del carico
Service
.
Crea un file manifest
Service
, ad esempiomy-service-load-balancer.yaml
, nell'editor che preferisci:nano my-service-load-balancer.yaml
Copia e incolla il seguente manifest YAML:
apiVersion: v1 kind: Service metadata: name: VM_NAME-service spec: selector: kubevirt/vm: VM_NAME ports: - name: PORT_NAME protocol: PROTOCOL_TYPE port: EXTERNAL_PORT targetPort: TARGET_PORT type: LoadBalancer
In questo tipo di manifest
Service
, sostituisci i seguenti valori:VM_NAME
: il nome della VM da esporre per l'accesso remoto.PORT_NAME
: il nome del protocollo, ad esempiossh
,vnc
ordp
.PROTOCOL_TYPE
: il tipo di protocollo, ad esempioTCP
per SSH e RDP oUDP
per VNC.EXTERNAL_PORT
: il numero di porta esterno da esporre e che utilizzi per connetterti.TARGET_PORT
: la porta di destinazione, ad esempio22
per SSH.
Salva e chiudi il manifest
Service
nell'editor.Crea
Service
utilizzandokubectl
:kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
Ottieni l'indirizzo
EXTERNAL-IP
del servizio di bilanciatore del carico:kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
Viene visualizzato l'indirizzo IP del bilanciatore del carico, come mostrato nell'output di esempio seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20h
Connettiti all'indirizzo
EXTERNAL-IP
del bilanciatore del carico con un protocollo standard, ad esempio utilizzando un client SSH:ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
Sostituisci i seguenti valori:
USERNAME
: il nome utente di un account sulla VM.LOAD_BALANCER_IP_ADDRESS
: l'indirizzo IP del bilanciatore del carico.PATH_TO_KEY
: il percorso della chiave SSH privata.
Connettiti direttamente utilizzando SSH
Se il client è connesso alla stessa rete fisica dei nodi del cluster bare metal e non è necessario utilizzare tunnel SSH per connettersi al cluster, puoi connetterti utilizzando kubectl virt ssh
.
Per utilizzare SSH per connettere una VM Linux dalla console con il componente aggiuntivo
virtctl
:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
USERNAME
: il nome utente per accedere alla VM. Questo account viene creato se non esiste sulla VM.VM_NAME
: il nome della VM.
Dopo aver eseguito la connessione tramite SSH alla VM e non aver più bisogno della connessione, esci dalla sessione SSH:
exit
Connessione diretta tramite la console
Se non disponi della connettività di rete diretta alla tua VM Linux per l'accesso SSH, connettiti alla console della VM utilizzando VM Runtime nella console GDC. Questo metodo apre una console seriale. Una volta stabilita la connessione, viene visualizzato un prompt dei comandi anziché una console grafica.
Per accedere a una VM Linux dalla console, utilizza il componente aggiuntivo
virtctl
:kubectl virt console VM_NAME --kubeconfig KUBECONFIG
Sostituisci
VM_NAME
con il nome della VM.Quando richiesto, inserisci le credenziali utente per la tua VM. Queste credenziali devono esistere sulla VM o essere applicate al momento della creazione della VM. Se necessario, consulta la sezione seguente per creare le credenziali utente iniziali quando crei una VM.
Dopo aver eseguito correttamente la connessione alla console della VM e non aver più bisogno della connessione, esci dalla sessione e dalla console della VM:
Ctrl + ]
Connettiti direttamente utilizzando VNC
Puoi utilizzare il comando kubectl virt vnc
per aprire la console grafica Virtual Network Computing (VNC) per accedere alle tue VM. Questo metodo funziona per le VM che eseguono
un sistema operativo guest Windows o Linux. Quando utilizzi il comando kubectl virt vnc
, VM Runtime su GDC apre VNC per te, quindi non è necessario abilitare VNC nel sistema operativo guest.
Per accedere alla VM, devi disporre di credenziali esistenti, ad esempio quelle che definisci per creare le credenziali utente iniziali quando crei una VM.
Per accedere a una VM utilizzando VNC, utilizza il componente aggiuntivo
virtctl
:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
Sostituisci
VM_NAME
con il nome della VM.Quando richiesto, inserisci le credenziali utente per la tua VM.
Dopo aver effettuato la connessione alla sessione VNC della VM e non aver più bisogno della connessione, disconnettiti dalla VM per chiudere la connessione VNC.
Crea le credenziali utente iniziali
Quando ti connetti alla VM utilizzando la console, devi specificare le credenziali utente. La procedura per creare le credenziali utente iniziali varia per i sistemi operativi guest Linux e Windows.
Sistema operativo guest Linux
Per le VM Linux, le credenziali utente possono essere integrate nelle immagini personalizzate oppure possono essere specificate quando crei una VM.
Utilizza il parametro
--configure-initial-password
con il comandokubectl virt create
:kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
VM_NAME
: il nome della VM.USERNAME
: il nome utente dell'account da creare sulla VM.PASSWORD
: la password per l'account utente.
Questo comando di esempio crea una VM Linux che esegue Ubuntu 20.04. Ti consigliamo di modificare le credenziali iniziali dopo aver eseguito l'accesso alla VM per la prima volta.
Sistema operativo guest Windows
Per reimpostare la password di un utente esistente o creare la password iniziale per un nuovo utente:
Attiva l'agente guest nella VM Windows:
Configura la VM per abilitare l'agente guest.
Utilizza VNC o RDP per connetterti alla VM.
Nella VM, vai all'unità
guest agent
. Nella maggior parte dei casi, si tratta dell'unitàE:
.Utilizza PowerShell per eseguire
install.ps1
.Questa operazione installa e avvia l'agente guest. L'agente guest viene avviato automaticamente per i riavvii successivi della VM.
Chiudi la sessione remota.
Sulla workstation di amministrazione, utilizza il seguente comando per reimpostare (o impostare, se utilizzi un nuovo nome utente) la password della VM Windows:
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
Sostituisci quanto segue:
VM_NAME
: il nome della VM.USERNAME
: il nome utente per cui vuoi reimpostare (o impostare) la password. Se il nome utente è nuovo, il comando crea un nuovo account Windows e imposta la password iniziale.VM_NAMESPACE
: (Facoltativo) lo spazio dei nomi della VM. Questo flag è facoltativo. Se non specificato, viene utilizzato lo spazio dei nomi predefinito,default
.
Per reimpostare (o impostare) la password senza una richiesta di conferma, utilizza il flag facoltativo
--force
. Quando utilizzi il flag--force
, il prompt ti avvisa delle conseguenze del ripristino della password per un account esistente. Senza il flag--force
, il comando ti chiede di confermare il reimpostazione della password con il seguente testo:This command creates an account and sets an initial password for the user USERNAME if the account does not already exist. If the account already exists, resetting the password can cause the LOSS OF ENCRYPTED DATA secured with the current password, including files and stored passwords. Would you like to set or reset the password for USERNAME (Y/n)?
Dopo aver confermato (o forzato) il ripristino della password, il comando restituisce la nuova password per la VM e il nome utente specificati:
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD
Passaggi successivi
- Gestisci lo stato di alimentazione di una VM in Google Distributed Cloud.
- Modifica una VM in Google Distributed Cloud.
- Visualizza i log della console VM in Google Distributed Cloud.