47 Port-Mapping und DNS-Auflösung

Port-Mapping und DNS-Auflösung gehören zu den unscheinbarsten, aber einflussreichsten Mechanismen innerhalb containerisierter Netzwerke. Sie bestimmen, wie Container von außen erreichbar sind, wie Dienste innerhalb eines Container-Netzes gefunden werden und welche Sicherheitsgrenzen zwischen internen und externen Kommunikationspfaden bestehen. Podman bietet dafür einen vollständig daemonlosen, deterministischen Mechanismus, der auf Netavark und Aardvark basiert und sich präzise steuern lässt – sowohl im Root- als auch im Rootless-Modus.

47.1 Port-Mapping als explizite Grenze zwischen intern und extern

Container sind standardmäßig nicht von außen erreichbar. Sie besitzen private IP-Adressen in isolierten Netzwerknamespaces. Erst ein Port-Mapping macht einen Dienst nach außen sichtbar:

podman run -p 8080:80 webapp

Der Host veröffentlicht dabei Port 8080 und leitet eingehenden Traffic zur Port 80 des Containers weiter. Dadurch entsteht eine klare, deklarative Exponierungsschnittstelle. Es ist keine implizite Konvention, sondern eine bewusste Architekturanweisung.

47.1.1 Das NAT-Modell für eingehenden Traffic

Podman nutzt je nach Modus verschiedene Pathways:

Illustration:

Diese NAT-Schicht kapselt den Container vom Host und verhindert, dass der Container selbst Host-Routen kontrolliert.

47.1.2 Ports unterhalb 1024: Rootless-Besonderheit

Im Rootless-Modus sind „privilegierte Ports“ (<1024) nicht direkt bindbar. Ein Container kann daher nicht auf Port 80 lauschen und über den Host sofort erreichbar sein. Mappings wie:

-p 80:80

funktionieren nur im Root-Modus. Rootless erfordert Host-Ports > 1024:

-p 8080:80

Im Alltag führt diese Einschränkung oft zu Fehlerszenarien, die nicht als Netzwerkproblem identifiziert werden – sondern als „warum ist der Container nicht erreichbar?“. Ursache: Portprivilegien.

47.1.3 Mehrfachzuweisungen und Port-Kollisionen

Mehrere Container können denselben Containerport veröffentlichen – aber nur auf verschiedene Host-Ports. Der Host entscheidet, welcher Port-Forward existiert.

Fehlerszenarien:

Die Diagnose fällt leichter, wenn man die aktiven Port-Bindings inspiziert:

podman ps --format "{{.Names}}: {{.Ports}}"

47.2 Outgoing Traffic: Container als Client

Ein Container kann ohne Port-Mapping nach außen kommunizieren. Das NAT für abgehenden Verkehr ist unabhängig vom eingehenden Mapping.

Beispiel:

podman exec webapp curl https://example.com

Das ist immer möglich – egal, ob Ports gemappt wurden oder nicht. Outbound NAT ist ein Kernfeature isolierter Netzwerke.

47.3 DNS-Auflösung: Aardvark als deterministischer Resolver

Während das Port-Mapping die Außenwelt kontrolliert, steuert DNS, wie Container sich gegenseitig finden. Podman nutzt Aardvark – einen eigenen, containerlokalen DNS-Server, der pro Netzwerk eine eigene Zone verwaltet.

47.3.1 Grundprinzip der DNS-Zonen pro Netzwerk

Jedes Netzwerk besitzt:

Container im Netzwerk mynet können sich gegenseitig finden:

ping backend

oder

ping backend.mynet

Container außerhalb dieses Netzwerks können diese Namen nicht auflösen. Diese DNS-Isolation verhindert unbeabsichtigte Service-Exponierung.

47.3.2 Multi-Network-Container und mehrfache DNS-Kontexte

Ein Container kann Mitglied in mehreren Netzwerken sein. Dadurch erhält er mehrere Namensräume. Beispiel:

Container api in Netzwerken frontnet und backnet:

Das ist funktional vergleichbar mit Multi-Homing. Diese Trennung vermeidet Konflikte und erlaubt präzise Steuerung komplexer Architekturen.

47.3.3 Service Discovery ohne Orchestrator

Viele Entwickler erwarten Service Discovery erst, wenn ein Orchestrator im Spiel ist. Doch Podman liefert eine leichte Variante:

Damit eignet sich Podman auch für lokale Microservice-Topologien, ganz ohne Kubernetes.

47.4 Interplay: DNS intern, Port-Mapping extern

Ein typisches Architekturpattern:

Dies ist die elementarste Form serviceorientierter Segmentierung.

47.5 Troubleshooting von DNS und Portmapping

47.5.1 Häufige DNS-Fehler

Diagnose:

podman network inspect mynet
podman exec container getent hosts backend
podman exec container cat /etc/resolv.conf

47.5.2 Häufige Port-Mapping-Fehler

Nützliche Diagnose:

podman port container
sudo ss -tulpn | grep <port>

47.6 Innerhalb komplexer Architekturen

Port-Mapping und DNS-Auflösung sind keine Nebenaspekte. Sie bilden die externe und interne Kommunikationsgrenze eines Systems. Je sauberer diese beiden Aspekte gestaltet sind, desto stabiler und sicherer lässt sich eine Containerlandschaft betreiben – egal, ob im lokalen Lab, in einer CI-Umgebung oder als Basis für Layer-2-Orchestrierung.