2026-10-01 23:52:15 +02:00
2026-10-01 23:52:15 +02:00
2026-10-01 23:52:15 +02:00
2026-10-01 23:52:15 +02:00
2026-10-01 23:52:15 +02:00
2026-10-01 22:22:13 +02:00
2026-10-01 22:22:13 +02:00
2026-10-01 23:52:15 +02:00
2026-10-01 23:52:15 +02:00

👑 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 .
./sultan version
sudo install -m 0755 sultan /usr/local/bin/sultan

Server starten (Ingress-Knoten)

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:

--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:
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.

S
Description
sultan service + agent in GO Target: a Traefik label registry docker host over span
Readme
1 MiB
0 Stars 5 Watchers 0 Forks
Languages
Go 98.8%
HTML 0.6%
Shell 0.4%
Dockerfile 0.2%