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>
This commit is contained in:
commit
7f6b8ebe07
70 files changed
+2816
No files matched your search
@@ -0,0 +1,49 @@
|
||||
---
|
||||
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)
|
||||
Reference in new issue
Block a user