kube-proxy ist die Netzwerk-Komponente von Kubernetes, die auf jeder Node läuft. Seine Aufgabe ist es, die virtuellen IP-Adressen (ClusterIP) der Kubernetes-Services umzusetzen: Anfragen an einen Service werden auf die dahinterliegenden Pods verteilt, ohne dass die Anwendung davon etwas merkt.
Wie kube-proxy arbeitet
kube-proxy beobachtet den API-Server der Control Plane. Sobald ein Service oder eine EndpointListe neu angelegt oder verändert wird, aktualisiert er die Netzwerk-Regeln auf seiner Node. Dazu schreibt er Regeln in die Paketfilter des Linux-Kernels – klassischerweise mit iptables, für große Cluster mit IPVS oder in neueren Versionen mit nftables. Der Datenverkehr läuft dabei direkt vom Client zum Ziel-Pod; der kube-proxy-Prozess selbst steht nur im ältesten Betriebsmodus (Userspace) im Datenpfad.
Lastverteilung und Service-Typen
Ein Service besitzt eine stabile, virtuelle IP-Adresse, die sich auch dann nicht ändert, wenn Pods neu gestartet werden. kube-proxy sorgt dafür, dass diese IP erreichbar ist, und verteilt die Verbindungen nach dem Zufallsprinzip oder per Round-Robin auf die verfügbaren Pods. Damit übernimmt er die Funktion eines einfachen Load Balancers innerhalb des Clusters. Auch die Service-Typen NodePort und LoadBalancer setzt kube-proxy um, sodass Anfragen von außerhalb den Weg zu den Pods finden.
Kein klassischer Proxy
Der Name ist historisch bedingt: In frühen Kubernetes-Versionen leitete kube-proxy den Verkehr tatsächlich als Proxy-Prozess weiter. Heute ist er vor allem ein Regelsetzer – er programmiert den Kernel, damit Pakete direkt an die richtigen Pods gehen. Das macht ihn schnell und zuverlässig, begrenzt aber seine Funktion auf reines Layer-4-Lastenverteilen (TCP und UDP). Für feinere Entscheidungen auf Anwendungsebene sind Service Meshes wie Istio zuständig. Während kube-proxy also die Service-Ebene abdeckt, ist für die Netzwerk-Interfaces der Pods selbst die CNI-Schnittstelle zuständig.
Verwandte Grundlagen: Kubernetes, Proxy.