# Kubernetes Networking: Architektur, CNI & Service-Kommunikation
TL;DR / Management Summary Kubernetes (K8s) Networking basiert auf dem Prinzip der flachen Konnektivität: Jeder Pod hat eine eigene IP und muss jeden anderen Pod im Cluster erreichen können, ohne NAT. In Proxmox-Umgebungen betreiben wir K8s meist in VMs und nutzen CNI (Container Network Interface) Plugins wie Calico oder Cilium, um die Kommunikation zu isolieren. Ein Senior Admin beherrscht die Konzepte von Services (ClusterIP/NodePort) und Ingress, um Dienste sicher ins LAN oder Internet zu publizieren.
# 1. Die Hierarchie des K8s Networking
Vom Pod zur Welt.
- Container-to-Container: Kommunikation via
localhost(teilen sich den Network-Namespace im gleichen Pod). - Pod-to-Pod: Kommunikation über das Cluster-Netzwerk (z.B. Overlay-Netz).
- Pod-to-Service: Abstraktion einer Gruppe von Pods über eine stabile VIP.
- External-to-Service: Zugriff von außerhalb des Clusters (via Loadbalancer oder Ingress).
# 2. CNI (Container Network Interface) Plugins
Der Kleber zwischen den Containern.
Das CNI-Plugin ist verantwortlich für die Vergabe von IPs und das Routing.
- Flannel: Einfach, nutzt VXLAN (Artikel 682). Keine Sicherheitsfunktionen.
- Calico: Nutzt BGP (Artikel 734) für hohe Performance und bietet Network Policies (L3/L4 Firewall).
- Cilium (Empfohlen): Nutzt eBPF (Artikel 415) für maximale Performance und Security auf Layer 7.
# 3. Deep Dive: Services & Load Balancing
Wie man Pods findet.
Da Pods kurzlebig sind, brauchen wir stabile Endpunkte:
- ClusterIP: Nur cluster-intern erreichbar.
- NodePort: Öffnet einen Port (30000-32767) auf jedem Proxmox-Knoten. (Grob, nur für kleine Setups).
- LoadBalancer: Integriert sich in Ihre OPNsense (via Metallb Plugin), um dem Service eine echte LAN-IP zuzuweisen.
# 4. Day-2 Operations: Ingress Controller
Der Layer-7 Türsteher.
Anstatt für jeden Dienst eine IP zu verbrauchen, nutzen wir einen Ingress Controller (z.B. Nginx oder Traefik).
- Funktion: Nimmt Traffic auf Port 80/443 entgegen und leitet ihn basierend auf dem Hostnamen (
api.firma.de) an den richtigen Service weiter. - Vorteil: Zentrale SSL-Terminierung und Pfad-basiertes Routing.
# 5. Troubleshooting & “War Stories”
Wenn die Pods sich nicht finden.
# Top 3 Fehlerbilder
-
Symptom: “Connection Timeout” zwischen Pods auf verschiedenen Knoten.
- Ursache: Das CNI-Overlay (VXLAN) wird von der physischen OPNsense oder Proxmox Firewall blockiert.
- Lösung: Port UDP 4789 (VXLAN) am Host erlauben.
-
Symptom: DNS-Auflösung (
my-service.default.svc.cluster.local) schlägt fehl.- Ursache: CoreDNS-Pod ist abgestürzt oder überlastet.
- Fix: CPU-Limits für den CoreDNS-Deployment anpassen.
-
Symptom: Loadbalancer-Service bleibt im Status
<pending>.- Fix: Installieren Sie MetalLB und definieren Sie einen IP-Adresspool aus Ihrem LAN (Artikel 725).
# “War Story”: Der “ARP-Sturm” durch MetalLB
Ein Admin konfigurierte MetalLB im Layer-2 Modus auf einem Proxmox-Cluster.
Das Ereignis: Plötzlich war der gesamte Core-Switch blockiert.
Die Ursache: Da MetalLB die IP-Übernahme via ARP-Spoofing (Gratuitous ARP) simuliert, lösten 50 neue Services gleichzeitig tausende ARP-Pakete aus. Der Switch sah dies als Angriff und schaltete die Ports in den Error-Disabled State.
Lehre: Nutzen Sie für produktive K8s-Cluster im LAN den BGP-Modus von MetalLB. Es ist deutlich stabiler und wird von Enterprise-Switchen (und OPNsense FRR) nativ unterstützt.
# 6. Monitoring & Reporting
Cluster-Observability.
# Prometheus & Metrics Server
Installieren Sie den kube-state-metrics Agenten.
- KPI:
pod_network_errors_total. - KPI:
ingress_http_requests_total.
# 7. Fazit & Empfehlung
Kubernetes Networking ist komplex, aber logisch aufgebaut.
- Empfehlung: Nutzen Sie Cilium als CNI. Es ist die modernste Technologie und bietet tiefste Einblicke in den Datenfluss.
- Wichtig: Verwenden Sie immer einen Ingress Controller für Web-Dienste. Es spart IP-Adressen und vereinfacht das Zertifikats-Management (Artikel 593).
# Anhang: Cheatsheet (kubectl net)
| Aufgabe | Befehl |
|---|---|
| Pod IPs sehen | kubectl get pods -o wide |
| Services listen | kubectl get svc |
| Network Policies | kubectl describe netpol |
| DNS Test | kubectl run -it --rm debug --image=busybox -- nslookup google.com |