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_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
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-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.
Variable Definició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 llamadomy-ssh-key
y un archivo de clave pública llamadomy-ssh-key.pub
.USERNAME
Tu nombre de usuario en la VM, como testuser
otestuser_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
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 privadaKEY_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:
Variable Definició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
otestuser_gmail_com
.VM_NAME
Nombre de la instancia de VM. Crea la clave:
kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
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.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
ocloudysanfrancisco
.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:
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.
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
VirtualMachineAccessRequest
muestra 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:22
para comprobar el enrutamiento.
Si tu
VirtualMachineAccessRequest
muestra el estadofailed
, 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.
Si el estado de tu
VirtualMachineAccessRequest
está en blanco, es posible que el entorno de invitado no se esté ejecutando.