Zum Inhalt

Podman-Netzwerke reparieren

Ungeprüft

Diese Anleitung ist noch nicht durchgespielt worden; Befehle, Bezeichnungen und erwartete Ausgaben können abweichen. Was noch zu prüfen ist, steht in todo/doku.md.

Ziel

Die Container einer App auf werner erreichen einander über ihr internes Netzwerk wieder, weil dessen Subnetz in firewalld eingetragen ist.

Voraussetzungen

Das betrifft nur werner; auf containerhost gibt es keine internen Netzwerke. Nötig ist es nach jedem apply, das ein neues internes Netzwerk anlegt, also bei einer neuen App mit mehreren Containern und nach einem Neuaufbau.

Typische Anzeichen: Die App startet, kommt aber nicht an ihre Datenbank oder ihren Cache im selben Stack; im Log stehen Zeitüberschreitungen (timeout, ETIMEDOUT) oder could not translate host name beim Verbinden mit einem Container wie hedgedoc-postgres.

Alle Befehle laufen auf werner, nach ssh werner.garage-lab.de.

Schritte

1. Subnetze der internen Netzwerke ansehen

Bash
podman network ls --format '{{.Name}} {{.Internal}} {{range .Subnets}}{{.Subnet}}{{end}}' | grep ' true '

Erwartet: eine Zeile je internem Netzwerk mit Namen, true und Subnetz, etwa hedgedoc true 10.89.3.0/24.

2. Mit firewalld vergleichen

Bash
firewall-cmd --zone=trusted --list-sources

Erwartet: eine Liste von Subnetzen. Fehlt ein Subnetz aus Schritt 1, ist das die Ursache; weiter mit Schritt 3. Stehen alle drin, liegt der Fehler woanders; sieh in die Logs (Container-Status und Logs ansehen).

3. Skript ausführen

Bash
fix-podman-internal-networks

Das Skript liegt unter /usr/bin/ auf werner und kommt aus rootfs/werner/usr/bin/fix-podman-internal-networks; es trägt die Subnetze aller internen Netzwerke dauerhaft in die Zone trusted ein.

Erwartet: je internem Netzwerk die Zeilen Network: <name> | First Subnet: <subnetz>, success und OK: <subnetz> added to trusted zone, bei schon eingetragenen Subnetzen zusätzlich Warning: ALREADY_ENABLED; am Ende OK: firewalld reloaded.

4. Betroffene App neu starten

Starte den Container der App neu, damit er die Verbindung neu aufbaut:

Bash
systemctl restart hedgedoc-server.service

Erwartet: keine Ausgabe; mehr in Gecrashten Dienst neu starten.

Prüfen

  • firewall-cmd --zone=trusted --list-sources enthält alle Subnetze aus Schritt 1.
  • Im Log der App (journalctl -u hedgedoc-server.service -n 50 --no-pager) stehen keine neuen Verbindungsfehler.
  • Die App ist unter ihrem Namen erreichbar.

Wenn etwas schiefgeht