Connettiti a una VM

Google Distributed Cloud (GDC) air-gapped utilizza l'autenticazione SSH basata su chiavi per stabilire connessioni alle istanze di macchine virtuali (VM). Per impostazione predefinita, le password non sono configurate per gli utenti locali sulle VM con un sistema operativo (OS).

Prima di iniziare

Prima di connetterti a una VM, devi soddisfare i seguenti prerequisiti:

  • Configura una risorsa personalizzata ProjectNetworkPolicy (PNP) nel progetto in cui si trova la VM.
    • Se configuri un PNP nel progetto, puoi accedere alla VM al di fuori del progetto o dell'organizzazione.
    • Per diagnosticare se non hai un PNP, chiedi all'operatore dell'infrastruttura (IO).
  • Accesso di login al cluster. Segui i passaggi della CLI in Accedi per accedere al cluster.
  • Per utilizzare i comandi dell'interfaccia a riga di comando (CLI) gdcloud, assicurati di aver scaricato, installato e configurato la CLI gdcloud. Tutti i comandi per Distributed Cloud utilizzano la CLI gdcloud o kubectl e richiedono un ambiente del sistema operativo.

    Recupera il percorso del file kubeconfig

    Per eseguire comandi sul server API Management, assicurati di disporre delle seguenti risorse:

    1. Accedi e genera il file kubeconfig per il server API Management se non ne hai uno.

    2. Utilizza il percorso del file kubeconfig del server API Management per sostituire MANAGEMENT_API_SERVER in queste istruzioni.

    Richiedere autorizzazioni e accesso

    Per eseguire le attività elencate in questa pagina, devi disporre del ruolo Amministratore macchina virtuale progetto. Segui i passaggi per verificare di disporre del ruolo Amministratore VirtualMachine progetto (project-vm-admin) nello spazio dei nomi del progetto in cui si trova la VM.

    Per le operazioni sulle VM che utilizzano la console GDC o gcloud CLI, chiedi all'amministratore IAM del progetto di assegnarti sia il ruolo Project VirtualMachine Admin sia il ruolo Project Viewer (project-viewer).

    Stabilisci una connessione VM

    Questa sezione descrive come stabilire una connessione a una VM con un sistema operativo specifico.

    Connettiti a una VM

    Per stabilire una connessione a una VM con un sistema operativo specifico, utilizza la console GDC, gcloud CLI o l'API Virtual Machine Manager.

    Console

    1. Nel menu di navigazione, fai clic su Virtual Machines > Instances.

    2. Nell'elenco delle VM, individua la riga della VM in esecuzione a cui vuoi connetterti. Nella colonna Connetti, fai clic su SSH.

    3. Si apre un terminale del browser SSH. Inserisci un comando nella shell o fai clic su FTP per navigare nella struttura dei file e caricare i file.

    gdcloud

    Connettiti a una VM utilizzando SSH eseguendo il comando gdcloud compute ssh

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    Sostituisci le seguenti variabili:

    • VM_NAME: il nome della VM.
    • PROJECT_ID: l'ID del progetto che contiene la VM.

    Se hai impostato proprietà predefinite per la CLI, puoi omettere il flag --project da questo comando. Ad esempio:

    gdcloud compute ssh VM_NAME
    

    API

    Connettiti a una VM:

    • Apri un terminale.
    • Crea una coppia di chiavi SSH.
    • Carica la chiave pubblica e il nome utente con un valore Time To Live (TTL).

    GDC recupera la chiave SSH e il nome utente e crea un account utente con il nome utente. Sulle VM, GDC memorizza la chiave pubblica nel file ~/.ssh/authorized_keys dell'utente sulla VM.

    Per connetterti a una VM dalla riga di comando, completa i seguenti passaggi:

    1. Crea una coppia di chiavi SSH e un nome utente.

      Sulle workstation OS, utilizza l'utilità ssh-keygen per creare una nuova coppia di chiavi SSH. Il seguente esempio di codice crea una coppia di chiavi RSA (Rivest-Shamir-Adleman):

      ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
      

      Sostituisci le variabili utilizzando le seguenti definizioni.

      VariabileDefinizione
      KEY_FILENAME Il nome del file di chiave SSH. Ad esempio, il nome file my-ssh-key genera un file di chiavi private denominato my-ssh-key e un file di chiavi pubbliche denominato my-ssh-key.pub.
      USERNAME Il tuo nome utente sulla VM, ad esempio testuser o testuser_gmail_com.

      L'utilità ssh-keygen salva il file della chiave privata nel percorso ~/.ssh/KEY_FILENAME e il file della chiave pubblica nel percorso ~/.ssh/KEY_FILENAME.pub.

      Una chiave pubblica per l'utente, testuser, è simile al seguente esempio:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Carica la chiave nella VM e crea una risorsa Kubernetes con la chiave pubblica, il nome utente e il valore durata (TTL) per la chiave.

      L'esempio seguente utilizza un file access_request.yaml per concedere l'accesso all'istanza VM con la chiave privata KEY_FILENAME e un valore TTL di dieci minuti:

      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
      

      Sostituisci le variabili utilizzando le seguenti definizioni:

      VariabileDefinizione
      VM_NAMESPACE Lo spazio dei nomi per la VM.
      AR_NAME Il nome della richiesta di accesso.
      USERNAME Il tuo nome utente sulla VM, ad esempio testuser o testuser_gmail_com.
      VM_NAME Il nome dell'istanza VM.
    3. Crea la chiave:

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. Controlla lo stato della tua richiesta di accesso:

      kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Sostituisci VM_NAMESPACE con lo spazio dei nomi della VM.

      Uno stato configured indica che puoi connetterti alla VM.

    5. Connettiti alla VM:

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Sostituisci i seguenti valori:

      • PATH_TO_PRIVATE_KEY con il percorso del file della chiave SSH privata corrispondente alla chiave pubblica che hai aggiunto alla VM.
      • USERNAME con il nome utente specificato durante la creazione della chiave SSH. Ad esempio, cloudysanfrancisco_example_com o cloudysanfrancisco.
      • EXTERNAL_IP con l'indirizzo IP in entrata esterno della VM.

    Risoluzione dei problemi

    Questa sezione descrive come risolvere i problemi che potrebbero verificarsi durante la connessione a un'istanza VM dopo la creazione della richiesta di accesso.

    Segui questi passaggi per identificare i possibili problemi:

    1. Verifica che la VM sia in esecuzione. Sostituisci le variabili modificabili con i tuoi valori nel seguente comando:

      kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Se la VM non è in esecuzione, non puoi connetterti o configurare nuove richieste.

    2. Verifica che la VM sia in esecuzione da alcuni minuti. Se la VM è appena stata avviata, i servizi richiesti per l'accesso SSH potrebbero non essere ancora in esecuzione. In genere, vengono eseguiti entro cinque minuti dall'avvio.

    3. Verifica di non aver superato il valore TTL nella richiesta di accesso. La chiave viene rimossa dopo che il tempo raggiunge il valore TTL.

    4. Se il tuo VirtualMachineAccessRequest mostra lo stato configured, verifica i seguenti requisiti:

      1. Hai attivato il trasferimento dei dati in alla tua VM sulla porta 22.
      2. La tua macchina esegue il routing alla VM. Ad esempio, puoi utilizzare il comando
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 per controllare il routing.
    5. Se il tuo VirtualMachineAccessRequest mostra lo stato failed, visualizza lo stato completo e rivedi il messaggio di errore che indica la causa del mancato completamento della richiesta:

      kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      Sostituisci le variabili modificabili nel comando precedente con i tuoi valori.

    6. Se lo stato di VirtualMachineAccessRequest è vuoto, l'ambiente guest potrebbe non essere in esecuzione.