Questo documento è destinato ai proprietari di applicazioni che eseguono Google Distributed Cloud. Questo documento mostra come connettersi a macchine virtuali (VM) che utilizzano il runtime VM su GDC. Puoi connetterti alle VM direttamente usando un indirizzo IP o gli strumenti integrati per SSH o l'accesso alla console.
Prima di iniziare
Per completare questo documento, devi accedere alle seguenti risorse:
- Una VM eseguita 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 diretto e senza password SSH alla VM è facilitato da un agente guest installato da VM Runtime su GDC. Il guest agent installa e fa scadere le chiavi SSH. Questa funzionalità abilita un tunnel SSH per accedere alla VM dai client esterni alla rete del cluster.
Abilita l'agente guest
Per abilitare l'agente ospite:
Controlla la tua risorsa personalizzata
VirtualMachine
per verificare che sia configurata per attivare l'agente guest:kubectl get gvm
VM_NAME -o yaml --kubeconfigKUBECONFIG Il campo
spec.osType
deve essere impostato sul sistema operativo della tua VM,Linux
oWindows
. La sezionespec.guestEnvironment
non deve essere configurata esplicitamente come vuota. Se la sezione è configurata come vuota (guestEnvironment: {}
), puoi rimuoverla completamente per abilitare il guest agent.La tua risorsa personalizzata
VirtualMachine
per la VM a cui vuoi accedere dovrebbe avere il seguente aspetto:apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
metadata:
name: sample-vm
spec:
compute:
cpu:
vcpus: 2
memory:
capacity: 4Gi
...
osType: Linux
...Se necessario, usa
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 --kubeconfigKUBECONFIG Quando l'agente ospite funziona, 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
...
Abilita l'accesso SSH senza password
Per abilitare l'accesso SSH senza password per la 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:
: il nome della risorsa richiesta di accesso.VMAR_NAME
: lo spazio dei nomi per la VM a cui vuoi accedere.VM_NAMESPACE
: il nome della VM a cui vuoi accedere.VM_NAME
: il nome utente dell'utente che accede alla VM.USERNAME
: la chiave pubblica per l'accesso SSH. In genere, si tratta dei contenuti del filePUBLIC_SSH_KEY id_rsa.pub
.
: il campoEXPIRATION_TIME ttl
(time-to-live) specifica per quanto tempo la chiave SSH è valida.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 l'elementoVirtualMachineAccessRequest
dal file manifest. Ad esempio, se hai denominato il file manifestvm-access-request.yaml
,kubectl apply -f
MANIFEST --kubeconfigKUBECONFIG Sostituisci quanto segue:
: il nome del file manifest della richiesta di accesso. Ad esempio,MANIFEST vm-access-request.yaml
.
: il percorso del file kubeconfig del cluster che ospita la VM a cui stai accedendo.KUBECONFIG
Per verificare che la configurazione della richiesta di accesso sia riuscita, controlla lo stato di
VirtualMachineAccessRequest
:kubectl get vmar
VMAR_NAME -o yaml --kubeconfigKUBECONFIG Una volta completata la configurazione, 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
Disattiva l'agente guest
L'agente guest viene abilitato quando crei una nuova VM e imposti il campo osType
.
Mentre questa funzionalità è in anteprima, puoi disabilitarla modificando la
risorsa personalizzata VirtualMachine
. La disabilitazione dell'agente guest disabilita
l'accesso SSH senza password alla VM.
Per disabilitare l'agente guest:
Utilizza
kubectl
per arrestare la VM prima di apportare modifiche alla configurazione:kubectl virt stop
VM_NAME --kubeconfigKUBECONFIG
Modifica la risorsa VM:
kubectl edit gvm
VM_NAME --kubeconfigKUBECONFIG Aggiorna la configurazione
VirtualMachine
per aggiungere esplicitamente unspec.guestEnvironment
vuoto:apiVersion: vm.cluster.gke.io/v1alpha1
kind: VirtualMachine
metadata:
name: vm-example
namespace: default
spec:
compute:
...
osType: Linux
guestEnvironment: {}Salva e chiudi il manifest aggiornato della VM nell'editor.
Utilizza
kubectl
per avviare la VM:kubectl virt start
VM_NAME --kubeconfigKUBECONFIG
Connettiti tramite un indirizzo IP
Se la tua VM ha un indirizzo IP accessibile e hai già le credenziali per accedere alla VM, puoi connetterti utilizzando un protocollo come SSH, VNC o RDP.
Connetti tramite indirizzo IP
Se puoi connetterti direttamente all'indirizzo IP della tua VM, utilizza uno dei seguenti metodi:
Ottieni i dettagli della tua VM per visualizzarne l'indirizzo IP:
kubectl get gvm
VM_NAME --namespaceVM_NAMESPACE --kubeconfigKUBECONFIG Sostituisci i seguenti valori:
: nome della VM.VM_NAME
: lo spazio dei nomi per la tua VM.VM_NAMESPACE
L'output di esempio seguente mostra le informazioni sulla VM e l'indirizzo IP:
NAME STATUS AGE IP
vm1 Running 7m 10.200.0.21Connettiti alla VM utilizzando un client SSH:
ssh
USERNAME @IP_ADDRESS -iPATH_TO_KEY Sostituisci i seguenti valori:
: il nome utente di un account sulla tua VM.USERNAME
: l'indirizzo IP della VM ottenuto nel passaggio precedente.IP_ADDRESS
: il percorso della chiave SSH privata.PATH_TO_KEY
Il Virtual Network Computing (VNC) e il Remote Desktop Protocol (RDP) consentono di utilizzare la console grafica per accedere alla VM. Quando utilizzi un indirizzo IP, devi abilitare VNC o RDP nel sistema operativo guest prima di poter utilizzare uno dei due indirizzi per connetterti alla VM. Per informazioni sull'abilitazione e l'utilizzo di VNC o RDP, consulta la documentazione del sistema operativo guest.
Sono necessarie anche le credenziali esistenti per accedere alla VM, ad esempio quelle che definisci per creare le credenziali utente iniziali quando crei una VM.
Ottieni i dettagli della tua VM per visualizzarne l'indirizzo IP:
kubectl get gvm
VM_NAME --namespaceVM_NAMESPACE --kubeconfigKUBECONFIG Sostituisci i seguenti valori:
: nome della VM.VM_NAME
: lo spazio dei nomi per la tua VM.VM_NAMESPACE
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 tua VM ottenuto nel passaggio precedente utilizzando uno strumento client e la porta appropriata, come la porta VNC
5900
o la porta RDP3389
.
Connettiti tramite un servizio
Se la tua VM si connette all'istanza predefinita pod-network
e non riesci a comunicare direttamente con l'indirizzo IP della VM, esponi la VM dietro un bilanciatore del carico Service
.
Crea un manifest
Service
, ad esempiomy-service-load-balancer.yaml
, nell'editor di tua scelta: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: LoadBalancerIn questo tipo di manifest
Service
, sostituisci i seguenti valori:
: il nome della VM da esporre per l'accesso remoto.VM_NAME
: il nome del protocollo, ad esempioPORT_NAME ssh
,vnc
ordp
.
: il tipo di protocollo, ad esempioPROTOCOL_TYPE tcp
per SSH e RDP oudp
per VNC.
: il numero della porta esterna da esporre e che utilizzi per la connessione.EXTERNAL_PORT
: la porta di destinazione, ad esempioTARGET_PORT 22
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 bilanciatore del carico:kubectl get service
VM_NAME -service --kubeconfigKUBECONFIG 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 -iPATH_TO_KEY Sostituisci i seguenti valori:
: il nome utente di un account sulla VM.USERNAME
: l'indirizzo IP del bilanciatore del carico.LOAD_BALANCER_IP_ADDRESS
: il percorso della chiave SSH privata.PATH_TO_KEY
Connettiti direttamente tramite SSH
Se il client è connesso alla stessa rete fisica del tuo cluster Anthos su nodi bare metal e non è necessario utilizzare tunnel SSH per connetterti al cluster, puoi utilizzare kubectl virt ssh
.
Per utilizzare SSH per connettere una VM Linux dalla console con il componente aggiuntivo
virtctl
:kubectl virt ssh
USERNAME @VM_NAME --namespaceVM_NAMESPACE --kubeconfigKUBECONFIG Sostituisci i seguenti valori:
: il nome utente per accedere alla VM. Questo account viene creato se non esiste sulla VM.USERNAME
: il nome della VM.VM_NAME
Dopo aver eseguito correttamente la connessione tramite SSH per la VM e non aver più bisogno della connessione, esci dalla sessione SSH:
exit
Connettiti direttamente utilizzando la console
Se non disponi di una connettività di rete diretta alla VM Linux per l'accesso SSH, connettiti alla console della VM utilizzando il runtime VM sulla console GDC. Questo metodo consente di aprire una console seriale. Al momento della connessione ti verrà presentato un prompt di comando anziché una console grafica.
Per accedere a una VM Linux dalla console, usa il componente aggiuntivo
virtctl
:kubectl virt console
VM_NAME --kubeconfigKUBECONFIG Sostituisci
con il nome della tua VM.VM_NAME Quando richiesto, inserisci le credenziali utente per la VM. Queste credenziali devono esistere nella VM o essere applicate quando la VM viene creata. 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 di connettersi, esci dalla sessione e dalla console VM:
Ctrl + ]
Collegamento diretto tramite VNC
Puoi utilizzare il comando kubectl virt vnc
per aprire la console grafica
Virtual Network Computing (VNC) e 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
, il runtime VM su GDC apre VNC al posto tuo, 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 --kubeconfigKUBECONFIG Sostituisci
con il nome della tua VM.VM_NAME Quando richiesto, inserisci le credenziali utente per la VM.
Dopo aver effettuato correttamente la connessione alla sessione VNC della VM e non aver più bisogno di connettersi, disconnettiti dalla VM per chiudere la connessione VNC.
Crea credenziali utente iniziali
Quando ti connetti alla VM utilizzando la console, devi specificare le credenziali utente. La procedura per la creazione delle credenziali utente iniziali è diversa per i sistemi operativi guest Linux e Windows.
Per le VM Linux, le credenziali utente possono essere integrate nelle immagini personalizzate o possono essere specificate durante la creazione di 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-passwordUSERNAME :PASSWORD \
--kubeconfigKUBECONFIG Sostituisci i seguenti valori:
: nome della VM.VM_NAME
: nome utente dell'account da creare sulla VM.USERNAME
: password dell'account utente.PASSWORD
Questo comando di esempio crea una VM Linux che esegue Ubuntu 20.04. Ti consigliamo di modificare le credenziali iniziali dopo aver eseguito il primo accesso alla VM.
Per reimpostare la password di un utente esistente o creare la password iniziale per un nuovo utente, procedi nel seguente modo:
Abilita 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 si avvia automaticamente per i successivi riavvii 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:
: il nome della VM.VM_NAME
: 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.USERNAME
: (facoltativo) lo spazio dei nomi della VM. Questo flag è facoltativo. Se non specificato, viene utilizzato lo spazio dei nomi predefinito,VM_NAMESPACE 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 della reimpostazione della password per un account esistente. Senza il flag--force
, il comando ti chiede di confermare la 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 forUSERNAME (Y/n)?Dopo aver confermato (o forzato) la reimpostazione della password, il comando restituisce la nuova password per la VM e il nome utente specificati:
Resetting and retrieving password for
USERNAME onVM_NAME vm_name:VM_NAME username:USERNAME password:PASSWORD
Passaggi successivi
- Gestire 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.