wiki: Gruppenpruefung wartet auf die NetworkPolicy (#0103)

Der erste echte Lauf scheiterte mit "Connection refused", obwohl Service,
Endpunkt, Portname, Pod-Marken und Policy-Regel alle korrekt waren.

Ursache gemessen, nicht geraten: Die NetworkPolicy-Regeln fuer einen NEU
erzeugten Pod sind beim Start des Containers noch nicht programmiert. Im selben
Pod nacheinander: psql sofort abgewiesen, roher TCP-Test zu, nach 20 Sekunden
psql erfolgreich.

Ein frueherer nc-Test aus einem separaten Pod lief zufaellig spaet genug und sah
sauber aus - er hat mich zunaechst in die falsche Richtung geschickt.

Der Job wartet jetzt bis zu 60 s auf Erreichbarkeit und meldet erst danach einen
Fehler. Ohne das scheiterte er jede Nacht an einem Wettlauf, und man gewoehnt
sich an den roten Job - genau die Abstumpfung, die #0104 abgestellt hat.

⚠️ Dieselbe Klasse kann andere kurzlebige Jobs im Namespace treffen
(wikijs-backup, synapse-backup, restore-drill). Nicht geprueft, eigener Befund.
This commit is contained in:
Thore Cimbal
2026-08-20 12:00:00 +00:00
parent 0f24fe8a54
commit a3d7e03d90
+24 -5
View File
@@ -59,13 +59,32 @@ spec:
- |
set -eu
# Gegenprobe zuerst: Antwortet die Datenbank ueberhaupt? Ohne diese
# Zeile sieht "0 Nutzer ohne Gruppe" bei unerreichbarer DB genauso aus
# wie ein sauberes Ergebnis - stiller Erfolg ist hier das eigentliche
# Risiko, nicht der Fund.
# Warten, bis die Datenbank erreichbar ist - und zwar wirklich warten:
# Die NetworkPolicy-Regeln fuer einen NEU erzeugten Pod sind beim Start
# des Containers noch nicht programmiert. In diesem Fenster wird die
# Verbindung abgewiesen ("Connection refused"), obwohl Ziel, Marken und
# Regel korrekt sind. Gemessen am 2026-08-20: sofort nach dem Start
# abgewiesen, nach 20 Sekunden erfolgreich.
#
# Ohne diese Schleife scheitert der Job jede Nacht am Wettlauf und meldet
# einen Fehler, den niemand nachvollziehen kann - oder schlimmer: Man
# gewoehnt sich an den roten Job.
bereit=""
for versuch in 1 2 3 4 5 6 7 8 9 10 11 12; do
if psql -Atc 'select 1;' >/dev/null 2>&1; then bereit="ja"; break; fi
sleep 5
done
if [ -z "$bereit" ]; then
echo "FEHLER: Datenbank nach 60 s nicht erreichbar - Pruefung nicht gelaufen."
exit 1
fi
# Gegenprobe: Ohne sie sieht "0 Nutzer ohne Gruppe" bei einer leeren oder
# falschen Datenbank genauso aus wie ein sauberes Ergebnis - stiller
# Erfolg ist hier das groessere Risiko als ein Fund.
gesamt="$(psql -Atc 'select count(*) from users;')"
if [ -z "$gesamt" ] || [ "$gesamt" -eq 0 ]; then
echo "FEHLER: keine Nutzer gelesen - Datenbank nicht erreichbar oder leer."
echo "FEHLER: keine Nutzer gelesen - Datenbank leer oder falsche Datenbank."
exit 1
fi