77 lines
3.4 KiB
Markdown
77 lines
3.4 KiB
Markdown
# 👑 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 .
|
||
sudo install -m 0755 sultan /usr/local/bin/sultan
|
||
```
|
||
|
||
### Server starten (Ingress-Knoten)
|
||
|
||
```bash
|
||
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:
|
||
|
||
```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).
|