Skalierbare Docker-Swarm-Umgebung mit geteiltem vSAN-Storage und Docker Secrets
In meinem neuesten Projekt habe ich meine bestehende Docker-Umgebung auf eine skalierbare Docker-Swarm-Umgebung migriert. Dabei nutze ich die Vorteile von vSAN-Storage für replizierte Daten und Docker Secrets zur sicheren Verwaltung sensibler Informationen.
Features & Vorteile
- Docker Swarm mit repliziertem Storage: Verteilte Dienste auf drei Swarm-Nodes mit einem vSAN-gestützten, replizierten Fileshare sorgen für Redundanz und hohe Verfügbarkeit.
- Sichere Geheimnisse mit Docker Secrets: Vertrauliche Daten wie Passwörter und API-Schlüssel werden sicher gespeichert und nur für autorisierte Dienste zugänglich gemacht.
- Zentrale Dienste migriert: Wichtige Dienste wie Vaultwarden, PostgreSQL, Grafana, InfluxDB und Twingate-Connectoren laufen nun in einer skalierbaren und replizierten Umgebung.
- Cloudflare Tunnel: Sichere Verbindungen für externe Zugriffe auf interne Dienste.
Setup im Detail
vSAN-gestützter Fileshare
Um replizierten Speicher über die Docker-Swarm-Nodes hinweg bereitzustellen, wurde ein vSAN-Fileshare konfiguriert:
-
vSAN-Fileshare erstellen: Auf dem vSAN-Cluster ein Fileshare konfigurieren und die Export-Berechtigungen für Docker-Nodes einrichten.
-
NFS-Mount in Docker-Swarm-Nodes einrichten:
sudo mkdir -p /mnt/vsan_share sudo mount -t nfs <vSAN-IP>:/path/to/share /mnt/vsan_share
Docker Swarm erstellen
Ich habe einen Swarm mit drei Nodes eingerichtet: einen Manager und zwei Worker. Die Schritte:
-
Swarm initialisieren:
docker swarm init --advertise-addr <Manager-IP>
-
Worker-Nodes hinzufügen: Auf den Worker-Nodes den von
docker swarm join-token worker
bereitgestellten Befehl ausführen. -
Shared Storage in Docker Compose einbinden: In den Compose-Dateien wird das vSAN-Mount als Volumen definiert:
volumes: shared-storage: driver_opts: type: "nfs" o: "addr=<vSAN-IP>,rw" device: ":/path/to/share"
Docker Secrets nutzen
Zur sicheren Verwaltung sensibler Daten werden Docker Secrets eingesetzt. Beispiel für die Erstellung eines Secrets:
echo "my-secure-password" | docker secret create postgres_password -
In der Docker-Compose-Datei werden Secrets wie folgt referenziert:
services:
postgres:
image: postgres:latest
secrets:
- postgres_password
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
secrets:
postgres_password:
external: true
Migration der bestehenden Dienste
Folgende Dienste wurden migriert und repliziert:
-
Vaultwarden mit PostgreSQL:
- Vaultwarden läuft nun mit replizierter PostgreSQL-Datenbank.
- Docker Secrets sichern die Zugangsdaten.
-
Grafana und InfluxDB:
- Grafana greift auf Daten aus einer replizierten InfluxDB zu.
- Dashboards sind über Cloudflare Tunnel extern erreichbar.
-
Twingate und Cloudflare Tunnel:
- Beide Connectoren sorgen für sichere und schnelle Verbindungen, sowohl intern als auch extern.
Automatisierung und Skalierbarkeit
Ich habe die Dienste in Docker Compose-Dateien definiert und mithilfe von docker stack deploy
orchestriert. Die gesamte Umgebung ist so konzipiert, dass sie leicht skaliert werden kann, indem Worker-Nodes hinzugefügt oder Dienste repliziert werden.
docker stack deploy -c docker-compose.yml my_stack
Mit dieser Docker-Swarm-Umgebung habe ich einen wichtigen Schritt in Richtung Kubernetes gemacht, ohne die Komplexität direkt übernehmen zu müssen.