Files
lpic-sim/ai/context/knowledge/services/sultan.md
T
Björn RundenandClaude Opus 5.5 7f6b8ebe07 Basis aus 2nd-brain für LPIC-Prüfungsvorbereitung übernommen
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>
2026-10-29 21:56:53 +01:00

50 lines
3.0 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.
---
id: sultan
title: sultan – verteiltes Ingress-Routing für Traefik (Eigenentwicklung)
type: service
status: active
updated: 2026-10-23
owner: br
tags: [traefik, ingress, docker, netbird, checkmk, eigenentwicklung]
sources: [https://git.everdc.eu/chmln-app-dev/sultan]
related: []
classification: 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ält `node.key`) persistent und im Backup
- Einladung: `sultan token invite --tenant=…` auf dem Server, als `SULTAN_TOKEN` in die `.env` des 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, Commit `dd93277`)
## Änderungen
- 23.10.2026 – angelegt (br)