Conectarse a una VM

Google Distributed Cloud (GDC) air-gapped usa la autenticación SSH basada en claves para establecer conexiones con instancias de máquinas virtuales (VM). De forma predeterminada, no se configuran contraseñas para los usuarios locales en las VMs con un sistema operativo (SO).

Antes de empezar

Antes de conectarte a una VM, debes cumplir los siguientes requisitos previos:

  • Habilita la gestión de accesos. No puedes continuar si la gestión de acceso no está habilitada en el entorno de invitado. De forma predeterminada, la gestión de acceso está habilitada en las máquinas virtuales nuevas.
  • Habilita el acceso externo a la VM para cualquier peer en el puerto 22 del protocolo de control de la transmisión (TCP).
  • Configura un recurso personalizado ProjectNetworkPolicy (PNP) en el proyecto en el que se encuentra la VM.
    • Si configuras un PNP en el proyecto, podrás acceder a la VM fuera del proyecto o de la organización.
    • Para diagnosticar si no tienes un PNP, ponte en contacto con tu operador de infraestructura.
  • Acceso para iniciar sesión en el clúster. Sigue los pasos de la CLI que se indican en la sección Iniciar sesión para iniciar sesión en el clúster.
  • Para usar los comandos de la gdcloud interfaz de línea de comandos (CLI), asegúrate de haber descargado, instalado y configurado la gdcloud CLI. Todos los comandos de Distributed Cloud usan la CLI gdcloud o kubectl y requieren un entorno de sistema operativo.

    Obtener la ruta del archivo kubeconfig

    Para ejecutar comandos en el servidor de la API Management, asegúrate de tener los siguientes recursos:

    1. Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.

    2. Usa la ruta al archivo kubeconfig del servidor de la API Management para sustituir MANAGEMENT_API_SERVER en estas instrucciones.

    Solicitar permisos y acceso

    Para realizar las tareas que se indican en esta página, debes tener el rol de administrador de máquinas virtuales de proyecto. Sigue los pasos para verificar que tienes el rol de administrador de máquinas virtuales de proyecto (project-vm-admin) en el espacio de nombres del proyecto en el que reside la VM.

    Para realizar operaciones con VMs mediante la consola de GDC o la CLI de gdcloud, pide al administrador de gestión de identidades y accesos de tu proyecto que te asigne el rol Administrador de VirtualMachine de proyecto y el rol Lector de proyectos (project-viewer).

    Establecer una conexión de VM

    En esta sección se describe cómo establecer una conexión con una VM que tenga un sistema operativo específico.

    Conectarse a una VM

    Para establecer una conexión con una VM con un SO específico, usa la consola de GDC, la CLI de gdcloud o la API Virtual Machine Manager.

    Consola

    1. En el menú de navegación, haz clic en Máquinas virtuales > Instancias.

    2. En la lista de VMs, busca la fila de la VM en ejecución a la que quieras conectarte. En la columna Conectar, haz clic en SSH.

    3. Se abrirá una terminal del navegador SSH. Introduce cualquier comando en el shell o haz clic en FTP para desplazarte por la estructura de archivos y subir archivos.

    gdcloud

    Conectarse a una VM mediante SSH ejecutando el comando gdcloud compute ssh

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    Sustituye las siguientes variables:

    • VM_NAME: el nombre de la VM.
    • PROJECT_ID: el ID del proyecto que contiene la máquina virtual.

    Si has definido propiedades predeterminadas para la CLI, puedes omitir la marca --project en este comando. Por ejemplo:

    gdcloud compute ssh VM_NAME
    

    API

    Conéctate a una VM:

    • Abre la terminal.
    • Crea un par de claves SSH.
    • Sube la clave pública y el nombre de usuario con un valor de tiempo de vida (TTL).

    GDC obtiene la clave SSH y el nombre de usuario, y crea una cuenta de usuario con el nombre de usuario. En las VMs, GDC almacena la clave pública en el archivo ~/.ssh/authorized_keys del usuario en la VM.

    Sigue estos pasos para conectarte a una VM desde la línea de comandos:

    1. Crea un par de claves SSH y un nombre de usuario.

      En las estaciones de trabajo con SO, usa la utilidad ssh-keygen para crear un par de claves SSH. En el siguiente ejemplo de código se crea un par de claves RSA (Rivest–Shamir–Adleman):

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

      Sustituye las variables por las siguientes definiciones.

      VariableDefinición
      KEY_FILENAME El nombre del archivo de clave SSH. Por ejemplo, el nombre de archivo my-ssh-key genera un archivo de clave privada llamado my-ssh-key y un archivo de clave pública llamado my-ssh-key.pub.
      USERNAME Tu nombre de usuario en la VM, como testuser o testuser_gmail_com.

      La utilidad ssh-keygen guarda el archivo de clave privada en la ruta ~/.ssh/KEY_FILENAME y el archivo de clave pública en la ruta ~/.ssh/KEY_FILENAME.pub.

      La clave pública del usuario, testuser, es similar a la del siguiente ejemplo:

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. Sube tu clave a la VM y crea un recurso de Kubernetes con tu clave pública, nombre de usuario y valor de tiempo de vida (TTL) de la clave.

      En el siguiente ejemplo se usa un archivo access_request.yaml para conceder acceso a la instancia de VM con la clave privada KEY_FILENAME y un valor de TTL de diez minutos:

      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
      

      Sustituye las variables con las siguientes definiciones:

      VariableDefinición
      VM_NAMESPACE Espacio de nombres de la VM.
      AR_NAME Nombre de la solicitud de acceso.
      USERNAME Tu nombre de usuario en la VM, como testuser o testuser_gmail_com.
      VM_NAME Nombre de la instancia de VM.
    3. Crea la clave:

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. Para comprobar el estado de tu solicitud de acceso, sigue estos pasos:

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

      Sustituye VM_NAMESPACE por el espacio de nombres de la VM.

      El estado configured indica que puedes conectarte a la VM.

    5. Conéctate a la VM:

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      Sustituye los siguientes valores:

      • PATH_TO_PRIVATE_KEY con la ruta al archivo de clave SSH privada que corresponde a la clave pública que has añadido a la VM.
      • USERNAME con el nombre de usuario que especificaste al crear la clave SSH. Por ejemplo, cloudysanfrancisco_example_com o cloudysanfrancisco.
      • EXTERNAL_IP con la dirección IP de entrada externa de la VM.

    Solución de problemas

    En esta sección se describe cómo solucionar los problemas que pueden surgir al conectarse a una instancia de VM después de crear la solicitud de acceso.

    Sigue estos pasos para identificar posibles problemas:

    1. Comprueba que la VM se esté ejecutando. Sustituye las variables editables por tus valores en el siguiente comando:

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

      Si la VM no se está ejecutando, no podrás conectarte ni configurar nuevas solicitudes.

    2. Comprueba que la VM se haya ejecutado durante unos minutos. Si la VM acaba de iniciarse, es posible que los servicios necesarios para acceder por SSH aún no se estén ejecutando. Normalmente, se ejecutan en los cinco minutos posteriores al arranque.

    3. Comprueba que no hayas superado el valor de TTL en la solicitud de acceso. La clave se elimina cuando el tiempo alcanza el valor de TTL.

    4. Si tu VirtualMachineAccessRequest muestra el estado configured, comprueba que se cumplen los siguientes requisitos:

      1. Has habilitado la transferencia de datos a tu VM en el puerto 22.
      2. Tu máquina se dirige a la VM. Por ejemplo, puedes usar el comando
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 para comprobar el enrutamiento.
    5. Si tu VirtualMachineAccessRequest muestra el estado failed, consulta el estado completo y revisa el mensaje de error que indica por qué no se ha podido completar la solicitud:

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

      Sustituye las variables editables del comando anterior por tus propios valores.

    6. Si el estado de tu VirtualMachineAccessRequest está en blanco, es posible que el entorno de invitado no se esté ejecutando.