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).
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.
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:
Inicia sesión y genera el archivo kubeconfig del servidor de la API Management si no tienes uno.
Usa la ruta al archivo kubeconfig del servidor de la API Management para sustituir
MANAGEMENT_API_SERVERen 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
En el menú de navegación, haz clic en Máquinas virtuales > Instancias.
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.
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:
Crea un par de claves SSH y un nombre de usuario.
En las estaciones de trabajo con SO, usa la utilidad
ssh-keygenpara 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 2048Sustituye las variables por las siguientes definiciones.
Variable Definición KEY_FILENAMEEl nombre del archivo de clave SSH. Por ejemplo, el nombre de archivo my-ssh-keygenera un archivo de clave privada llamadomy-ssh-keyy un archivo de clave pública llamadomy-ssh-key.pub.USERNAMETu nombre de usuario en la VM, como testuserotestuser_gmail_com.La utilidad
ssh-keygenguarda el archivo de clave privada en la ruta~/.ssh/KEY_FILENAMEy 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... testuserSube 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.yamlpara conceder acceso a la instancia de VM con la clave privadaKEY_FILENAMEy 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_NAMESustituye las variables con las siguientes definiciones:
Variable Definición VM_NAMESPACEEspacio de nombres de la VM. AR_NAMENombre de la solicitud de acceso. USERNAMETu nombre de usuario en la VM, como testuserotestuser_gmail_com.VM_NAMENombre de la instancia de VM. Crea la clave:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ create -f access_request.yamlPara comprobar el estado de tu solicitud de acceso, sigue estos pasos:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachineaccessrequests.virtualmachine.gdc.googSustituye
VM_NAMESPACEpor el espacio de nombres de la VM.El estado
configuredindica que puedes conectarte a la VM.Conéctate a la VM:
ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IPSustituye los siguientes valores:
PATH_TO_PRIVATE_KEYcon la ruta al archivo de clave SSH privada que corresponde a la clave pública que has añadido a la VM.USERNAMEcon el nombre de usuario que especificaste al crear la clave SSH. Por ejemplo,cloudysanfrancisco_example_comocloudysanfrancisco.EXTERNAL_IPcon 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:
Comprueba que la VM se esté ejecutando. Sustituye las variables editables por tus valores en el siguiente comando:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ get virtualmachines.virtualmachine.gdc.goog VM_NAMESi la VM no se está ejecutando, no podrás conectarte ni configurar nuevas solicitudes.
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.
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.
Si tu
VirtualMachineAccessRequestmuestra el estadoconfigured, comprueba que se cumplen los siguientes requisitos:- Has habilitado la transferencia de datos a tu VM en el puerto 22.
- Tu máquina se dirige a la VM. Por ejemplo, puedes usar el comando
curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22para comprobar el enrutamiento.
Si tu
VirtualMachineAccessRequestmuestra el estadofailed, consulta el estado completo y revisa el mensaje de error que indica por qué no se ha podido completar la solicitud:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n VM_NAMESPACE \ describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAMESustituye las variables editables del comando anterior por tus propios valores.
Si el estado de tu
VirtualMachineAccessRequestestá en blanco, es posible que el entorno de invitado no se esté ejecutando.