Connettiti alle VM che utilizzano il runtime VM su GDC

Questo documento è destinato ai proprietari di applicazioni che eseguono Google Distributed Cloud. Questo documento mostra come connettersi a macchine virtuali (VM) che utilizzano Runtime VM su GDC. Puoi connetterti direttamente alle VM utilizzando l'indirizzo IP o l'utilizzo di strumenti integrati per l'accesso SSH o alla console.

Prima di iniziare

Per completare questo documento, devi accedere alle seguenti risorse:

Configura l'accesso SSH senza password alle VM

L'accesso diretto e senza password SSH alla VM è gestito da un agente guest installato da VM Runtime su GDC. Tra le altre mansioni, l'ospite che installa e fa scadere le chiavi SSH. Questa funzionalità abilita un tunnel SSH che accede alla VM da client esterni alla rete del cluster.

Abilita l'agente guest

Per abilitare l'agente ospite:

  1. Controlla la tua risorsa personalizzata VirtualMachine per verificare che sia configurata su abilita l'agente guest:

    kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
    

    Il campo spec.osType deve essere impostato sul sistema operativo della VM, Linux o Windows. La sezione spec.guestEnvironment non deve essere esplicitamente configurato come vuoto. Se la sezione è configurata come vuota (guestEnvironment: {}), puoi rimuoverlo completamente per attivare l'ospite un agente.

    La risorsa personalizzata VirtualMachine per la VM a cui vuoi accedere deve ha questo aspetto:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: sample-vm
    spec:
      compute:
        cpu:
          vcpus: 2
        memory:
          capacity: 4Gi
    ...
      osType: Linux
    ...
    
  2. Se necessario, usa kubectl edit per aggiornare la personalizzazione VirtualMachine risorsa.

  3. Per verificare che l'agente guest funzioni, controlla status nella VM personalizzata risorsa:

    kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
    

    Quando l'agente ospite funziona, vedi status: "True" per Condizioni GuestEnvironmentEnabled e GuestEnvironmentDataSynced.

    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:

  1. Crea un file manifest VirtualMachineAccessRequest, ad esempio vm-access-request.yaml, nell'editor di tua scelta:

    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 dell'accesso richiedere una risorsa.
    • VM_NAMESPACE: lo spazio dei nomi per alla VM a cui vuoi accedere.
    • VM_NAME: il nome della VM che vuoi per 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 file id_rsa.pub.
    • EXPIRATION_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 secondi
      • m per i minuti
      • h per le ore
      • d per i giorni
  2. Usa kubectl apply per creare VirtualMachineAccessRequest dal manifest. Ad esempio, se hai denominato il file manifest vm-access-request.yaml,

    kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
    

    Sostituisci quanto segue:

    • MANIFEST: il nome dell'accesso del file manifest della richiesta. Ad esempio, vm-access-request.yaml.
    • KUBECONFIG: il percorso il file kubeconfig del cluster che ospita la VM a cui stai accedendo.
  3. Per verificare che la configurazione della richiesta di accesso sia riuscita, controlla lo stato su VirtualMachineAccessRequest:

    kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
    

    Una volta completata la configurazione, la sezione status include state: 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 ospite viene abilitato quando crei una nuova VM e imposti il campo osType. Mentre questa funzione è in Anteprima, puoi disabilitarla modificando il VirtualMachine risorsa personalizzata. La disabilitazione dell'agente ospite disabilita la connessione senza password Accesso SSH alla VM.

Per disabilitare l'agente guest:

  1. Utilizza kubectl per arrestare la VM prima di apportare modifiche alla configurazione:

    kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
    
  1. Modifica la risorsa VM:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  2. Aggiorna la configurazione VirtualMachine per aggiungere un campo spec.guestEnvironment vuoto esplicitamente:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vm-example
      namespace: default
    spec:
      compute:
      ...
      osType: Linux
      guestEnvironment: {}
    
  3. Salva e chiudi il manifest aggiornato della VM nell'editor.

  4. Utilizza kubectl per avviare la VM:

    kubectl virt start VM_NAME --kubeconfig KUBECONFIG
    

Connettiti tramite un indirizzo IP

Se la tua VM ha un indirizzo IP accessibile e hai già le credenziali per 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 metodo:

SSH

  1. 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.

    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
    
  2. Connettiti alla VM utilizzando un client SSH:

    ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
    

    Sostituisci i seguenti valori:

    • USERNAME: il nome utente di sulla tua VM.
    • IP_ADDRESS: l'IP della VM ottenuta nel passaggio precedente.
    • PATH_TO_KEY: il percorso chiave SSH privata.

VNC o RDP

Computing di rete virtuale (VNC) e RDP (Remote Desktop Protocol) 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 per la connessione alla VM. Per informazioni su come attivare e utilizzare VNC o RDP, consulta la documentazione del sistema operativo guest.

Per accedere alla VM, devi disporre anche delle credenziali esistenti, come quelle definisci in creare credenziali utente iniziali quando crei una VM.

  1. 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.

    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
    
  2. Connettiti all'indirizzo IP della VM ottenuto nel passaggio precedente utilizzando un strumento client e la porta appropriata, come la porta VNC 5900 o la porta RDP 3389.

Connettiti tramite un servizio

Se la tua VM si connette all'istanza predefinita pod-network e non riesci a comunicare direttamente all'indirizzo IP della VM, esponila dietro un bilanciatore del carico Service.

  1. Crea un manifest Service, ad esempio my-service-load-balancer.yaml, nella un editor di tua scelta:

    nano my-service-load-balancer.yaml
    
  2. 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 tuo protocollo, ad esempio ssh, vnc o rdp.
    • PROTOCOL_TYPE: tipo di protocollo, ad esempio tcp per SSH e RDP oppure udp per VNC.
    • EXTERNAL_PORT: il numero di porta esterna da esporre e che utilizzi per connettersi.
    • TARGET_PORT: la porta di destinazione, ad esempio 22 per SSH.
  3. Salva e chiudi il manifest Service nell'editor.

  4. Crea Service utilizzando kubectl:

    kubectl apply -f my-service-load-balancer.yaml  --kubeconfig KUBECONFIG
    
  5. Ottieni 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
    
  6. Connettiti all'indirizzo EXTERNAL-IP del bilanciatore del carico con uno standard come l'uso di 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: indirizzo IP del carico con il bilanciatore del carico di rete passthrough esterno regionale.
    • PATH_TO_KEY: il percorso chiave SSH privata.

Connettiti direttamente tramite SSH

Se il client è connesso alla stessa rete fisica del cluster Anthos su nodi bare metal e non è necessario utilizzare tunnel SSH per per il cluster, puoi connetterti utilizzando kubectl virt ssh.

  1. 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 viene creato se non esiste sulla VM.
    • VM_NAME: il nome della VM.
  2. Dopo aver eseguito correttamente la connessione tramite SSH, la VM non è più necessaria 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, connettersi alla console della VM utilizzando il runtime VM nella console GDC. Questo metodo consente di aprire una console seriale. Una volta stabilita la connessione, ti verrà dato un comando anziché una console grafica.

  1. Per accedere a una VM Linux dalla console, usa 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 VM. Queste credenziali devono nella VM o essere applicata quando la VM viene creata. Se necessario, consulta sezione che segue creare credenziali utente iniziali quando crei una VM.

  2. Dopo aver eseguito correttamente la connessione alla console della VM e aver smesso di è necessaria la connessione, esci dalla sessione VM e dalla console:

    Ctrl + ]
    

Collegamento diretto tramite VNC

Puoi usare il comando kubectl virt vnc per aprire Virtual Network Computing (VNC) per accedere alle tue VM. Questo metodo funziona per le VM che eseguono sistema operativo guest Windows o Linux. Quando utilizzi kubectl virt vnc , il runtime VM su GDC apre VNC, quindi non è necessario attivare VNC nel sistema operativo guest.

Per accedere alla VM, devi disporre di credenziali esistenti, come quelle definisci in creare credenziali utente iniziali quando crei una VM.

  1. 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 tua VM.

    Quando richiesto, inserisci le credenziali utente per la VM.

  2. Dopo esserti connesso alla sessione VNC della VM se necessitano di una connessione, disconnettiti dalla VM per chiudere la connessione VNC.

Crea credenziali utente iniziali

Quando ti connetti alla VM utilizzando la console, devi specificare l'utente e credenziali. La procedura di creazione delle credenziali utente iniziali è diversa per Linux e i sistemi operativi guest Windows.

Sistema operativo guest Linux

Per le VM Linux, le credenziali utente possono essere integrate nelle immagini personalizzate da specificare quando crei una VM.

  • Usa il parametro --configure-initial-password con kubectl 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 per da creare sulla VM.
    • PASSWORD: password per l'utente .

    Questo comando di esempio crea una VM Linux che esegue Ubuntu 20.04. È ti consigliamo di modificare le credenziali iniziali dopo aver firmato nella VM.

Sistema operativo guest Windows

Per reimpostare la password di un utente esistente o per creare un nuovo password iniziale per un nuovo utente:

  1. Abilita l'agente guest nella VM Windows:

    1. Configura la VM per abilitare l'agente guest.

    2. Utilizza VNC o RDP per connetterti alla VM.

    3. Nella VM, vai all'unità guest agent. Nella maggior parte dei casi, si tratta di in auto per E:.

    4. Utilizza PowerShell per eseguire install.ps1.

      Questa operazione installa e avvia l'agente guest. L'agente ospite avvia automaticamente per i successivi riavvii delle VM.

    5. Chiudi la sessione remota.

  2. Sulla workstation di amministrazione, utilizza il seguente comando per reimpostare (o impostalo usi 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 che 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. In caso contrario specificato, viene utilizzato lo spazio dei nomi predefinito, default.

    Per reimpostare (o impostare) la password senza chiedere conferma, utilizza la funzione facoltativa --force flag. Quando utilizzi il flag --force, il prompt ti avvisa della presenza di le conseguenze della reimpostazione della password per un account esistente. Senza il flag --force, il comando ti chiede di confermare 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) la reimpostazione 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