👑 sultan
Verteiltes Ingress-Routing mit ZeroTrust-Service-Discovery – geschrieben in Go.
Schluss mit Klick-Konfiguration im Proxy-GUI und toten Routen 🪦: Bei Sultan sagen deine Dienste selbst, wie sie erreichbar sein wollen. Ob Docker-Container mit Traefik-Labels 🐳 oder klassischer Bare-Metal-/LAMP-Server mit Drop-in-Config 🖥️ – ein kleiner Agent meldet das Routing sicher an den zentralen Sultan-Server, und Traefik holt sich daraus live seine Konfiguration. Ohne Neustart, ohne Portweiterleitung.
✨ Was Sultan kann
- 🏷️ Routing am Dienst deklarieren – native
traefik.*-Labels in Docker oder Dateien unter/etc/sultan.d/ - 📡 Firewall-freundlich – der Agent baut nur ausgehende Verbindungen auf; funktioniert hinter NAT, CGNAT und DS-Lite
- ⚡ Echtzeit-Updates – Container starten oder stoppen, Traefik weiß es sofort
- 🔐 Sicher von Haus aus – TLS mit Fingerprint-Pinning (wie bei SSH), Ed25519-Schlüssel, die den Host nie verlassen
- 🛡️ Mandantenfähig – jeder Mandant darf nur seine eigenen Domains beanspruchen
- 🌐 ZeroTrust-Overlay – optional über ein WireGuard-Mesh (z. B. NetBird), auch für Hosts ohne öffentliche IP
- 📊 Monitoring – Checkmk-Integration für Knoten- und Lizenzstatus
🧭 So funktioniert's
Internet ──▶ Traefik ──(pollt)──▶ sultan server ◀──(TLS-Stream)── sultan agent (Docker / Bare-Metal)
Ein einziges Binary, drei Rollen:
| Befehl | Aufgabe |
|---|---|
sultan server |
Registry, Policy-Engine und Konfigurationsquelle für Traefik |
sultan agent |
Beobachtet Docker bzw. /etc/sultan.d/ und meldet an den Server |
sultan token |
Schlüssel, Einladungs-Tokens und Lizenzen verwalten |
Die ausführliche Architektur steht in .ai/sultan-system-architecture.md.
🚀 Installation
🚧 Hinweis: Sultan befindet sich noch am Anfang der Entwicklung. Die folgenden Schritte zeigen, wie die Installation aussehen wird – Befehle und Flags können sich noch ändern.
Voraussetzungen
- Go (aktuelle stabile Version)
- Für den Ingress-Knoten: Traefik v3
- Für Docker-Hosts: Zugriff auf
/var/run/docker.sock
Binary bauen
git clone ssh://git@git.everdc.eu:10022/chmln-app-dev/sultan.git
cd sultan
go build -o sultan .
sudo install -m 0755 sultan /usr/local/bin/sultan
Server starten (Ingress-Knoten)
sultan server --data-dir=/var/lib/sultan
Der Server lauscht auf :8443 für Agents und auf 127.0.0.1:8080 für Traefik. Traefik bindest du über den HTTP-Provider an:
--providers.http.endpoint=http://127.0.0.1:8080/v1/traefik-config
--providers.http.pollInterval=3s
Agent verbinden (Backend-Host)
- Auf dem Server mit
sultan tokeneinen Einladungs-Token erzeugen 🎟️ - Auf dem Backend-Host den Agent starten:
sultan agent --server=https://ingress.example.com:8443 --token=<einladungs-token>
Beim ersten Verbinden merkt sich der Agent den Fingerprint des Servers – ab dann läuft alles automatisch. 🎉
Fertige Docker-Compose-Beispiele für Ingress und Backend-Host findest du in der Architektur-Doku.