Files
sultan/README.md
T
2026-10-01 23:52:15 +02:00

79 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 👑 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=<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](.ai/sultan-system-architecture.md#7-referenzkonfigurationen).