46 Benutzerdefinierte Netzwerke

Benutzerdefinierte Netzwerke gehören zu den mächtigsten, aber oft unterschätzten Werkzeugen im Podman-Ökosystem. Sie ermöglichen es, Container in logisch getrennten Kommunikationsdomänen zu gruppieren, Dienstabhängigkeiten gezielt zu modellieren und die Architektur eines Systems auf Netzwerkebene abzubilden. Während Docker lange auf ein Plugin-orientiertes CNI-System setzte, verfolgt Podman mit Netavark und Aardvark einen deterministischen und rootless-freundlichen Ansatz. Dadurch entsteht ein Netzwerkmodell, das sich sowohl für lokale Entwicklungsumgebungen als auch für komplexe Anwendungsstacks eignet – und das ohne einen zentralen Daemon.

46.1 Netzwerk als Architektur-Tool

Ein benutzerdefiniertes Netzwerk ist nicht nur ein technisches Artefakt, sondern ein eigenes Architekturobjekt. Es strukturiert:

In modernen Microservice-Systemen ersetzt ein durchdachtes Netzdesign häufig überflüssige Firewall-, Proxy- oder Routingregeln. Es schafft Klarheit, indem es Kommunikationspfade explizit und nachvollziehbar macht.

46.2 Netavark als Grundlage: deterministisches Routing ohne Plugins

Podman verwaltet benutzerdefinierte Netzwerke über Netavark – ein dediziertes Netzwerkbackend, das Routing, NAT, IPAM und Interface-Erzeugung abbildet. Im Gegensatz zu CNI-Plugins existiert kein chaotischer Plugin-Zoo, sondern ein einheitliches Modell:

Aardvark ergänzt dies durch einen containerlokalen DNS-Server pro Netzwerk.

Ergebnis: jedes Netzwerk bildet eine abgeschlossene Zone mit eigener Namensauflösung.

46.3 Das Grundmodell: isolierte Segmente mit eigenen DNS-Zonen

Ein benutzerdefiniertes Netzwerk verhält sich wie ein virtuelles L2-/L3-Segment. Container erhalten:

Illustriert:

Container aus verschiedenen Netzwerken können sich standardmäßig nicht sehen – weder auf IP- noch auf DNS-Ebene.

Diese Isolation ist kein Bonusfeature, sondern der zentrale Zweck benutzerdefinierter Netzwerke.

46.4 Container in mehreren Netzwerken

Ein Container kann Mitglied in mehreren Netzwerken sein und erhält dann:

Diese Fähigkeit entspricht in der Praxis dem „Multi-Homing“ und eröffnet architektonische Muster wie Service-Mesh-ähnliche Segmentierung ohne Orchestrator.

Beispiel:

Backend fungiert hier als Gateway zwischen Frontend und Datenbank – jedoch ausschließlich auf Anwendungsebene, da kein L3-Routing zwischen Netzwerken existiert. Ein solcher Aufbau erzwingt klare Grenzen: kein Container sieht mehr als notwendig.

46.5 IPAM-Konfiguration und Netzwerkdesign

Bei der Erstellung eines Netzwerks können IP-Pools und Subnetze explizit angegeben werden:

podman network create \
  --subnet 10.42.0.0/24 \
  --gateway 10.42.0.1 \
  mynet

Diese Kontrolle ist essenziell, wenn Container:

Netzwerke werden so zu konfigurierbaren Bausteinen, die nicht zufällig entstehen, sondern bewusst modelliert werden.

46.6 DNS- und Service-Discovery-Logik

Aardvark erzeugt pro Netzwerk eine DNS-Zone. Bedeutet:

Beispiel: Ein Container web im Netzwerk mynet ist dort über web.mynet und web erreichbar. In einem zweiten Netzwerk würde er als web.othernet adressierbar sein.

Diese DNS-Trennung vermeidet klassische Fehler wie:

46.7 NAT, Routing und externe Erreichbarkeit

Benutzerdefinierte Netzwerke grenzen Container voneinander ab. Die Verbindung nach außen erfolgt über NAT:

Ein Container in einem benutzerdefinierten Netzwerk ist niemals automatisch von außen erreichbar. Diese Trennung schützt:

Nur definierte Ports am Host werden explizit freigegeben:

podman run -p 8080:80 --network mynet webapp

Diese bewusste Freigabe verhindert „zufällige Erreichbarkeit“.

46.8 Netzwerkdiagnose: sichtbar machen, was isoliert ist

Netzwerkprobleme in Containerlandschaften wirken zunächst unberechenbar. In benutzerdefinierten Netzwerken lässt sich die Fehleranalyse jedoch systematisch angehen.

46.8.1 1. Netzwerk inspizieren

podman network inspect mynet

Zeigt:

46.8.2 2. Container-IP ermitteln

podman inspect -f '{{.NetworkSettings}}' web

46.8.3 3. DNS testen

podman exec web getent hosts backend

46.8.4 4. Routing prüfen

podman exec web ip route

46.8.5 5. Netzwerk-Wechsel testen

podman network connect mynet container
podman network disconnect othernet container

Viele Fehler entstehen schlicht durch falsche Netzzuordnungen.

46.9 Architekturpatterns mit benutzerdefinierten Netzwerken

Benutzerdefinierte Netzwerke ermöglichen Architekturen, die ohne Orchestrator erstaunlich sauber sind.

46.9.1 Pattern: Service-Segmentation

Frontend <-> Backend
Backend <-> Database

Frontend sieht Datenbank nicht. Backend wird zum Boundary-Service.

46.9.2 Pattern: Isolierte Testpipelines

Jeder CI-Job erhält ein eigenes Netzwerk:

46.9.3 Pattern: Multi-Tenant-Simulation

Mehrere Testmandanten laufen parallel:

Jeder Container kann mehrfach existieren, ohne sich gegenseitig zu sehen.

46.9.4 Pattern: Layered Security Domains

Zugriff erfolgt nur über explizite Service-Gateways.

46.10 Rootless-Einschränkungen und Besonderheiten

Im Rootless-Modus gelten Einschränkungen:

Trotzdem bleiben die meisten Funktionen benutzerdefinierter Netzwerke erhalten – insbesondere DNS, Isolation, Multi-Network-Konfiguration und IPAM.

Für Enterprise-Umgebungen ist dies ein entscheidender Vorteil: Multi-User-Systeme können sicher Container nutzen, ohne die Gefahr globaler Interferenzen.