Este documento está dirigido a los propietarios de aplicaciones que ejecutan Google Distributed Cloud. En este documento se explica cómo conectarse a máquinas virtuales que usan el entorno de ejecución de máquinas virtuales en GDC. Puedes conectarte a las VMs directamente mediante una dirección IP o con herramientas integradas para acceder a SSH o a la consola.
Antes de empezar
Para completar este documento, necesitas tener acceso a los siguientes recursos:
- Una VM que se ejecuta en uno de tus clústeres. Si es necesario, crea una VM en Google Distributed Cloud.
- La herramienta de cliente
virtctl
instalada como complemento dekubectl
. Si es necesario, instala la herramienta de cliente virtctl.
Configurar el acceso SSH sin contraseña a máquinas virtuales
El acceso SSH directo y sin contraseña a tu máquina virtual se facilita mediante un agente invitado que instala el tiempo de ejecución de la máquina virtual en GDC. Entre otras tareas, el agente invitado instala y caduca las claves SSH. Esta función permite crear un túnel SSH para acceder a tu VM desde clientes que no estén en la red del clúster.
Habilitar el agente invitado
Para habilitar el agente invitado, sigue estos pasos:
Comprueba tu recurso personalizado de
VirtualMachine
para confirmar que está configurado para habilitar el agente invitado:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
El campo
spec.osType
debe configurarse con el sistema operativo de tu máquina virtual,Linux
oWindows
. La secciónspec.guestEnvironment
no debe configurarse explícitamente como vacía. Si la sección está configurada como vacía (guestEnvironment: {}
), puedes quitarla por completo para habilitar el agente invitado.Tu recurso personalizado
VirtualMachine
de la VM a la que quieras acceder debería tener este aspecto:apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...
Si es necesario, usa
kubectl edit
para actualizar el recurso personalizadoVirtualMachine
.Para verificar que el agente invitado funciona, compruebe el
status
en su recurso personalizado de VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
Cuando el agente invitado está funcionando, verás
status: "True"
para las condicionesGuestEnvironmentEnabled
yGuestEnvironmentDataSynced
.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 ...
Habilitar el acceso SSH sin contraseña
Para habilitar el acceso SSH sin contraseña a tu VM, sigue estos pasos:
Crea un archivo de manifiesto
VirtualMachineAccessRequest
, comovm-access-request.yaml
, en el editor que prefieras: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
Haz los cambios siguientes:
VMAR_NAME
: nombre del recurso access request.VM_NAMESPACE
: el espacio de nombres de la máquina virtual a la que quieras acceder.VM_NAME
: el nombre de la VM a la que quieres acceder.USERNAME
: nombre de usuario del usuario que accede a la VM.PUBLIC_SSH_KEY
: la clave pública para el acceso SSH. Normalmente, se trata del contenido del archivoid_rsa.pub
.EXPIRATION_TIME
: el campottl
(tiempo de vida) especifica cuánto tiempo es válida la clave SSH.Por ejemplo, si especifica
30m
, la clave SSH caducará al cabo de 30 minutos.Esta marca usa las siguientes unidades:
s
segundosm
durante minutosh
durante horasd
durante días
Usa
kubectl apply
para crear elVirtualMachineAccessRequest
a partir del archivo de manifiesto. Por ejemplo, si ha llamado al archivo de manifiestovm-access-request.yaml
,kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
Haz los cambios siguientes:
MANIFEST
: el nombre del archivo de manifiesto de la solicitud de acceso. Por ejemplo,vm-access-request.yaml
.KUBECONFIG
: la ruta al archivo kubeconfig del clúster que aloja la VM a la que estás accediendo.
Para verificar que la configuración de la solicitud de acceso se ha realizado correctamente, comprueba el estado de la
VirtualMachineAccessRequest
:kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
Si la configuración se realiza correctamente, la sección
status
incluye lo siguiente: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
Inhabilitar el agente invitado
Cuando creas una máquina virtual y defines el campo osType
, el agente invitado se habilita.
Mientras esta función esté en versión preliminar, puedes inhabilitarla editando el recurso personalizado VirtualMachine
. Si inhabilitas el agente invitado, se inhabilitará el acceso SSH sin contraseña a tu VM.
Para inhabilitar el agente invitado, sigue estos pasos:
Usa
kubectl
para detener tu VM antes de hacer cambios en la configuración:kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
Edita el recurso de la VM:
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Actualice la configuración de
VirtualMachine
para añadir unspec.guestEnvironment
vacío de forma explícita:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}
Guarda y cierra el manifiesto de la VM actualizado en tu editor.
Usa
kubectl
para iniciar la VM:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
Conectarse mediante una dirección IP
Si tu VM tiene una dirección IP accesible y ya tienes las credenciales para acceder a ella, puedes conectarte mediante un protocolo como SSH, VNC o RDP.
Conectarse a través de una dirección IP
Si puedes conectarte directamente a la dirección IP de tu VM, utiliza uno de los siguientes métodos:
SSH
Obtén los detalles de tu VM para ver su dirección IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sustituye los siguientes valores:
VM_NAME
: nombre de la VM.VM_NAMESPACE
: el espacio de nombres de tu VM.
En el siguiente ejemplo de salida se muestra la información de la VM y la dirección IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Conéctate a tu VM mediante un cliente SSH:
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
Sustituye los siguientes valores:
USERNAME
: el nombre de usuario de una cuenta de tu máquina virtual.IP_ADDRESS
: la dirección IP de tu VM obtenida en el paso anterior.PATH_TO_KEY
: la ruta a la clave SSH privada.
VNC o RDP
Virtual Network Computing (VNC) y Remote Desktop Protocol (RDP) te permiten usar la consola gráfica para acceder a tu VM. Cuando usas una dirección IP, debes habilitar VNC o RDP en el SO invitado para poder usar cualquiera de los dos y conectarte a la VM. Para obtener información sobre cómo habilitar y usar VNC o RDP, consulta la documentación de tu SO invitado.
También necesitas credenciales para iniciar sesión en la VM, como las que definas para crear las credenciales de usuario iniciales al crear una VM.
Obtén los detalles de tu VM para ver su dirección IP:
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sustituye los siguientes valores:
VM_NAME
: nombre de la VM.VM_NAMESPACE
: el espacio de nombres de tu VM.
En el siguiente ejemplo de salida se muestra la información de la VM y la dirección IP:
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
Conéctate a la dirección IP de tu VM obtenida en el paso anterior mediante una herramienta de cliente y el puerto adecuado, como el puerto VNC
5900
o el puerto RDP3389
.
Conectar con un servicio
Si tu máquina virtual se conecta a pod-network
predeterminado y no puedes comunicarte directamente con la dirección IP de tu máquina virtual, expón la máquina virtual detrás de un balanceador de carga Service
.
Crea un archivo de manifiesto
Service
, comomy-service-load-balancer.yaml
, en el editor que prefieras:nano my-service-load-balancer.yaml
Copia y pega el siguiente manifiesto 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
En este tipo de manifiesto
Service
, sustituye los siguientes valores:VM_NAME
: el nombre de tu VM que se expondrá para el acceso remoto.PORT_NAME
: el nombre de tu protocolo, comossh
,vnc
ordp
.PROTOCOL_TYPE
: el tipo de protocolo, comoTCP
para SSH y RDP, oUDP
para VNC.EXTERNAL_PORT
: número de puerto externo que se va a exponer y que se usa para conectarse.TARGET_PORT
: el puerto de destino, como22
para SSH.
Guarda y cierra el manifiesto de
Service
en tu editor.Crea el
Service
conkubectl
:kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
Obtén la dirección
EXTERNAL-IP
del servicio del balanceador de carga:kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
Se muestra la dirección IP del balanceador de carga, tal como se muestra en el siguiente ejemplo de salida:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20h
Conéctate a la dirección
EXTERNAL-IP
del balanceador de carga con un protocolo estándar, como un cliente SSH:ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
Sustituye los siguientes valores:
USERNAME
: el nombre de usuario de una cuenta de tu máquina virtual.LOAD_BALANCER_IP_ADDRESS
: la dirección IP de tu balanceador de carga.PATH_TO_KEY
: la ruta a la clave SSH privada.
Conectarse directamente mediante SSH
Si tu cliente está conectado a la misma red física que los nodos de tu clúster de hardware desnudo y no necesitas usar túneles SSH para conectarte al clúster, puedes conectarte mediante kubectl virt ssh
.
Para usar SSH y conectar una máquina virtual Linux desde la consola con el complemento
virtctl
, sigue estos pasos:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Sustituye los siguientes valores:
USERNAME
: el nombre de usuario para acceder a tu VM. Esta cuenta se crea si no existe en la VM.VM_NAME
: el nombre de tu VM.
Una vez que te hayas conectado correctamente a la VM mediante SSH y ya no necesites la conexión, cierra la sesión SSH:
exit
Conectarse directamente mediante la consola
Si no tienes conectividad de red directa con tu máquina virtual Linux para acceder mediante SSH, conéctate a la consola de la máquina virtual mediante el tiempo de ejecución de la máquina virtual en la consola de GDC. Este método abre una consola serie. Cuando se establece la conexión, se te proporciona un símbolo del sistema en lugar de una consola gráfica.
Para acceder a una VM de Linux desde la consola, usa el complemento
virtctl
:kubectl virt console VM_NAME --kubeconfig KUBECONFIG
Sustituye
VM_NAME
por el nombre de tu VM.Cuando se te pida, introduce las credenciales de usuario de tu VM. Estas credenciales deben existir en la VM o aplicarse cuando se cree la VM. Si es necesario, consulta la sección siguiente para crear las credenciales de usuario iniciales al crear una VM.
Cuando te hayas conectado correctamente a la consola de la VM y ya no necesites la conexión, sal de la sesión de la VM y de la consola:
Ctrl + ]
Conectarse directamente mediante VNC
Puedes usar el comando kubectl virt vnc
para abrir la consola gráfica de Virtual Network Computing (VNC) y acceder a tus VMs. Este método funciona en máquinas virtuales que ejecutan un SO invitado Windows o Linux. Cuando usas el comando kubectl virt vnc
, VM Runtime en GDC abre VNC por ti, por lo que no es necesario que habilites VNC en el SO invitado.
Necesitas credenciales para iniciar sesión en la VM, como las que definas para crear credenciales de usuario iniciales al crear una VM.
Para acceder a una VM mediante VNC, usa el complemento
virtctl
:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
Sustituye
VM_NAME
por el nombre de tu VM.Cuando se te pida, introduce las credenciales de usuario de tu VM.
Una vez que te hayas conectado correctamente a la sesión VNC de la VM y ya no necesites la conexión, cierra la sesión de la VM para cerrar la conexión VNC.
Crear credenciales de usuario iniciales
Cuando te conectas a tu VM mediante la consola, debes especificar las credenciales del usuario. El proceso para crear las credenciales de usuario iniciales es diferente en los sistemas operativos invitados Linux y Windows.
Sistema operativo invitado Linux
En el caso de las VMs Linux, las credenciales de usuario se pueden incluir en las imágenes personalizadas o se pueden especificar al crear una VM.
Usa el parámetro
--configure-initial-password
con el comandokubectl virt create
:kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIG
Sustituye los siguientes valores:
VM_NAME
: nombre de la VM.USERNAME
: nombre de usuario de la cuenta que se va a crear en la VM.PASSWORD
: contraseña de la cuenta de usuario.
Este comando de ejemplo crea una VM Linux que ejecuta Ubuntu 20.04. Te recomendamos que cambies las credenciales iniciales después de iniciar sesión por primera vez en la VM.
Sistema operativo invitado Windows
Sigue estos pasos para restablecer la contraseña de un usuario o crear la contraseña inicial de un nuevo usuario:
Habilita el agente invitado en tu VM Windows:
Configura la VM para habilitar el agente invitado.
Usa VNC o RDP para conectarte a la VM.
En la VM, ve a la unidad
guest agent
. En la mayoría de los casos, se trata de driveE:
.Usa PowerShell para ejecutar
install.ps1
.De esta forma, se instala y se inicia el agente invitado. El agente invitado se inicia automáticamente en los reinicios posteriores de la VM.
Cierra la sesión remota.
En tu estación de trabajo de administrador, usa el siguiente comando para restablecer (o definir, si usas un nuevo nombre de usuario) la contraseña de la VM de Windows:
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
Haz los cambios siguientes:
VM_NAME
: el nombre de la VM.USERNAME
: el nombre de usuario cuya contraseña quieras restablecer o definir. Si el nombre de usuario es nuevo, el comando crea una cuenta de Windows y define la contraseña inicial.VM_NAMESPACE
: (Opcional) el espacio de nombres de la VM. Esta marca es opcional. Si no se especifica, se usa el espacio de nombres predeterminado,default
.
Para restablecer (o definir) una contraseña sin que se te pida confirmación, usa la marca opcional
--force
. Cuando usas la marca--force
, la petición te avisa de las consecuencias de restablecer la contraseña de una cuenta. Sin la marca--force
, el comando te pedirá que confirmes el cambio de contraseña con el siguiente texto: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)?
Después de confirmar (o forzar) el cambio de contraseña, el comando devuelve la nueva contraseña de la máquina virtual y el nombre de usuario especificados:
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD
Siguientes pasos
- Gestionar el estado de la alimentación de una VM en Google Distributed Cloud.
- Edita una máquina virtual en Google Distributed Cloud.
- Consulta los registros de la consola de la VM en Google Distributed Cloud.