Implementa Apache Guamole en GKE y Cloud SQL

Last reviewed 2025-01-09 UTC

En este documento, se describe cómo implementar Apache Gacamole en GKE y Cloud SQL.

Estas instrucciones están destinadas a ingenieros y administradores de servidores que deseen alojar Guacamole en GKE y Cloud SQL. En el documento, se supone que estás familiarizado con la implementación de cargas de trabajo en Kubernetes y Cloud SQL para MySQL. Recomendamos que estés familiarizado con Identity and Access Management y Google Compute Engine.

Arquitectura

En el siguiente diagrama, se muestra cómo se configura un balanceador de cargas Google Cloud con IAP para proteger una instancia del cliente Guacamole que se ejecuta en GKE:

Arquitectura del balanceador de cargas Google Cloud configurado con IAP.

El cliente de Guacamole se conecta al servicio de backend de guacd, que ejecuta conexiones de escritorio remoto a una o más VMs de Compute Engine. Las secuencias de comandos también implementan una instancia de Cloud SQL para administrar los datos de configuración de Guacamole.

Para obtener más detalles, consulta Apache Gacamole en GKE y Cloud SQL.

Objetivos

  • Implementar la infraestructura mediante Terraform.
  • Crear una base de datos de Guacamole en Cloud SQL.
  • Implementar Guacamole en un clúster de GKE mediante Skaffold.
  • Prueba una conexión a una VM a través de Guacamole.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios de Google Cloud nuevos cumplan con los requisitos para acceder a una prueba gratuita.

Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.

Antes de comenzar

  1. En la consola de Google Cloud , en la página del selector de proyectos, selecciona o crea un proyecto de Google Cloud .

    Roles necesarios para seleccionar o crear un proyecto

    • Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
    • Crea un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (roles/resourcemanager.projectCreator), que contiene el permiso resourcemanager.projects.create. Obtén más información para otorgar roles.

    Ir al selector de proyectos

  2. Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .

  3. Habilita las APIs de Resource Manager, Service Usage, Artifact Registry y API de Compute Engine, si aún no están habilitadas.

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.

    Habilitar las API

  4. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

Implementa la infraestructura

En esta sección, usarás Terraform para implementar los siguientes recursos:

  • Nube privada virtual
  • Una regla de firewall
  • Un clúster de GKE
  • Un repositorio de Artifact Registry
  • Cloud SQL para MySQL
  • Una VM para administrar la base de datos de MySQL
  • Cuentas de servicio

La configuración de Terraform también habilita el uso de IAP en tu proyecto.

  1. En Cloud Shell, clona el repositorio de GitHub:

    git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
    
  2. Implementa la infraestructura requerida mediante Terraform.

    cd guacamole-on-gcp/tf-infra
    unset GOOGLE_CLOUD_QUOTA_PROJECT
    terraform init -upgrade
    terraform apply
    
  3. Sigue las instrucciones para ingresar el ID del proyecto de Google Cloud .

  4. Para aprobar la solicitud de Terraform a fin de implementar recursos en tu proyecto, ingresa yes.

    La implementación de todos los recursos tarda varios minutos en completarse.

Implementa la base de datos de Guacamole

En esta sección, crearás las bases de datos y las tablas de Guacamole en Cloud SQL para MySQL y las propagarás con la información del usuario administrador.

  1. En Cloud Shell, configura las variables de entorno y busca la contraseña raíz de la base de datos:

    cd ..
    source bin/read-tf-output.sh
    

    Anota la contraseña raíz de la base de datos, ya que la necesitarás en los siguientes pasos.

    La secuencia de comandos lee las variables de salida de la ejecución de Terraform y establece las siguientes variables de entorno, que se usan a lo largo de este procedimiento:

    CLOUD_SQL_INSTANCE
    ZONE
    REGION
    DB_MGMT_VM
    PROJECT_ID
    GKE_CLUSTER
    GUACAMOLE_URL
    SUBNET
    
  2. Copia los archivos de secuencia de comandos create-schema.sql y insert-admin-user.sql en la VM de administración de bases de datos y, luego, conéctate a la VM:

    gcloud compute scp \
        --tunnel-through-iap \
        --zone=$ZONE \
        create-schema.sql \
        insert-admin-user.sql \
        $DB_MGMT_VM:
    
    gcloud compute ssh $DB_MGMT_VM \
        --zone=$ZONE \
        --tunnel-through-iap
    

    Ahora se estableció una sesión de consola con la VM de administración de bases de datos a través de Cloud Shell.

  3. Instala las herramientas cliente MySQL:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. Conectarte a Cloud SQL y crear la base de datos Cuando se te solicite una contraseña, usa la contraseña raíz que anotaste anteriormente en esta sección.

    export CLOUD_SQL_PRIVATE_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/cloud_sql_ip -H "Metadata-Flavor: Google")
    mysql -h $CLOUD_SQL_PRIVATE_IP -u root -p
    
  5. Otorga permisos al usuario de la base de datos sobre la base de datos recién creada:

    CREATE DATABASE guacamole;
    USE guacamole;
    GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole.* TO 'guac-db-user';
    FLUSH PRIVILEGES;
    SOURCE create-schema.sql;
    SOURCE insert-admin-user.sql;
    quit
    
  6. Cuando terminen de ejecutarse los comandos de MySQL, sal de la sesión SSH de la VM:

    exit
    

Implementa Guacamole en GKE con Skaffold

En esta sección, implementarás la aplicación de Guacamole en el clúster de GKE con Skaffold. Skaffold controla el flujo de trabajo para compilar, enviar y, luego, implementar las imágenes de Guacamole en los clústeres de GKE.

  1. En Cloud Shell, implementa la configuración de GKE mediante terraform:

    cd tf-k8s
    terraform init -upgrade
    terraform apply -parallelism=1
    
  2. Obtén las credenciales para el clúster de GKE:

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. Ejecuta Skaffold desde la raíz del repositorio de Git clonado:

    cd ..
    skaffold --default-repo $REGION-docker.pkg.dev/$PROJECT_ID/guac-repo run
    

    La herramienta Skaffold compila imágenes de contenedor para Guacamole a través de Google Cloud Build (la línea de comandos incluye una marca que especifica a qué repositorio se envían las imágenes). La herramienta también ejecuta un paso de kustomize para generar ConfigMaps y Secrets de Kubernetes basados en el resultado de la ejecución de Terraform.

  4. Verifica que se haya aprovisionado el certificado:

    kubectl get -w managedcertificates/guacamole-client-cert \
    -n guacamole \
    -o jsonpath="{.spec.domains[0]} is {.status.domainStatus[0].status}"
    

    El aprovisionamiento del certificado puede tomar hasta 60 minutos en completarse.

  5. Una vez que se aprovisione el certificado, podrás visitar tu URL en un navegador.

    1. Visualiza la URL desde el resultado de Terraform:

      echo $GUACAMOLE_URL
      
    2. En una ventana del navegador, ingresa la URL que obtuviste en el paso anterior.

    3. Cuando la IAP te lo solicite, accede con tus credenciales de Google.

      Después de acceder, se te otorgarán privilegios de administrador en Guacamole, según la secuencia de comandos insert-admin-user.sql que ejecutaste anteriormente en este procedimiento.

Ahora puedes agregar usuarios adicionales según su dirección de correo electrónico a través de la interfaz de usuario de Guacamole. Para obtener más información, consulta Administración en la documentación de Guacamole. Estos usuarios adicionales también requieren permisos a través de Google IAM, con el rol IAP-secured Web App User.

Prueba una conexión a una VM

Después de implementar, configurar y acceder correctamente a Guacamole, puedes crear una VM de Windows y conectarte a la VM recién creada a través de Guacamole.

Crea una VM

  1. En Cloud Shell, crea una VM de Windows para probar las conexiones:

    export TEST_VM=windows-vm
    gcloud compute instances create $TEST_VM \
        --project=$PROJECT_ID \
        --zone=$ZONE \
        --machine-type=n1-standard-1 \
        --subnet=$SUBNET \
        --no-address \
        --image-family=windows-2019 \
        --image-project=windows-cloud \
        --boot-disk-size=50GB \
        --boot-disk-type=pd-standard \
        —-shielded-secure-boot
    

    Después de ejecutar el comando, es posible que debas esperar unos minutos para que Windows termine de inicializarse antes de continuar con el siguiente paso.

  2. Restablece la contraseña de Windows para la VM que acabas de crear:

    gcloud compute reset-windows-password $TEST_VM \
        --user=admin \
        --zone=$ZONE
    

Agrega una conexión nueva a la VM

  1. En una ventana del navegador, ingresa la URL de la instancia de Guacamole desde Implementa Guacamole en GKE con Skaffold y, luego, accede a través de IAP.
  2. En la IU de Guacamole, haz clic en tu nombre de usuario y, luego, en Configuración.
  3. En la pestaña Conexiones, haz clic en Nueva conexión.
    1. En el campo Nombre, ingresa un nombre para la conexión.
    2. En el campo Ubicación, ingresa la ubicación de la conexión.
    3. En la lista desplegable Protocolo, selecciona RDP.
  4. En Red, en el campo Nombre de host, ingresa el nombre de la VM que creaste, windows-vm.

    El DNS del proyecto resuelve este nombre de host a la dirección IP interna de la instancia.

  5. En la sección Autenticación, configure los siguientes campos:

    1. Nombre de usuario: admin
    2. Contraseña: la contraseña que obtuviste cuando restableciste la contraseña de la VM.
    3. Modo de seguridad: NLA (autenticación a nivel de red)
    4. Ignorar certificado del servidor: Selecciona la casilla de verificación.

      Las VMs de Windows de Compute Engine se aprovisionan con un certificado autofirmado para servicios de escritorio remoto, por lo que debes indicarle a Guacamole que ignore los problemas de validación de certificados.

  6. Haz clic en Guardar.

  7. Haz clic en su nombre de usuario y, luego, seleccione Página principal.

  8. Haz clic en la conexión que acabas de crear para probar la conectividad. Después de unos segundos, deberías ver el escritorio de la instancia de VM.

Para obtener más detalles sobre cómo configurar Guacamole, consulta el manual de Apache Guacamole.

Realiza una limpieza

Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en este procedimiento, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos nuevos

Como alternativa a la eliminación del proyecto completo, puedes borrar los recursos individuales que creaste durante este procedimiento. Ten en cuenta que la configuración de la pantalla de consentimiento de OAuth no se puede quitar de un proyecto, solo se puede modificar.

  • En Cloud Shell, usa Terraform para borrar los recursos:

    cd ~/guacamole-on-gcp/tf-k8s
    terraform destroy
    
    cd ~/guacamole-on-gcp/tf-infra
    terraform destroy
    
    gcloud compute instances delete $TEST_VM –-zone=$ZONE
    

¿Qué sigue?

Colaboradores

Autor: Richard Grime | Arquitecto principal, Sector público del Reino Unido

Otros colaboradores: