diff --git a/STATUS.md b/STATUS.md index a5e0c20..f75445b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -89,7 +89,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | Design | Gate | Title | |---|---|---| -| [2026-08-21-egress-vollstaendig](docs/design/2026-08-21-egress-vollstaendig.md) | gate-3 | Design: Den ausgehenden Verkehr zu Ende schließen (#0088) | +| [2026-08-21-egress-vollstaendig](docs/design/2026-08-21-egress-vollstaendig.md) | gate-4 | Design: Den ausgehenden Verkehr zu Ende schließen (#0088) | ## ADRs (24) diff --git a/docs/design/2026-08-21-egress-vollstaendig.md b/docs/design/2026-08-21-egress-vollstaendig.md index 19a5b25..e9b527e 100644 --- a/docs/design/2026-08-21-egress-vollstaendig.md +++ b/docs/design/2026-08-21-egress-vollstaendig.md @@ -1,6 +1,6 @@ --- type: design -status: gate-3 +status: gate-4 date: 2026-08-21 size: L related: @@ -345,6 +345,67 @@ einem Pod heraus gezeigt werden, dass `rohana.axion1337.de` auf `10.0.0.3` auflöst **und** die TLS-Prüfung weiterhin durchgeht — beides in einem Lauf, sonst ist „geht noch" wieder eine Vermutung. -> **STOP — Freigabe für Gate 3** samt diesem Nachtrag. Der CoreDNS-Zeiger -> wirkt clusterweit; das ist die einzige Änderung hier, die über die -> NetworkPolicies hinausgeht. +> **Gate 3 freigegeben durch sorb, 2026-08-21**, samt Nachtrag und +> CoreDNS-Zeiger. + +## Gate 4 — Vertical Slices + +### Slice 1 — Welle 1: Klasse A, sechs Arbeitslasten + +- [x] **Beide Listen erweitern** — files: `apps/production/networkpolicy.yaml` + — action: die sechs Namen in `egress-block-metadata` (NotIn) **und** + `egress-nur-intern` (In) — verify: Mengen deckungsgleich, YAML parst — + done: 14/14, keine einseitigen Einträge. +- [x] **Ausrollen und Wirkung messen** — verify: Bestand neu erhoben, Sperre + aus dem Pod gegengeprüft — done, Belege unten. +- [x] **Rückweg proben** — verify: `git revert`, Ausgangszustand messen, + wieder herstellen — done, mit einer Korrektur an Gate 2. + +**Evidence.** + +Bestand nach der Welle — von 15 offenen auf **9**: + +``` +clamav, coturn, matrix-authentication-service, matrix-rtc-sfu, +synapse-backup, synapse-main, turn-secret-rotation, wikijs, wikijs-backup +``` + +Sperre gegengeprüft aus `matrix-rtc-authorisation-service`: + +``` +CoreDNS (Positivkontrolle): ERREICHBAR +Storage Box (echt extern): blockiert +1.1.1.1 (echt extern): blockiert +rohana oeffentlich: blockiert +``` + +⚠️ **Der Pod ist distroless — ohne Shell kein Test.** Gemessen wurde über +einen **ephemeren Container**, der den Netz-Namensraum und die Labels des +Pods teilt; die Policy gilt für ihn genauso. Das ist der Weg, den die +restlichen Wellen für distroless Arbeitslasten brauchen, und er gehört +deshalb hier festgehalten und nicht neu erfunden. + +**Der Rückweg wurde geprobt — und hat Gate 2 korrigiert.** + +| Schritt | Wirkung | +|---|---| +| `git revert` der Welle | nach ~40 s wieder 8 Namen | +| Wiederherstellen | **vier Minuten keine Wirkung** | +| Quelle manuell angestoßen | binnen ~90 s wieder 14 Namen | + +Gate 2 sagte: *„Flux macht ein `git revert` zum Rückweg von Minuten."* Das +stimmt **nur mit einem Zusatz**. Der Rückweg hängt an zwei Wartezeiten, die +niemand steuert: dem Push-Spiegel nach Gitea und Flux' Abrufintervall auf +die Quelle. Beim Revert traf es günstig, beim Wiederherstellen nicht — vier +Minuten Stillstand, obwohl git.lab den Commit längst hatte und der Spiegel +`status=finished` meldete. Erst ein erzwungenes Neuladen der `GitRepository` +löste es. + +**Für den Ernstfall heißt das:** Ein Rückweg ist ein `git revert` **plus** +ein Anstoßen der Quelle. Wer nur revertiert und wartet, sieht bis zu einem +Abrufintervall lang keine Wirkung — und hält womöglich den Rückweg selbst +für kaputt, während er nur langsam ist. + +**Status:** `DONE` + +> **STOP — Slice-Review.** diff --git a/docs/ledger/2026-08-21-egress-vollstaendig.md b/docs/ledger/2026-08-21-egress-vollstaendig.md index 592ab3a..3b400e8 100644 --- a/docs/ledger/2026-08-21-egress-vollstaendig.md +++ b/docs/ledger/2026-08-21-egress-vollstaendig.md @@ -14,6 +14,7 @@ related: | gate | commit | approval | status | note | |---|---|---|---|---| +| 3 | a7d561b | sorb | DONE | Klassen, Regelform, rohana intern statt extern. | | 2 | 1dc5439 | sorb | DONE | Drei Klassen, CIDR-only, ClamAV als harter Fall benannt. | | 1 | 04b1b84 | sorb | DONE | Umfang und vier zaehlbare Abnahmekriterien; #0088 auf in-progress. | @@ -29,6 +30,7 @@ related: | ob die Sperre von gestern ueberhaupt beisst, bevor neue dazukommen | drei echt externe Ziele blockiert, die Knoten-Adresse erreichbar | built: nichts — aber der Fund aendert die Klasseneinteilung und gehoert ins Issue | | | einen privaten Weg zu rohana, auf sorbs Einwand hin | `10.0.0.3:443` antwortet als Gitea und traegt ein gueltiges Let's-Encrypt-Zertifikat fuer den oeffentlichen Namen | reused: der vorhandene private Pfad statt einer Erlaubnis nach draussen — kein Dienst muss umkonfiguriert werden | | | einen Weg, den Namen intern umzubiegen | die Corefile importiert bereits `/etc/coredns/custom/*.override`; nur die ConfigMap fehlt | reused: der vorgesehene k3s-Mechanismus, keine Aenderung an der Corefile selbst | | +| einen Weg, einen distroless Pod zu pruefen | `kubectl debug` haengt einen ephemeren Container in denselben Netz-Namensraum, die Policy gilt fuer ihn genauso | reused: Bordmittel statt Sidecar oder Image-Aenderung | | ## Notes