Regeln, Standards, Kontextstruktur und Werkzeuge übernommen; 2nd-brain- Inhalte (Stacks, Ansible-Inventar, Architektur, Knowledge) entfernt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
id, title, type, status, updated, owner, tags, sources, related, classification
| id | title | type | status | updated | owner | tags | sources | related | classification | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sultan | sultan – verteiltes Ingress-Routing für Traefik (Eigenentwicklung) | service | active | 2026-10-23 | br |
|
|
intern |
sultan – verteiltes Ingress-Routing für Traefik
Eigenentwicklung des Betreibers (Go), Ersatz für HashiCorp Consul im eigenen Bedarf: Dienste deklarieren ihr Routing per Traefik-Labels, ein Agent meldet es an den sultan-Server, Traefik holt die Konfiguration per HTTP-Provider.
Fakten
| Merkmal | Wert |
|---|---|
| Repo | ssh://git@git.everdc.eu:10022/chmln-app-dev/sultan.git, lokal ~/git/sultan |
| Image | zot.chmln.de/sultan:<version> (distroless, nonroot UID 65532) – feste Version in .env |
| Rollen | sultan server (neben Traefik), sultan agent (je Docker-Host), sultan accountant (Inventar) |
| Agent → Server | TCP 8443, TLS, nur ausgehend |
| Traefik → Backend | HTTP auf den veröffentlichten Host-Port des Containers |
| Monitoring | Checkmk Local Checks (/metrics/checkmk) |
Details – was das für unsere Compose-Stacks heißt
| Punkt | Folge |
|---|---|
| Traefik läuft auf anderer VM | kein externes Netz traefik-net und kein Label traefik.docker.network auf dem Docker-Host |
| Port muss veröffentlicht sein | ports: "${APP_PORT}:<intern>" Pflicht für Web-Services; Bindung an 127.0.0.1 wird verworfen. Bindung an eine andere IP (z. B. NetBird-IP) wird akzeptiert (Code: pkg/agent/workloads.go, reachablePorts). Festlegung je Host in dessen Knowledge-Eintrag |
| Port-Label | loadbalancer.server.port = Port im Container; der Agent rechnet auf den Host-Port um |
| Entrypoints/Certresolver | Labels müssen Namen aus der Traefik-Konfiguration nutzen (websecure, le); sultan prüft das nicht |
| Domains | nur Domains, die dem Mandanten im sultan-Server erlaubt sind (sonst „Policy-Verstoß“ im Server-Log) |
| Namen | IDs: a-z0-9, -, _; __ ist reserviert (Trenner <mandant>__<knoten>__<router>) – unser _-Schema passt, doppelter Unterstrich verboten |
| Backend-Adresse | Agent meldet die Host-IP, über die er den Server erreicht; mit SULTAN_BACKEND_INTERFACE=wt0 die NetBird-IP |
| Wartung | gestoppter Container → Wartungsseite; entfernter Container (down) → 404 (siehe docs/wartung.md im Repo) |
Betrieb
- Bereitstellung Agent: Compose mit
network_mode: host, Docker-Socket:ro,group_add: DOCKER_GID,suldata/(enthältnode.key) persistent und im Backup - Einladung:
sultan token invite --tenant=…auf dem Server, alsSULTAN_TOKENin die.envdes Agents (nur beim ersten Start) - Prüfung: Agent-Log „Mit Server verbunden / Lease erhalten“; vom Ingress
curl -sI http://<backend-ip>:<port> -H 'Host: …'
Quellen
~/git/sultan/README.md,docs/community.md,deploy/compose/agent/(gelesen 23.10.2026, Commitdd93277)
Änderungen
- 23.10.2026 – angelegt (br)