Questo documento è destinato ai proprietari di applicazioni che eseguono cluster Anthos su Bare Metal. Questo documento mostra come connettersi a macchine virtuali (VM) che utilizzano Anthos VM Runtime. Puoi connetterti alle VM direttamente utilizzando un indirizzo IP oppure utilizzando strumenti integrati per l'accesso SSH o alla console.
Prima di iniziare
Per completare il documento, devi accedere alle seguenti risorse:
- Una VM eseguita in uno dei tuoi cluster. Se necessario, crea una VM nei cluster Anthos su Bare Metal.
- Lo strumento client di
virtctl
è stato 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 tua VM è facilitato da un agente guest installato da Anthos VM Runtime. Tra le altre cose, l'agente guest installa e fa scadere le chiavi SSH. Questa funzionalità abilita un tunnel SSH per accedere alla tua VM dai client esterni alla rete del cluster.
Abilita l'agente guest
Per abilitare l'agente ospite:
Controlla la risorsa personalizzata
VirtualMachine
per verificare che sia configurata in modo da abilitare l'agente guest:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
Il campo
spec.osType
deve essere impostato sul sistema operativo della tua VM,Linux
oWindows
. La sezionespec.guestEnvironment
non va configurata esplicitamente come vuota. Se la sezione è configurata come vuota (guestEnvironment: {}
), puoi rimuoverla completamente per abilitare l'agente guest.La tua risorsa personalizzata
VirtualMachine
per la VM a cui vuoi accedere dovrebbe essere simile alla seguente: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 il
status
nella risorsa personalizzata della VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
Quando l'agente guest funziona, viene visualizzato il valore
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 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
: nome della risorsa 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 per l'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 la chiave SSH è valida.Ad esempio, se specifichi
30m
, la chiave SSH scade dopo 30 minuti.Questo flag utilizza le seguenti unità:
s
per secondim
per minutih
per orarid
per giorni
Usa
kubectl apply
per creare il fileVirtualMachineAccessRequest
dal file manifest. Ad esempio, se hai denominato il file manifestvm-access-request.yaml
,kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
Sostituisci quanto segue:
MANIFEST
: 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 del
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
Disabilita l'agente ospite
Quando crei una nuova VM e imposti il campo osType
, l'agente guest è abilitato.
Quando questa funzionalità è in anteprima, puoi disabilitarla modificando la risorsa personalizzata VirtualMachine
. La disabilitazione dell'agente guest disabilita l'accesso SSH senza password alla tua 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
VirtualMachine
per aggiungere esplicitamente un elementospec.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 della VM aggiornato nell'editor.
Usa
kubectl
per avviare la VM:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
Connettiti utilizzando un indirizzo IP
Se la tua VM ha un indirizzo IP accessibile e hai già le credenziali per accedervi, puoi connetterti tramite 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:
SSH
Ottieni i dettagli della tua VM per visualizzarne l'indirizzo IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
VM_NAME
: nome della VM.VM_NAMESPACE
: lo spazio dei nomi per la tua VM.
Il seguente output di esempio mostra le informazioni sulla VM e l'indirizzo IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Connettiti alla tua VM tramite 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 tua 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 VM. Quando utilizzi un indirizzo IP, devi abilitare VNC o RDP nel sistema operativo guest prima di poter utilizzare uno dei due per connetterti alla VM. Per informazioni sull'abilitazione e sull'utilizzo di VNC o RDP, consulta la documentazione del sistema operativo guest.
Devi anche disporre delle credenziali esistenti per accedere alla VM, ad esempio quelle definite 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 --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sostituisci i seguenti valori:
VM_NAME
: nome della VM.VM_NAMESPACE
: lo spazio dei nomi per la tua VM.
Il seguente output di esempio 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
.
Connettersi tramite un servizio
Se la tua VM si connette al valore predefinito pod-network
e non riesci a comunicare direttamente con l'indirizzo IP della tua VM, espone la VM dietro un bilanciatore del carico Service
.
Crea un manifest
Service
, ad esempiomy-service-load-balancer.yaml
, nell'editor preferito: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, oppureudp
per VNC.EXTERNAL_PORT
: il numero di porta esterna da esporre e a cui devi 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
Recupera l'indirizzo
EXTERNAL-IP
del servizio 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 tramite SSH
Se il tuo client è connesso alla stessa rete fisica del tuo cluster Anthos su nodi Bare Metal e non hai bisogno dell'utilizzo di tunnel SSH per connetterti 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 tua VM. Questo account viene creato se non esiste nella VM.VM_NAME
: il nome della tua VM.
Dopo aver effettuato correttamente la connessione tramite SSH, la VM non serve più per la connessione, esci dalla sessione SSH:
exit
Connettersi direttamente dalla console
Se non hai una connettività di rete diretta alla tua VM Linux per l'accesso SSH, connettiti alla console della VM usando la console di runtime VM Anthos. Questo metodo apre una console seriale. Al momento della connessione, viene visualizzato un comando di comando 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 tua VM.Quando richiesto, inserisci le credenziali utente per la tua VM. Queste credenziali devono esistere nella VM o essere applicate quando viene creata la VM. Se necessario, consulta la seguente sezione per creare le credenziali utente iniziali quando crei una VM.
Dopo aver effettuato correttamente la connessione alla console della VM e senza aver più bisogno della connessione, esci dalla sessione VM e dalla console:
Ctrl + ]
Connettiti direttamente tramite VNC
Puoi utilizzare il comando kubectl virt vnc
per aprire la console grafica Virtual Network Computing (VNC) per accedere alle VM. Questo metodo funziona per le VM che eseguono un sistema operativo guest Windows o Linux. Quando utilizzi il comando kubectl virt vnc
, Anthos VM Runtime apre VNC per te, quindi non devi
abilitare VNC nel sistema operativo guest.
Per accedere alla VM sono necessarie le credenziali esistenti, ad esempio quelle definite per creare le credenziali utente iniziali quando crei una VM.
Per accedere a una VM tramite VNC, utilizza il componente aggiuntivo
virtctl
:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
Sostituisci
VM_NAME
con il nome della tua VM.Quando richiesto, inserisci le credenziali utente per la tua VM.
Dopo aver effettuato correttamente la connessione alla sessione VNC della VM e interrompendo la connessione, esci dalla VM per chiudere la connessione VNC.
Crea credenziali utente iniziali
Quando ti connetti alla tua VM utilizzando la console, devi specificare le credenziali utente. Il processo di creazione delle credenziali utente iniziali è diverso 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 o 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
: nome della VM.USERNAME
: nome utente dell'account da creare nella VM.PASSWORD
: 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.
Passaggi successivi
- Gestisci lo stato di alimentazione di una VM nei cluster Anthos su Bare Metal.
- Modifica una VM in cluster Anthos su Bare Metal.
- Visualizza i log della console VM nei cluster Anthos su Bare Metal.