Apache Guacamole serverless betreiben – mit Cloud Run zur skalierbaren Remote-Desktop-Lösung
Sicherer Remote-Zugriff ist für viele Unternehmen essenziell – sei es für den Support, das Homeoffice oder den Zugriff auf virtuelle Maschinen in der Cloud. Klassische Lösungen wie VPNs oder RDP-Clients bringen jedoch oft Komplexität, Wartungsaufwand und Sicherheitsrisiken mit sich. Apache Guacamole bietet hier einen modernen Ansatz: Die clientlose Remote-Desktop-Gateway-Software ermöglicht den Zugriff auf entfernte Systeme direkt über den Webbrowser – ganz ohne zusätzliche Software auf dem Client.
Um Guacamole zu betreiben, wird zwischen zwei zentralen Bereitstellungsmethoden unterschieden: Der manuellen Installation direkt auf einem Linux-Server und dem Betreiben von Containern. Erstere Methode ist komplizierter, erfordert einen eigenen Server und lässt sich schlecht skalieren.
Für den Containerbetrieb gibt es mehrere Methoden zur Bereitstellung. Hierbei gibt es drei zentrale Optionen: Der Betrieb mit Docker oder Docker Compose, der Betrieb mit Kubernetes und das Deployment auf Cloud-Plattformen.
Für alle containerisierten Apache-Guacamole-Instanzen sind jedoch diese drei Kernkomponenten gleich:
- Guacamole-Web: Die Webanwendung ist die Benutzeroberfläche von Guacamole, die im Browser läuft. Sie ermöglicht den Zugriff auf entfernte Systeme und verwaltet Benutzer:innen und Verbindungen.
- Guacamole-Server (guacd): guacd ist der Dienst, der die eigentlichen Remote-Verbindungen (z. B. RDP, VNC, SSH) herstellt und die Kommunikation zwischen Browser und Zielsystem übernimmt.
- Die Datenbank: Die Datenbank speichert Benutzer:innen, Verbindungen und Berechtigungen. Sie ist zentral für die Verwaltung und den Betrieb in produktiven Umgebungen.
Mit einer einfachen Docker-/Docker Compose-Anwendung werden schnell die Grenzen der maximalen Verbindungen erreicht und die Container sind überlastet. Kubernetes ist wiederum sehr komplex und teuer.
Die Google Cloud Platform (GCP) bietet für genau diesen Anwendungsfall ein optimales Tool, um kostengünstig zu skalieren und nur für die genutzten Ressourcen zu bezahlen: Cloud Run. Cloud Run skaliert auf Basis der eingehenden Anfragen die Container entweder hoch oder runter. Ohne eingehende Anfragen skaliert Cloud Run die Container sogar auf 0, es entstehen also auch keine Kosten.
Die Datenbank sollte jedoch ausgelagert werden, da sie persistente Daten enthält. Die GCP bietet dafür Cloud SQL an. In dem Cloud Run Service sollte dementsprechend Guacamole-Web, guacd und der Proxy, der zur Verbindung zur Datenbank benötigt wird, laufen.
Seit Mai 2023 lassen sich in einem Cloud-Run-Dienst mehrere Container gemeinsam betreiben – sogenannte Sidecar-Container.
Dabei handelt es sich um zusätzliche Container, die zusammen mit der Hauptanwendung laufen und unterstützende Aufgaben übernehmen, wie z. B. die Verbindung zur Datenbank oder das Logging. Diese Möglichkeit ist der Schlüssel, um Guacamole effizient in Cloud Run zu betreiben.
Folgende Grafik zeigt den Aufbau der Applikation:
Wie so eine vereinfachte Cloud-Run-Definition aussehen kann, zeigt die folgende service.yaml:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: guacamole-multi spec: template: metadata: annotations: run.e10f949fcaacdb195442bfb5062d59de-gdprlock/container-dependencies: '{"guacamole": ["guacd", "cloudsql-proxy"]}' spec: serviceAccountName: sa-name@proj-name-dxs9.iam.gserviceaccount.com containers: - name: guacamole image: guacamole/guacamole:1.5.5 ports: - containerPort: 8080 env: - name: GUACD_HOSTNAME value: "localhost" - name: GUACD_PORT value: "4822" - name: MYSQL_HOSTNAME value: "localhost" - name: MYSQL_PORT value: "3306" - name: MYSQL_DATABASE value: "guacamole_sql" - name: MYSQL_USER value: "mysql-user" - name: MYSQL_PASSWORD value: mysql-password - name: guacd image: guacamole/guacd:1.5.5 - name: cloudsql-proxy image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2 args: - "--address=0.0.0.0" - "--port=3306" - "--credentials-file=/secrets/cloudsql/sa-key.json" - "proj-name:region:cloud-sql-instance" volumeMounts: - name: cloudsql-sa-key mountPath: /secrets/cloudsql readOnly: true volumes: - name: cloudsql-sa-key secret: secretName: service-account-key-json items: - key: latest path: sa-key.json
Der serverlose Betrieb von Apache Guacamole mit Cloud Run zeigt, wie klassische Anwendungen durch moderne Cloud-Technologien neu gedacht werden können. Die Lösung ist nicht nur technisch interessant, sondern auch wirtschaftlich sinnvoll – besonders für Unternehmen mit dynamischen Anforderungen.
In Zukunft könnten weitere Integrationen wie Identity-Aware Proxy (IAP) oder automatisiertes Monitoring die Lösung noch robuster und sicherer machen. Auch eine CI/CD-Pipeline für automatisierte Deployments mit Ansible oder Terraform ist denkbar, um die Bereitstellung weiter zu optimieren.
Seminarempfehlungen
DOCKER UND PODMAN CONTAINER ESSENTIALS E-DOCK-01
Mehr erfahrenKUBERNETES ESSENTIALS KUB-01
Mehr erfahrenCLOUD COMPUTING ESSENTIALS CLOUD-COMP
Mehr erfahrenStudent bei ORDIX
Kommentare