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.

Lernziele

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

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.

Hinweise

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

    Go to project selector

  2. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

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

    Aktivieren Sie die APIs

  4. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

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 dauert einige Minuten.

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 Root-Passwort der 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 Skriptdateien create-schema.sql und insert-admin-user.sql auf die Datenbankverwaltungs-VM 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
    

    Eine Konsolensitzung auf der Datenbankverwaltungs-VM über Cloud Shell ist jetzt 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. Wenn Sie zur Eingabe eines Passworts aufgefordert werden, verwenden Sie das zuvor in diesem Abschnitt notierte Root-Passwort.

    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 mithilfe von Skaffold in GKE bereitstellen

In diesem Abschnitt stellen Sie die Guacamole-Anwendung mithilfe von 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 aus dem 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 Schritt kustomize 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 die 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 IAP Sie dazu auffordert, 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 auch Berechtigungen über Google IAM mit der Rolle IAP-secured Web App User.

Verbindung zu einer VM testen

Nach dem Bereitstellen, Konfigurieren und erfolgreichen Anmelden in Guacamole 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
    

    Nach der Ausführung des Befehls müssen Sie möglicherweise einige Minuten warten, bis Windows die Initialisierung abgeschlossen hat, 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 Gucamole in GKE mit Skaffold bereitstellen ein und melden Sie sich dann über IAP an.
  2. Klicken Sie in der Guacamole-UI auf Ihren Nutzernamen und dann auf Settings (Einstellungen).
  3. Klicken Sie auf dem Tab Connections (Verbindungen) auf New Connection (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 zur Konfiguration 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. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

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