Este documento está dirigido a propietarios de aplicaciones que ejecutan GKE en Bare Metal. En este documento, se muestra cómo conectarse a las máquinas virtuales (VM) que usan el entorno de ejecución de VM en GDC. Puedes conectarte directamente a las VM mediante una dirección IP o herramientas integradas para acceder a SSH o a la consola.
Antes de comenzar
Para completar este documento, necesitas acceso a los siguientes recursos:
- Una VM que se ejecuta en uno de los clústeres. Si es necesario, crea una VM en GDCV para Bare Metal.
- La herramienta de cliente
virtctl
instalada como un complemento parakubectl
. Si es necesario, instala la herramienta cliente de virtctl.
Configurar el acceso SSH sin contraseña a las VMs
El acceso SSH directo y sin contraseña a la VM se proporciona mediante un agente invitado que instala el entorno de ejecución de VM en GDC. Entre otras tareas, el agente invitado instala y vence las claves SSH. Esta función habilita un túnel SSH para acceder a tu VM desde clientes fuera de la red del clúster.
Habilita el agente invitado
Para habilitar el agente invitado, haz lo siguiente:
Verifica tu recurso personalizado
VirtualMachine
a fin de confirmar que esté configurado para habilitar el agente invitado:kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
El campo
spec.osType
debe configurarse como el sistema operativo de la VM,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.El recurso personalizado
VirtualMachine
de la VM a la que deseas acceder debería verse de la siguiente manera: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 funcione, consulta
status
en tu recurso personalizado de VM:kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
Cuando el agente invitado esté trabajando, 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 en 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
Reemplaza lo siguiente:
VMAR_NAME
: Es el nombre del recurso de solicitud de acceso.VM_NAMESPACE
: Es el espacio de nombres de la VM a la que deseas acceder.VM_NAME
: Es el nombre de la VM a la que deseas acceder.USERNAME
: Es el nombre de usuario del usuario que accede a la VM.PUBLIC_SSH_KEY
: Es la clave pública para el acceso SSH. Por lo general, este es el contenido del archivoid_rsa.pub
.EXPIRATION_TIME
: El campottl
(tiempo de actividad) especifica el tiempo de validez de la Llave SSH.Por ejemplo, si especificas
30m
, la clave SSH vence después de 30 minutos.En esta marca, se usan las siguientes unidades:
s
para los segundosm
para los minutosh
para las horasd
para los días
Usa
kubectl apply
para crear elVirtualMachineAccessRequest
a partir del archivo de manifiesto. Por ejemplo, si le asignaste el nombrevm-access-request.yaml
a tu archivo de manifiesto,kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
Reemplaza lo siguiente:
MANIFEST
: Es el nombre del archivo de manifiesto de la solicitud de acceso. Por ejemplo,vm-access-request.yaml
KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig del clúster que aloja la VM a la que accedes.
Para verificar que la configuración de tu solicitud de acceso se haya realizado de forma correcta, verifica el estado de
VirtualMachineAccessRequest
:kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
Cuando la configuración se completa de forma correcta, la sección
status
incluyestate: 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
Inhabilita el agente invitado
Cuando creas una VM nueva y configuras el campo osType
, el agente invitado se habilita.
Mientras esta función se encuentra en versión preliminar, puedes inhabilitarla si editas el recurso personalizado VirtualMachine
. Si inhabilitas el agente invitado, se inhabilita el acceso SSH sin contraseña a tu VM.
Para inhabilitar el agente invitado, haz lo siguiente:
Usa
kubectl
para detener la VM antes de realizar cambios en la configuración:kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
Edita tu recurso de VM:
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
Actualiza la configuración de
VirtualMachine
para agregar de manera explícita unspec.guestEnvironment
vacío: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 VM actualizado en el editor.
Usa
kubectl
para iniciar la VM:kubectl virt start VM_NAME --kubeconfig KUBECONFIG
Conéctate con una dirección IP
Si tu VM tiene una dirección IP accesible y ya tienes las credenciales para acceder a la VM, puedes conectarte mediante un protocolo, como SSH, VNC o RDP.
Conéctate a través de la dirección IP
Si puedes conectarte directamente a la dirección IP de tu VM, usa 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
Reemplaza los siguientes valores:
VM_NAME
: el nombre de tu VM.VM_NAMESPACE
: Es el espacio de nombres de tu VM.
En el siguiente resultado de ejemplo, 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 VM con un cliente SSH:
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
Reemplaza los siguientes valores:
USERNAME
: Es el nombre de usuario de una cuenta en tu VM.IP_ADDRESS
: La dirección IP de la VM que obtuviste en el paso anteriorPATH_TO_KEY
: Es la ruta de acceso a la clave SSH privada.
VNC o RDP
El procesamiento de red virtual (VNC) y el protocolo de escritorio remoto (RDP) te permiten usar la consola gráfica para acceder a la VM. Cuando usas una dirección IP, debes habilitar VNC o RDP en el SO invitado antes de poder usar cualquiera de ellos para 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 existentes para acceder a la VM, como las que defines para crear credenciales de usuario iniciales cuando creas 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
Reemplaza los siguientes valores:
VM_NAME
: el nombre de tu VM.VM_NAMESPACE
: Es el espacio de nombres de tu VM.
En el siguiente resultado de ejemplo, 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 con una herramienta cliente y el puerto adecuado, como el puerto VNC
5900
o el puerto RDP3389
.
Conéctate a través de un objeto Service
Si tu VM se conecta a pod-network
predeterminada y no puedes comunicarte directamente con la dirección IP de tu VM, expón la VM detrás de un balanceador de cargas Service
.
Crea un manifiesto
Service
, comomy-service-load-balancer.yaml
, en el editor que elijas: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
, reemplaza los siguientes valores:VM_NAME
: el nombre de tu VM que se va a exponer 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
: el número de puerto externo que se va a exponer y que usas para conectarte.TARGET_PORT
: el puerto de destino, como22
para SSH.
Guarda y cierra el manifiesto
Service
en tu editor.Crea
Service
mediantekubectl
:kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
Obtén la dirección
EXTERNAL-IP
del servicio del balanceador de cargas:kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
Se muestra la dirección IP del balanceador de cargas, como se muestra en el siguiente resultado de ejemplo:
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 cargas con un protocolo estándar, como el uso de un cliente SSH:ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
Reemplaza los siguientes valores:
USERNAME
: el nombre de usuario de una cuenta en tu VM.LOAD_BALANCER_IP_ADDRESS
: la dirección IP de tu balanceador de cargas.PATH_TO_KEY
: Es la ruta de acceso a la clave SSH privada.
Conéctate directamente con SSH
Si tu cliente está conectado a la misma red física que tu clúster de Anthos alojado en nodos de equipos físicos y no necesitas el uso de túneles SSH para conectarte al clúster, puedes conectarte mediante kubectl virt ssh
.
Si quieres usar SSH para conectar una VM de Linux desde la consola con el complemento
virtctl
, sigue estos pasos:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
Reemplaza 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.
Después de conectarte de forma correcta con SSH a la VM y de que ya no necesites la conexión, sal de la sesión de SSH:
exit
Conéctate directamente con la consola
Si no tienes conectividad de red directa a tu VM de Linux para el acceso SSH, conéctate a la consola de la VM mediante el entorno de ejecución de la VM en la consola de GDC. Este método abre una consola en serie. Luego de 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
Reemplaza
VM_NAME
por el nombre de tu VM.Cuando se te solicite, ingresa las credenciales de usuario para la VM. Estas credenciales deben existir en la VM o aplicarse cuando se crea la VM. Si es necesario, consulta la siguiente sección para crear credenciales de usuario iniciales cuando crees una VM.
Después de conectarte de forma correcta a la consola de la VM y de que ya no necesites la conexión, sal de la sesión de VM y de la consola:
Ctrl + ]
Conéctate directamente con VNC
Puedes usar el comando kubectl virt vnc
para abrir la consola gráfica de Procesamiento de red virtual (VNC) y acceder a tus VM. Este método funciona para VM que ejecutan un SO invitado de Windows o Linux. Cuando usas el comando kubectl virt vnc
, VM Runtime on GDC abre VNC por ti, por lo que no es necesario que habilites VNC en el SO invitado.
Necesitas credenciales existentes para acceder a la VM, como las que defines para crear credenciales de usuario iniciales cuando creas una VM.
Para acceder a una VM con VNC, usa el complemento
virtctl
:kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
Reemplaza
VM_NAME
por el nombre de tu VM.Cuando se te solicite, ingresa las credenciales de usuario para la VM.
Después de conectarte de forma correcta a la sesión de VNC de la VM y de que ya no necesites la conexión, sal de la VM para cerrar la conexión.
Crea credenciales de usuario iniciales
Cuando te conectas a tu VM con la consola, debes especificar las credenciales del usuario. El proceso de creación de credenciales de usuario iniciales es diferente para los sistemas operativos invitados Linux y Windows.
SO invitado de Linux
Para las VM de Linux, las credenciales de usuario pueden integrarse en tus imágenes personalizadas o se pueden especificar cuando creas 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
Reemplaza los siguientes valores:
VM_NAME
: el nombre de tu VM.USERNAME
: Es el nombre de usuario de la cuenta que se creará en la VM.PASSWORD
: Es la contraseña de la cuenta de usuario.
Este comando de ejemplo crea una VM de Linux que ejecuta Ubuntu 20.04. Se recomienda que cambies las credenciales iniciales después de acceder a la VM por primera vez.
SO invitado de Windows
Sigue estos pasos para restablecer la contraseña de un usuario existente o crear la contraseña inicial de un usuario nuevo:
Habilita el agente invitado en tu VM de Windows:
Configura la VM para habilitar el agente invitado.
Usa VNC o RDP para conectarte a la VM.
En la VM, navega a la unidad
guest agent
. En la mayoría de los casos, es la unidadE:
.Usa PowerShell para ejecutar
install.ps1
.Con esta acción, se instalará y, luego, se iniciará el agente invitado. El agente invitado se inicia de forma automática en los reinicios posteriores de VM.
Cierra la sesión remota.
En tu estación de trabajo de administrador, usa el siguiente comando para restablecer (o configurar si usas un nombre de usuario nuevo) la contraseña de la VM de Windows:
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
Reemplaza lo siguiente:
VM_NAME
: el nombre de la VM.USERNAME
: Es el nombre de usuario para el que deseas restablecer (o establecer) la contraseña. Si el nombre de usuario es nuevo, el comando crea una cuenta de Windows nueva y establece la contraseña inicial.VM_NAMESPACE
: Es el espacio de nombres de la VM (opcional). Esta marca es opcional. Si no se especifica, se usa el espacio de nombres predeterminado,default
.
Para restablecer (o establecer) la contraseña sin un mensaje de confirmación, usa la marca opcional
--force
. Cuando usas la marca--force
, el mensaje te advierte sobre las consecuencias de restablecer la contraseña para una cuenta existente. Sin la marca--force
, el comando te solicita que confirmes el restablecimiento de la 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 restablecimiento de la contraseña, el comando muestra la contraseña nueva para la VM y el nombre de usuario especificados:
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD
¿Qué sigue?
- Administra el estado de energía de una VM en GDCV para Bare Metal.
- Edita una VM en GDCV para Bare Metal.
- Consulta los registros de la consola de la VM en GDCV para Bare Metal.