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. 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.
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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Resource Manager, Service Usage, Artifact Registry, and Compute Engine APIs.
-
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.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.
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
Kopieren Sie die Scriptdateien
create-schema.sql
undinsert-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.
Installieren Sie die MySQL-Clienttools:
sudo apt-get update sudo apt-get install -y mariadb-client
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
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
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.
Stellen Sie in Cloud Shell die GKE-Konfiguration mit Terraform bereit:
cd tf-k8s terraform init -upgrade terraform apply -parallelism=1
Rufen Sie die Anmeldedaten für den GKE-Cluster ab:
gcloud container clusters get-credentials \ --region $REGION $GKE_CLUSTER
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.
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.
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
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.
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
- 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 Settings.
- 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 Protokoll die Option RDP aus.
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.
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: 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.
- 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 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
- 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.
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
- 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.