Apache Guacamole in GKE und Cloud SQL bereitstellen

Last reviewed 2023-11-15 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. Die Skripts stellen auch eine Cloud SQL-Instanz bereit, um Konfigurationsdaten für Guacamole zu verwalten.

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

Ziele

  • Stellen Sie die Infrastruktur mithilfe von Terraform bereit.
  • Erstellen Sie eine Guacamole-Datenbank in Cloud SQL.
  • Stellen Sie Guacamole mit Skaffold in einem GKE-Cluster bereit.
  • 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 Google Cloud-Nutzern 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.

Hinweis

  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

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.

    Das Bereitstellen aller Ressourcen dauert mehrere Minuten.

Guacamole-Datenbank bereitstellen

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

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

    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 Scriptdateien create-schema.sql und insert-admin-user.sql auf die VM für die 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 wurde eine Konsolensitzung mit der Datenbankverwaltungs-VM über Cloud Shell eingerichtet.

  3. Installieren Sie die MySQL-Clienttools:

    sudo apt-get update
    sudo apt-get install -y mariadb-client
    
  4. Stellen Sie eine Verbindung zu Cloud SQL her und erstellen Sie die Datenbank. 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. Beenden Sie die SSH-Sitzung der VM, nachdem die Ausführung der MySQL-Befehle abgeschlossen ist:

    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 die Anmeldedaten für den GKE-Cluster ab:

    gcloud container clusters get-credentials \
        --region $REGION $GKE_CLUSTER
    
  3. Führen Sie Skaffold im 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 der Terraform-Ausführung zu generieren.

  4. 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.

Sie können jetzt zusätzliche Nutzer basierend auf ihrer E-Mail-Adresse über die Guacamole-Benutzeroberfläche 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 zu der 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 die Windows-Initialisierung abgeschlossen ist, bevor Sie mit dem nächsten Schritt fortfahren.

  2. Setzen Sie das Windows-Passwort für die soeben 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 Settings.
  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 Protokoll die Option RDP aus.
  4. Geben Sie unter Netzwerk im Feld Hostname den Namen der von Ihnen erstellten VM ein: windows-vm.

    Das Projekt-DNS 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: Klicken Sie das Kästchen an.

      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 Verbindung 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 dieser 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.

  • Verwenden Sie in Cloud Shell terraform, um die Ressourcen zu löschen:

    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