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:
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.
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
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, 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.
Klonen Sie in Cloud Shell das GitHub-Repository:
git clone https://github.com/GoogleCloudPlatform/guacamole-on-gcp.git
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
Folgen Sie der Anleitung, um Ihre Google Cloud Projekt-ID einzugeben.
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.
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
Kopieren Sie die Skriptdateien
create-schema.sql
undinsert-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.
Installieren Sie die MySQL-Clienttools:
sudo apt-get update sudo apt-get install -y mariadb-client
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
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
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.
Stellen Sie in Cloud Shell die GKE-Konfiguration mit Terraform bereit:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1
Rufen Sie Anmeldedaten für den GKE-Cluster ab:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTER
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.
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.
Sobald das Zertifikat bereitgestellt wurde, können Sie Ihre URL in einem Browser aufrufen.
Rufen Sie die URL aus der Terraform-Ausgabe auf:
echo $GUACAMOLE_URL
Geben Sie in einem Browserfenster die URL ein, die Sie im vorherigen Schritt erhalten haben.
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
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.
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
- 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.
- Klicken Sie in der Guacamole-Benutzeroberfläche auf Ihren Nutzernamen und dann auf Einstellungen.
- Klicken Sie auf dem Tab Verbindungen auf Neue Verbindung.
- Geben Sie im Feld Name einen Namen für die Verbindung ein.
- Geben Sie im Feld Standort den Standort für die Verbindung ein.
- Wählen Sie in der Drop-down-Liste Protocol (Protokoll) die Option RDP aus.
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.
Legen Sie im Abschnitt Authentifizierung die folgenden Felder fest:
- Nutzername:
admin
- Passwort:Das Passwort, das Sie beim Zurücksetzen des Passworts für die VM erhalten haben
- Sicherheitsmodus:
NLA
(Authentifizierung auf Netzwerkebene) 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.
- Nutzername:
Klicken Sie auf Speichern.
Klicken Sie auf Ihren Nutzernamen und wählen Sie Startseite aus.
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- 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
- GKE-Anleitung zur Härtung Ihrer Cluster-Sicherheit ansehen
- Lesen Sie den Abschnitt Secrets auf Anwendungsebene verschlüsseln, um die Sicherheit von Secrets wie Datenbankanmeldedaten und OAuth-Anmeldedaten zu erhöhen.
- Unter IAM Bedingungen erfahren Sie, wie Sie den Nutzerzugriff auf Guacamole genauer steuern können.
- Weitere Informationen zur Funktionsweise von IAP-Integrationen finden Sie, wenn Sie den benutzerdefinierten Authentifizierungsanbieter im GitHub-Repository ansehen.
- Weitere Referenzarchitekturen, Diagramme und Best Practices finden Sie im Cloud-Architekturcenter.
Beitragende
Autor: Richard Grime | Principal Architect, UK Public Sector
Weitere Beitragende:
- Aaron Lind | Solution Engineer, Application Innovation
- Eyal Ben Ivri | Cloud Solutions Architect
- Ido Flatow | Cloud Solutions Architect