# 👑 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 ```text 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](.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 ```bash git clone ssh://git@git.everdc.eu:10022/chmln-app-dev/sultan.git cd sultan go build -o sultan . ./sultan version sudo install -m 0755 sultan /usr/local/bin/sultan ``` ### Server starten (Ingress-Knoten) ```bash sultan server # Daten landen in ./suldata sultan server --help # alle Optionen ``` Der Server lauscht auf `:8443` für Agents und auf `127.0.0.1:8080` für Traefik (beides per `--agent-addr` / `--provider-addr` änderbar). Im Verzeichnis `./suldata` liegen Datenbank und Schlüssel – bitte sichern 🔑 und nie einchecken. Traefik bindest du über den HTTP-Provider an: ```bash --providers.http.endpoint=http://127.0.0.1:8080/v1/traefik-config --providers.http.pollInterval=3s ``` ### Agent verbinden (Backend-Host) 1. Auf dem Server mit `sultan token` einen Einladungs-Token erzeugen 🎟️ 2. Auf dem Backend-Host den Agent starten: ```bash sultan agent --server=https://ingress.example.com:8443 --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](.ai/sultan-system-architecture.md#7-referenzkonfigurationen).