From b0837b79cf35a9c6e7341c482f52ff38fe7ef497 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Fri, 21 Aug 2026 12:00:00 +0000 Subject: [PATCH] docs: wave 1 is live, and rehearsing the rollback corrected Gate 2 Six deploy and helper workloads are restricted; the count of workloads without a narrow rule went from fifteen to nine. The block is proven from inside the pod - three truly external targets refused, CoreDNS answering as the positive control - and the pod is distroless, so the probe ran in an ephemeral container sharing its network namespace and labels. That is the method the remaining waves need and it is written down rather than rediscovered. Rehearsing the rollback corrected a claim from Gate 2. "Flux makes a git revert a rollback of minutes" holds only with an addition. The revert took about forty seconds; restoring afterwards did nothing for four minutes, although git.lab had the commit and the mirror reported finished. Only a forced refetch of the GitRepository moved it. So a rollback is a revert plus a nudge to the source. Someone who only reverts and waits sees nothing for up to a poll interval and may conclude the rollback itself is broken while it is merely slow. That belongs in the record before a wave touches something users notice. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01F2Q4Ri8NGwyTZzScvKnWFM --- STATUS.md | 2 +- docs/design/2026-08-21-egress-vollstaendig.md | 69 +++++++++++++++++-- docs/ledger/2026-08-21-egress-vollstaendig.md | 2 + 3 files changed, 68 insertions(+), 5 deletions(-) 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