Desplegar Apache Guacamole en GKE y Cloud SQL

Last reviewed 2025-01-09 UTC

En este documento se describe cómo desplegar Apache Guacamole en GKE y Cloud SQL.

Estas instrucciones están dirigidas a administradores e ingenieros de servidores que quieran alojar Guacamole en GKE y Cloud SQL. En este documento se da por hecho que sabes cómo desplegar cargas de trabajo en Kubernetes y Cloud SQL para MySQL. También te recomendamos que conozcas Gestión de Identidades y Accesos y Google Compute Engine.

Arquitectura

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

Arquitectura del balanceador de carga Google Cloud configurado con IAP.

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

Para obtener más información, consulta Apache Guacamole en GKE y Cloud SQL.

Objetivos

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

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Resource Manager, Service Usage, Artifact Registry, and Compute Engine APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    Desplegar la infraestructura

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

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

    La configuración de Terraform también permite usar IAP en tu proyecto.

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

      git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
      
    2. Despliega la infraestructura necesaria con Terraform:

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

    4. Para aprobar la solicitud de Terraform de desplegar recursos en tu proyecto, introduce yes.

      El despliegue de todos los recursos tarda varios minutos en completarse.

    Desplegar la base de datos de Guacamole

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

    1. En Cloud Shell, define 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 pasos siguientes.

      La secuencia de comandos lee las variables de salida de la ejecución de Terraform y define 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 secuencias de comandos create-schema.sql y insert-admin-user.sql en la VM de gestión de bases de datos y, a continuación, 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 ha establecido una sesión de consola en la VM de gestión de bases de datos a través de Cloud Shell.

    3. Instala las herramientas de cliente de MySQL:

      sudo apt-get update
      sudo apt-get install -y mariadb-client
      
    4. Conéctate a Cloud SQL y crea la base de datos. Cuando se te pida una contraseña, usa la contraseña raíz que has anotado 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. Concede 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 se hayan ejecutado los comandos de MySQL, sal de la sesión SSH de la VM:

      exit
      

    Desplegar Guacamole en GKE con Skaffold

    En esta sección, desplegarás la aplicación Guacamole en el clúster de GKE mediante Skaffold. Skaffold gestiona el flujo de trabajo para compilar, enviar e implementar las imágenes de Guacamole en los clústeres de GKE.

    1. En Cloud Shell, despliega la configuración de GKE con Terraform:

      cd tf-k8s
      terraform init -upgrade
      terraform apply -parallelism=1
      
    2. Obtén las credenciales del 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 crea imágenes de contenedor para Guacamole a través de Google Cloud Build (la línea de comandos incluye una marca que especifica en qué repositorio se deben insertar las imágenes). La herramienta también ejecuta un paso de kustomize para generar ConfigMaps y Secrets de Kubernetes en función del resultado de la ejecución de Terraform.

    4. Comprueba 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 tardar hasta 60 minutos en completarse.

    5. Una vez que se haya aprovisionado el certificado, puedes visitar tu URL en un navegador.

      1. Consulta la URL en el resultado de Terraform:

        echo $GUACAMOLE_URL
        
      2. En una ventana del navegador, introduce la URL que has obtenido en el paso anterior.

      3. Cuando IAP te lo solicite, inicia sesión con tus credenciales de Google.

        Después de iniciar sesión, se te dará acceso a Guacamole con privilegios de administrador, en función de la secuencia de comandos insert-admin-user.sql que hayas ejecutado anteriormente en este procedimiento.

    Ahora puedes añadir usuarios adicionales en función de su dirección de correo a través de la interfaz de usuario de Guacamole. Para obtener más información, consulta la sección Administración de la documentación de Guacamole. Estos usuarios adicionales también necesitan permisos a través de la gestión de identidades y accesos de Google, con el rol IAP-secured Web App User.

    Probar una conexión a una VM

    Una vez que hayas implementado y configurado Guacamole, y hayas iniciado sesión correctamente, podrás crear una VM de Windows y conectarte a ella a través de Guacamole.

    Crear 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 tengas que esperar unos minutos a que Windows termine de inicializarse antes de continuar con el siguiente paso.

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

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

    Añadir una nueva conexión a la VM

    1. En una ventana del navegador, introduce la URL de la instancia de Guacamole que se indica en Desplegar Guacamole en GKE con Skaffold y, a continuación, inicia sesión a través de IAP.
    2. En la interfaz de usuario de Guacamole, haz clic en tu nombre de usuario y, a continuación, en Configuración.
    3. En la pestaña Conexiones, haz clic en Nueva conexión.
      1. En el campo Nombre, escriba un nombre para la conexión.
      2. En el campo Ubicación, introduce la ubicación de la conexión.
      3. En la lista desplegable Protocol (Protocolo), selecciona RDP.
    4. En Red, en el campo Nombre de host, introduce el nombre de la VM que has creado, windows-vm.

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

    5. En la sección Authentication (Autenticación), define los siguientes campos:

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

        Las VMs Windows de Compute Engine se aprovisionan con un certificado autofirmado para Servicios de Escritorio Remoto, por lo que debes indicar a Guacamole que ignore los problemas de validación de certificados.

    6. Haz clic en Guardar.

    7. Haz clic en tu nombre de usuario y selecciona Casa.

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

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

    Limpieza

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

    Eliminar el proyecto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Eliminar los nuevos recursos

    Como alternativa a eliminar todo el proyecto, puedes eliminar los recursos concretos que hayas creado durante este procedimiento. Ten en cuenta que la configuración de la pantalla de consentimiento de OAuth no se puede eliminar de un proyecto, solo modificar.

    • En Cloud Shell, usa Terraform para eliminar 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
      

    Siguientes pasos

    Colaboradores

    Autor: Richard Grime | Arquitecto principal de la administración pública del Reino Unido

    Otros colaboradores: