Déployer Apache Guacamole sur GKE et Cloud SQL

Last reviewed 2023-11-15 UTC

Ce document explique comment déployer Apache Guacamole sur GKE et Cloud SQL.

Ces instructions sont destinées aux administrateurs et aux ingénieurs de serveur qui souhaitent héberger Guacamole sur GKE et Cloud SQL. Dans ce document, nous partons du principe que vous maîtrisez le déploiement de charges de travail sur Kubernetes et Cloud SQL pour MySQL. Vous devez également connaître Identity and Access Management et Google Compute Engine.

Architecture

Le schéma suivant montre comment un équilibreur de charge Google Cloud est configuré avec IAP pour protéger une instance du client Guacamole s'exécutant dans GKE :

Architecture de l'équilibreur de charge Google Cloud configuré avec IAP

Le client Guacamole se connecte au service de backend guacd, qui distribue les connexions de bureau à distance à une ou plusieurs VM Compute Engine. Les scripts déploient également une instance Cloud SQL afin de gérer les données de configuration pour Guacamole.

Pour en savoir plus, consultez la page Apache Guacamole sur GKE et Cloud SQL.

Objectifs

  • Déployer l'infrastructure à l'aide de Terraform
  • Créer une base de données Guacamole dans Cloud SQL
  • Déployer Guacamole sur un cluster GKE à l'aide de Skaffold
  • Tester une connexion à une VM via Guacamole

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

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

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

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

    Activate Cloud Shell

Déployer l'infrastructure

Dans cette section, vous utilisez Terraform pour déployer les ressources suivantes :

  • Cloud privé virtuel
  • Une règle de pare-feu
  • Un cluster GKE
  • Un dépôt Artifact Registry
  • Cloud SQL pour MySQL
  • Une VM pour la gestion de la base de données MySQL
  • Comptes de service

La configuration Terraform permet également d'utiliser IAP dans votre projet.

  1. Dans Cloud Shell, clonez le dépôt GitHub.

    git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
    
  2. Déployez l'infrastructure requise à l'aide de Terraform :

    cd guacamole-on-gcp/tf-infra
    unset GOOGLE_CLOUD_QUOTA_PROJECT
    terraform init -upgrade
    terraform apply
    
  3. Suivez les instructions pour saisir l'ID de votre projet Google Cloud.

  4. Pour approuver la requête de déploiement des ressources de Terraform dans votre projet, saisissez yes.

    Le déploiement de toutes les ressources prend plusieurs minutes.

Déployer la base de données Guacamole

Dans cette section, vous allez créer la base de données et les tables Guacamole dans Cloud SQL pour MySQL et remplir la base de données avec les informations utilisateur de l'administrateur.

  1. Dans Cloud Shell, définissez des variables d'environnement et recherchez le mot de passe racine de la base de données :

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

    Notez le mot de passe racine de la base de données, car vous en aurez besoin dans les étapes suivantes.

    Le script lit les variables de sortie de l'exécution Terraform et définit les variables d'environnement suivantes, qui sont utilisées tout au long de cette procédure :

    CLOUD_SQL_INSTANCE
    ZONE
    REGION
    DB_MGMT_VM
    PROJECT_ID
    GKE_CLUSTER
    GUACAMOLE_URL
    SUBNET
    
  2. Copiez les fichiers de script create-schema.sql et insert-admin-user.sql sur la VM de gestion de base de données, puis connectez-vous à 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
    

    Une session de console sur la VM de gestion de base de données via Cloud Shell est maintenant établie.

  3. Installez les outils clients MySQ L:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. Connectez-vous à Cloud SQL et créez la base de données. Lorsque vous êtes invité à entrer un mot de passe, utilisez le mot de passe racine que vous avez noté précédemment dans cette section.

    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. Accordez aux utilisateurs de la base de données les autorisations nécessaires sur celle-ci :

    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. Une fois l'exécution des commandes MySQL terminée, quittez la session SSH de la VM :

    exit
    

Déployer Guacamole sur GKE à l'aide de Skaffold

Dans cette section, vous déployez l'application Guacamole sur le cluster GKE à l'aide de Skaffold. Skaffold gère le workflow de création, de transfert et de déploiement d'images Guacamole sur les clusters GKE.

  1. Dans Cloud Shell, déployez la configuration GKE à l'aide de Terraform :

    cd tf-k8s
    terraform init -upgrade
    terraform apply -parallelism=1
    
  2. Obtenez les identifiants du cluster GKE :

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. Exécutez Skaffold à partir de la racine du dépôt Git cloné :

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

    L'outil Skaffold crée des images de conteneur pour Guacamole via Google Cloud Build (la ligne de commande inclut une option spécifiant le dépôt vers lequel transférer les images). L'outil exécute également une étape kustomize pour générer des ConfigMaps et des Secrets Kubernetes en fonction du résultat de l'exécution de Terraform.

  4. Vérifiez que le certificat a été provisionné :

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

    Le provisionnement du certificat peut prendre jusqu'à 60 minutes.

  5. Une fois le certificat provisionné, vous pouvez accéder à votre URL dans un navigateur.

    1. Affichez l'URL de la sortie Terraform :

      echo $GUACAMOLE_URL
      
    2. Dans une fenêtre de navigateur, saisissez l'URL obtenue à l'étape précédente.

    3. Lorsque IAP vous y invite, connectez-vous à l'aide de vos identifiants Google.

      Une fois connecté, vous êtes connecté à Guacamole avec des droits d'administrateur, en fonction du script insert-admin-user.sql que vous avez exécuté précédemment dans cette procédure.

Vous pouvez maintenant ajouter des utilisateurs en fonction de leur adresse e-mail via l'interface utilisateur de Guacamole. Pour en savoir plus, consultez la section Administration dans la documentation Guacamole. Ces utilisateurs supplémentaires nécessitent également des autorisations via Google IAM, avec le rôle IAP-secured Web App User.

Tester une connexion à une VM

Une fois connecté à Guacamole après l'avoir déployé et configuré, vous pouvez créer une VM Windows et vous connecter à celle-ci via Guacamole.

Créer une VM

  1. Dans Cloud Shell, créez une VM Windows pour tester les connexions à :

    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
    

    Après avoir exécuté la commande, vous devrez peut-être attendre quelques minutes pour que Windows termine l'initialisation avant de passer à l'étape suivante.

  2. Réinitialisez le mot de passe Windows de la VM que vous venez de créer:

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

Ajouter une connexion à la VM

  1. Dans une fenêtre de navigateur, saisissez l'URL de l'instance Guacamole depuis la page Déployer Guacamole sur GKE à l'aide de Skaffold, puis connectez-vous via IAP.
  2. Dans l'interface utilisateur de Guacamole, cliquez sur votre nom d'utilisateur, puis sur Paramètres.
  3. Sous l'onglet Connexions, cliquez sur Nouvelle connexion.
    1. Dans le champ Nom, saisissez un nom pour la connexion.
    2. Dans le champ Emplacement, saisissez l'emplacement de la connexion.
    3. Dans la liste déroulante Protocole, sélectionnez RDP.
  4. Sous Réseau, dans le champ Nom d'hôte, saisissez le nom de la VM que vous avez créée, windows-vm.

    Le DNS de votre projet résout ce nom d'hôte sur l'adresse IP interne de l'instance.

  5. Dans la section Authentification, définissez les champs suivants :

    1. Nom d'utilisateur : admin
    2. Mot de passe : le mot de passe que vous avez obtenu lorsque vous avez réinitialisé le mot de passe de la VM
    3. Mode de sécurité : NLA (Authentification au niveau du réseau)
    4. Ignorer le certificat du serveur : cochez la case

      Les VM Windows Compute Engine sont provisionnées avec un certificat autosigné pour les services de bureau à distance. Vous devez donc indiquer à Guacamole d'ignorer les problèmes de validation du certificat.

  6. Cliquez sur Enregistrer.

  7. Cliquez sur votre nom d'utilisateur, puis sélectionnez Accueil.

  8. Cliquez sur la connexion que vous venez de créer pour tester la connectivité. Après quelques secondes, le bureau de l'instance de VM doit s'afficher.

Pour en savoir plus sur la configuration de Guacamole, consultez le manuel Apache Guacamole.

Effectuer un nettoyage

Pour éviter que les ressources utilisées dans cette procédure soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.

Supprimer le projet

  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.

Supprimer les nouvelles ressources

Au lieu de supprimer le projet complet, vous pouvez supprimer les ressources individuelles créées au cours de cette procédure. Notez que la configuration de l'écran d'autorisation OAuth ne peut pas être supprimée d'un projet, mais seulement modifiée.

  • Dans Cloud Shell, utilisez Terraform pour supprimer les ressources :

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

Étapes suivantes