Apache Guacamole in GKE und Cloud SQL bereitstellen

Last reviewed 2025-01-09 UTC

In diesem Dokument wird beschrieben, wie Sie Apache Guacamole in GKE und Cloud SQL bereitstellen.

Diese Anleitung richtet sich an Serveradministratoren und Entwickler, die Guacamole in GKE und Cloud SQL hosten möchten. Im Dokument wird davon ausgegangen, dass Sie mit dem Bereitstellen von Arbeitslasten in Kubernetes und Cloud SQL for MySQL vertraut sind. Sie sollten außerdem mit der Identitäts- und Zugriffsverwaltung und Google Compute Engine vertraut sein.

Architektur

Das folgende Diagramm zeigt, wie ein Google Cloud -Load-Balancer mit IAP konfiguriert wird, um eine in GKE ausgeführte Instanz des Guacamole-Clients zu schützen:

Architektur für Google Cloud -Load-Balancer, der mit IAP konfiguriert ist.

Der Guacamole-Client stellt eine Verbindung zum Guacd Backend-Dienst her, der Remote-Desktop-Verbindungen zu einer oder mehreren Compute Engine-VMs herstellt. Mit den Scripts wird auch eine Cloud SQL-Instanz bereitgestellt, um Konfigurationsdaten für Guacamole zu verwalten.

Weitere Informationen finden Sie unter Apache Guacamole in GKE und Cloud SQL.

Ziele

  • Stellen Sie die Infrastruktur mit Terraform bereit.
  • Erstellen Sie eine Guacamole-Datenbank in Cloud SQL.
  • Guacamole mit Skaffold in einem GKE-Cluster bereitstellen
  • Verbindung zu einer VM über Guacamole testen

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  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

    Stellen Sie die Infrastruktur bereit:

    In diesem Abschnitt stellen Sie mit Terraform die folgenden Ressourcen bereit:

    • Virtual Private Cloud
    • Firewall-Regel
    • GKE-Cluster
    • Artifact Registry-Repository
    • Cloud SQL for MySQL
    • Eine VM zum Verwalten der MySQL-Datenbank
    • Dienstkonten

    Die Terraform-Konfiguration ermöglicht auch die Verwendung von IAP in Ihrem Projekt.

    1. Klonen Sie in Cloud Shell das GitHub-Repository:

      git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
      
    2. Stellen Sie die erforderliche Infrastruktur mithilfe von Terraform bereit:

      cd guacamole-on-gcp/tf-infra
      unset GOOGLE_CLOUD_QUOTA_PROJECT
      terraform init -upgrade
      terraform apply
      
    3. Folgen Sie der Anleitung, um Ihre Google Cloud Projekt-ID einzugeben.

    4. Geben Sie yes ein, um die Anfrage von Terraform zum Bereitstellen von Ressourcen in Ihrem Projekt zu genehmigen.

      Die Bereitstellung aller Ressourcen kann mehrere Minuten dauern.

    Guacamole-Datenbank bereitstellen

    In diesem Abschnitt erstellen Sie die Guacamole-Datenbank und -Tabellen in Cloud SQL for MySQL und füllen die Datenbank mit den Administratornutzerinformationen.

    1. Legen Sie in Cloud Shell Umgebungsvariablen fest und suchen Sie das Datenbank-Root-Passwort:

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

      Notieren Sie sich das Root-Passwort für die Datenbank. Sie brauchen es in den folgenden Schritten.

      Das Skript liest die Ausgabevariablen aus der Terraform-Ausführung und setzt die folgenden Umgebungsvariablen, die in dieser Prozedur verwendet werden:

      CLOUD_SQL_INSTANCE
      ZONE
      REGION
      DB_MGMT_VM
      PROJECT_ID
      GKE_CLUSTER
      GUACAMOLE_URL
      SUBNET
      
    2. Kopieren Sie die Skriptdateien create-schema.sql und insert-admin-user.sql auf die VM zur Datenbankverwaltung und stellen Sie dann eine Verbindung zur VM her:

      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
      

      Es wird eine Konsolensitzung zur Datenbankverwaltungs-VM über Cloud Shell hergestellt.

    3. Installieren Sie die MySQL-Clienttools:

      sudo apt-get update
      sudo apt-get install -y mariadb-client
      
    4. Verbindung zu Cloud SQL herstellen und Datenbank erstellen Geben Sie bei entsprechender Aufforderung das Root-Passwort ein, das Sie zuvor in diesem Abschnitt notiert haben.

      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. Gewähren Sie dem Datenbanknutzer Berechtigungen für die neu erstellte Datenbank:

      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. Nachdem die MySQL-Befehle ausgeführt wurden, beenden Sie die VM-SSH-Sitzung:

      exit
      

    Guacamole mit Skaffold in GKE bereitstellen

    In diesem Abschnitt stellen Sie die Guacamole-Anwendung mit Skaffold im GKE-Cluster bereit. Skaffold übernimmt den Workflow zum Erstellen, Übertragen und Bereitstellen der Guacamole-Images in den GKE-Clustern.

    1. Stellen Sie in Cloud Shell die GKE-Konfiguration mit Terraform bereit:

      cd tf-k8s
      terraform init -upgrade
      terraform apply -parallelism=1
      
    2. Rufen Sie Anmeldedaten für den GKE-Cluster ab:

      gcloud container clusters get-credentials \
          --region $REGION $GKE_CLUSTER
      
    3. Führen Sie Skaffold über das Stammverzeichnis des geklonten Git-Repositorys aus:

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

      Das Skaffold-Tool erstellt Container-Images für Guacamole über Google Cloud Build (die Befehlszeile enthält ein Flag, das angibt, in welches Repository die Images übertragen werden sollen). Das Tool führt auch einen kustomize-Schritt aus, um Kubernetes-ConfigMaps und -Secrets basierend auf der Ausgabe des Terraform-Laufs zu generieren.

    4. So prüfen Sie, ob das Zertifikat bereitgestellt wurde:

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

      Die Bereitstellung des Zertifikats kann bis zu 60 Minuten dauern.

    5. Sobald das Zertifikat bereitgestellt wurde, können Sie Ihre URL in einem Browser aufrufen.

      1. Rufen Sie die URL aus der Terraform-Ausgabe auf:

        echo $GUACAMOLE_URL
        
      2. Geben Sie in einem Browserfenster die URL ein, die Sie im vorherigen Schritt erhalten haben.

      3. Wenn Sie von IAP dazu aufgefordert werden, melden Sie sich mit Ihren Google-Anmeldedaten an.

        Nach der Anmeldung sind Sie mit Administratorberechtigungen in Guacamole angemeldet, basierend auf Skript insert-admin-user.sql, das Sie zuvor in diesem Verfahren ausgeführt haben.

    Über die Guacamole-Benutzeroberfläche können Sie jetzt zusätzliche Nutzer anhand ihrer E-Mail-Adresse hinzufügen. Weitere Informationen finden Sie in Administration in der Guacamole-Dokumentation. Diese zusätzlichen Nutzer benötigen Berechtigungen über Google IAM mit der Rolle IAP-secured Web App User.

    Verbindung zu einer VM testen

    Nachdem Sie Guacamole bereitgestellt, konfiguriert und sich erfolgreich angemeldet haben, können Sie eine Windows-VM erstellen und über Guacamole eine Verbindung zur neu erstellten VM herstellen.

    VM erstellen

    1. Erstellen Sie in Cloud Shell eine Windows-VM, um Verbindungen zu ihr zu testen:

      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
      

      Nachdem Sie den Befehl ausgeführt haben, müssen Sie möglicherweise einige Minuten warten, bis Windows initialisiert ist, bevor Sie mit dem nächsten Schritt fortfahren.

    2. Setzen Sie das Windows-Passwort für die gerade erstellte VM zurück:

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

    Neue Verbindung zur VM hinzufügen

    1. Geben Sie in einem Browserfenster die Guacamole-Instanz-URL aus Guacamole mit Skaffold in GKE bereitstellen ein und melden Sie sich dann über IAP an.
    2. Klicken Sie in der Guacamole-Benutzeroberfläche auf Ihren Nutzernamen und dann auf Einstellungen.
    3. Klicken Sie auf dem Tab Verbindungen auf Neue Verbindung.
      1. Geben Sie im Feld Name einen Namen für die Verbindung ein.
      2. Geben Sie im Feld Standort den Standort für die Verbindung ein.
      3. Wählen Sie in der Drop-down-Liste Protocol (Protokoll) die Option RDP aus.
    4. Geben Sie unter Netzwerk im Feld Hostname den Namen der von Ihnen erstellten VM ein: windows-vm.

      Der DNS-Server Ihres Projekts löst diesen Hostnamen in die interne IP-Adresse der Instanz auf.

    5. Legen Sie im Abschnitt Authentifizierung die folgenden Felder fest:

      1. Nutzername: admin
      2. Passwort:Das Passwort, das Sie beim Zurücksetzen des Passworts für die VM erhalten haben
      3. Sicherheitsmodus:NLA (Authentifizierung auf Netzwerkebene)
      4. Serverzertifikat ignorieren:Aktivieren Sie das Kästchen.

        Windows-VMs in Compute Engine werden mit einem selbst signierten Zertifikat für Remote Desktop-Services bereitgestellt. Daher müssen Sie Guacamole anweisen, Probleme bei der Zertifikatsvalidierung zu ignorieren.

    6. Klicken Sie auf Speichern.

    7. Klicken Sie auf Ihren Nutzernamen und wählen Sie Startseite aus.

    8. Klicken Sie auf die Verbindung, die Sie gerade erstellt haben, um die Konnektivität zu testen. Nach einigen Sekunden sollte der Desktop der VM-Instanz angezeigt werden.

    Weitere Informationen zum Konfigurieren von Guacamole finden Sie im Apache Guacamole-Handbuch.

    Bereinigen

    Damit Ihrem Google Cloud -Konto die in diesem Verfahren verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

    Projekt löschen

    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.

    Die Neuen Ressourcen löschen

    Als Alternative zum Löschen des ganzen Projekts können Sie die einzelnen Ressourcen löschen, die Sie während dieses Vorgangs erstellt haben. Beachten Sie, dass die OAuth-Zustimmungsbildschirmkonfiguration nicht aus einem Projekt entfernt werden kann, sondern nur geändert werden kann.

    • Löschen Sie die Ressourcen in Cloud Shell mit Terraform:

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

    Nächste Schritte

    Beitragende

    Autor: Richard Grime | Principal Architect, UK Public Sector

    Weitere Beitragende: