Dieses Kapitel behandelt die zentrale Rolle von
kube-proxy in der Kubernetes-Netzwerkarchitektur. Es
erklärt, wie Pod-zu-Pod-Kommunikation funktioniert, wie Services in
Netzwerkrouten übersetzt werden und welche verschiedenen
Implementierungsmodi für unterschiedliche Skalierungsanforderungen
existieren.
Übersicht der kube-proxy
Architektur mit allen Betriebsmodi und Kommunikationsflüssen zwischen
Pods, Services und externen Clients.
| Funktion | Beschreibung | Implementierung |
|---|---|---|
| Service Discovery | Übersetzung von Service-Namen in Pod-IPs | Watch API Server für Services/Endpoints |
| Load Balancing | Verteilung eingehender Requests auf verfügbare Pods | iptables/IPVS Rules, Round-Robin/Weighted |
| Network Translation | DNAT von ClusterIPs zu Pod-IPs | Kernel-basierte NAT-Regeln |
| Session Affinity | Sticky Sessions für stateful Applications | Connection Tracking, Source IP Hashing |
| External Access | NodePort und LoadBalancer Implementation | Node-weite Port-Bindings |
| Health-based Routing | Routing nur zu “Ready” Pods | Endpoints Controller Integration |
Das Kubernetes-Netzwerkmodell basiert auf einem Flat Network Design, bei dem jeder Pod eine eindeutige IP-Adresse erhält und direkt mit anderen Pods kommunizieren kann - ohne NAT oder komplexe Routing-Mechanismen. Dieses Design vereinfacht die Netzwerkarchitektur erheblich und ermöglicht es Anwendungen, so zu funktionieren, als würden sie auf einem traditionellen physischen Netzwerk laufen.
Kernprinzipien des Flat Network Models:
Darstellung des Flat Network
Models mit Pod-zu-Pod-Kommunikation über Node-Grenzen hinweg.
Die tatsächliche Implementierung des Flat Network Models erfolgt durch Container Network Interface (CNI) Plugins, die für die Netzwerk-Konfiguration der Pods verantwortlich sind:
| CNI-Plugin | Netzwerk-Technologie | Charakteristikum |
|---|---|---|
| Flannel | VXLAN Overlay Network | Einfach, gut für kleinere Cluster |
| Calico | BGP + iptables/eBPF | Native L3-Routing, Network Policies |
| Weave | Mesh-Netzwerk | Verschlüsselung, automatische Discovery |
| Cilium | eBPF | Hochperformant, L7-Funktionalität |
| AWS VPC CNI | Native VPC Integration | Cloud-native, Security Groups |
Obwohl Pods direkt über ihre IP-Adressen kommunizieren können, entstehen in der Praxis erhebliche Herausforderungen:
Probleme ohne Service-Abstraktion:
Service-Lösung:
Services lösen diese Probleme durch eine stabile Abstraktion, die eine konstante IP-Adresse (ClusterIP) und DNS-Namen für eine Gruppe von Pods bereitstellt:
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- port: 80 # Service-Port (Eingangsport)
targetPort: 8080 # Container-Port (Zielport)
type: ClusterIP
clusterIP: 10.96.0.100 # Stabile virtuelle IPService-Abstraktion Vorteile:
kube-proxy ist die zentrale Komponente, die Services von
einer abstrakten Konfiguration in konkrete Netzwerkrouten übersetzt. Es
läuft als DaemonSet auf jedem Worker Node und stellt
sicher, dass Service-Traffic korrekt an die dahinterliegenden Pods
weitergeleitet wird.
Kernaufgaben von kube-proxy:
Detaillierte Darstellung der
kube-proxy Architektur und Kommunikationsflüsse.
kube-proxy folgt dem Controller-Pattern und reagiert event-basiert auf Cluster-Änderungen:
Watch-Objekte:
Synchronisation-Zyklus:
Services durchlaufen verschiedene Zustände, die kube-proxy entsprechend behandelt:
| Service-Zustand | Beschreibung | kube-proxy Aktion |
|---|---|---|
| Active mit Endpoints | Service hat verfügbare, ready Pods | Erstellt Routing-Regeln zu Pod-IPs |
| Active ohne Endpoints | Service definiert, aber keine ready Pods | Erstellt Service-IP, aber keine Backend-Regeln |
| Terminating | Service wird gelöscht | Entfernt alle zugehörigen Routing-Regeln |
| External Service | Service zeigt auf externe IP | Spezielle Routing-Regeln für externe Ziele |
Die verschiedenen kube-proxy Betriebsmodi spiegeln die Evolution der Kubernetes-Netzwerkperformance und -skalierung wider:
| Modus | Einführung | Status | Skalierung | Performance |
|---|---|---|---|---|
| Userspace | Kubernetes 1.0 | Deprecated | Niedrig (<100 Services) | Niedrig |
| iptables | Kubernetes 1.1 | Standard | Mittel (100-5k Services) | Mittel |
| IPVS | Kubernetes 1.9 | Empfohlen | Hoch (5k+ Services) | Hoch |
Der Userspace-Modus war die ursprüngliche Implementierung von kube-proxy und funktioniert als TCP/UDP-Proxy im User-Space:
Funktionsweise:
Client → iptables (redirect) → kube-proxy (userspace) → TCP-Proxy → Pod
Charakteristika:
Limitierungen:
Der iptables-Modus eliminiert den User-Space-Proxy und implementiert Service-Routing direkt im Linux-Kernel über Network Address Translation (NAT):
Funktionsweise:
Client → iptables (DNAT) → Pod (direkt)
Regel-Hierarchie:
KUBE-SERVICES (Eingangsregeln für alle Services)
↓
KUBE-SVC-[SERVICE-HASH] (Service-spezifische Load-Balancing-Kette)
↓
KUBE-SEP-[ENDPOINT-HASH] (Endpoint-spezifische DNAT-Regeln)
Load-Balancing-Mechanismus:
statistic ModulsVorteile:
Limitierungen:
Darstellung
des Packet-Flows durch iptables-Regelketten für
Service-Routing.
Der IPVS-Modus nutzt das IP Virtual Server Subsystem des Linux-Kernels für hochperformantes Layer-4-Load-Balancing:
Funktionsweise:
Client → IPVS (Virtual Server) → Real Server (Pod) (direkt)
IPVS-Konzepte:
Load-Balancing-Algorithmen:
| Algorithmus | Abkürzung | Beschreibung | Use Case |
|---|---|---|---|
| Round Robin | rr | Gleichmäßige Rotation | Standard für homogene Pods |
| Weighted Round Robin | wrr | Gewichtete Rotation | Pods mit unterschiedlicher Kapazität |
| Least Connection | lc | Verbindung zu Pod mit wenigsten aktiven Connections | Long-running Connections |
| Weighted Least Connection | wlc | Gewichtet + Least Connection | Heterogene Pods + Connection-sensitive |
| Source Hash | sh | Hash der Client-IP | Session Affinity |
| Destination Hash | dh | Hash der Ziel-IP | Seltener verwendet |
Vorteile:
Voraussetzungen:
ip_vs,
ip_vs_rr, ip_vs_wrr,
ip_vs_shipvsadm für
Management und DebuggingPerformance-Charakteristika:
| Metrik | iptables | IPVS | Verbesserung |
|---|---|---|---|
| Service Lookup | O(n) | O(1) | ~100x bei 10k Services |
| Rule Sync Time | 10+ Sekunden | <1 Sekunde | ~10x schneller |
| Memory Usage | Hoch bei vielen Regeln | Konstant | ~50% weniger |
| CPU Overhead | Steigend mit Regeln | Konstant | ~30% weniger |
ClusterIP ist der Standard-Service-Typ für interne Cluster-Kommunikation. Er stellt eine virtuelle IP-Adresse bereit, die nur innerhalb des Clusters erreichbar ist:
apiVersion: v1
kind: Service
metadata:
name: backend-api
spec:
type: ClusterIP # Standard-Type (kann weggelassen werden)
selector:
app: backend
ports:
- port: 3000 # Service-Port (eingehend)
targetPort: 8080 # Container-Port (ausgehend)
clusterIP: 10.96.1.100 # Automatisch zugewiesen oder manuell gesetztClusterIP-Eigenschaften:
Typische Verwendung:
NodePort-Services erweitern ClusterIP-Services um externe Erreichbarkeit durch Öffnung eines Ports auf allen Cluster-Nodes:
apiVersion: v1
kind: Service
metadata:
name: web-frontend
spec:
type: NodePort
selector:
app: web
ports:
- port: 80 # ClusterIP-Port (intern)
targetPort: 8080 # Container-Port
nodePort: 30080 # Node-Port (extern, 30000-32767)NodePort-Traffic-Flow:
External Client → NodeIP:30080 → ClusterIP:80 → PodIP:8080
NodePort-Charakteristika:
Praktische Überlegungen:
LoadBalancer-Services nutzen Cloud-Provider-spezifische Load-Balancer für professionelle externe Zugänglichkeit:
apiVersion: v1
kind: Service
metadata:
name: public-api
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
spec:
type: LoadBalancer
selector:
app: api
ports:
- port: 443
targetPort: 8443
status:
loadBalancer:
ingress:
- hostname: api-lb-123456.us-west-2.elb.amazonaws.comLoadBalancer-Integration:
| Cloud Provider | Load Balancer Typ | Annotations |
|---|---|---|
| AWS | ELB, ALB, NLB | aws-load-balancer-type,
aws-load-balancer-scheme |
| GCP | Cloud Load Balancing | cloud.google.com/load-balancer-type |
| Azure | Azure Load Balancer | service.beta.kubernetes.io/azure-load-balancer-internal |
| MetalLB | On-Premise L2/L3 | metallb.universe.tf/address-pool |
LoadBalancer-Traffic-Flow:
Internet → Cloud LB → NodePort → ClusterIP → Pod
ExternalName-Services bieten DNS-Aliasing für externe Services ohne kube-proxy-Involvement:
apiVersion: v1
kind: Service
metadata:
name: external-database
spec:
type: ExternalName
externalName: prod-db.company.comAnwendungsfälle:
Vergleichende Darstellung aller Service-Typen und ihrer
Netzwerk-Implementation.
kube-proxy routing basiert auf dem Endpoints-Controller, der kontinuierlich die Verfügbarkeit und Bereitschaft von Pods überwacht:
Endpoints-Lifecycle:
Readiness vs. Liveness Integration:
containers:
- name: app
readinessProbe: # Bestimmt Endpoint-Aufnahme
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
livenessProbe: # Bestimmt Pod-Restart
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30Endpoint-Status und Traffic-Routing:
| Pod-Status | Readiness | Endpoints | kube-proxy Routing |
|---|---|---|---|
| Running + Ready | True | Included | Receives Traffic |
| Running + Not Ready | False | Excluded | No Traffic |
| Terminating + Ready | True | Excluded | No Traffic (Grace Period) |
| Failed | False | Excluded | No Traffic |
Session Affinity ermöglicht sticky sessions, bei denen aufeinanderfolgende Requests vom gleichen Client an denselben Pod geleitet werden:
ClientIP-basierte Affinity:
spec:
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 86400 # 24 Stunden Session-PersistenzImplementation in verschiedenen Modi:
iptables-Modus:
IPVS-Modus:
sh (Source Hash) AlgorithmusAnwendungsfälle für Session Affinity:
Überlegungen und Limitierungen:
EndpointSlices lösen Skalierungsprobleme von traditionellen Endpoints-Objekten bei Services mit vielen Pods:
Traditionelle Endpoints-Limitierungen:
EndpointSlices-Vorteile:
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: web-service-slice-1
labels:
kubernetes.io/service-name: web-service
addressType: IPv4
endpoints:
- addresses:
- "10.244.1.10"
conditions:
ready: true
topology:
kubernetes.io/hostname: worker-node-1
topology.kubernetes.io/zone: us-west-2a
ports:
- port: 8080
protocol: TCPEndpointSlices-Charakteristika:
ExternalTrafficPolicy bestimmt, wie externer Traffic (NodePort/LoadBalancer) durch den Cluster geleitet wird:
Cluster Policy (Default):
spec:
externalTrafficPolicy: ClusterEigenschaften:
Local Policy:
spec:
externalTrafficPolicy: LocalEigenschaften:
Traffic-Flow-Vergleich:
| Policy | Traffic Flow | Source IP | Load Distribution |
|---|---|---|---|
| Cluster | External → NodeA → NodeB → Pod | Node IP | Gleichmäßig |
| Local | External → NodeA → Pod (same node) | Client IP | Pod-Placement abhängig |
Service-basierte Zugriffe (NodePort/LoadBalancer):
Ingress-basierte Zugriffe:
# Service-basiert
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: web
---
# Ingress-basiert
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: api.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 80
Vergleichende Darstellung verschiedener Patterns für externen
Cluster-Zugriff.
Bei Service-Connectivity-Problemen ist ein systematischer Layer-by-Layer-Ansatz empfehlenswert:
Layer 1: DNS-Resolution
# DNS-Auflösung testen
kubectl exec -it debug-pod -- nslookup web-service.default.svc.cluster.local
# CoreDNS-Status prüfen
kubectl get pods -n kube-system -l k8s-app=kube-dns
kubectl logs -n kube-system -l k8s-app=kube-dnsLayer 2: Service-Konfiguration
# Service-Definition validieren
kubectl get service web-service -o yaml
kubectl describe service web-service
# Endpoints/EndpointSlices prüfen
kubectl get endpoints web-service
kubectl get endpointslices -l kubernetes.io/service-name=web-serviceLayer 3: Pod-Readiness
# Pod-Status und Readiness prüfen
kubectl get pods -l app=web -o wide
kubectl describe pod <pod-name>
# Readiness Probe Logs
kubectl logs <pod-name> --previousLayer 4: kube-proxy Konfiguration
# kube-proxy Status
kubectl get pods -n kube-system -l k8s-app=kube-proxy
kubectl logs -n kube-system -l k8s-app=kube-proxy
# kube-proxy Konfiguration
kubectl get configmap kube-proxy -n kube-system -o yamliptables-Modus Debugging:
# Service-spezifische Regelketten anzeigen
iptables -t nat -L KUBE-SERVICES -n --line-numbers
iptables -t nat -L KUBE-SVC-<SERVICE-HASH> -n
# Packet-Zähler für Traffic-Analysis
iptables -t nat -L -n -v | grep <service-ip>
# Connection-Tracking für aktive Sessions
conntrack -L -p tcp --dport 80 | grep <service-ip>IPVS-Modus Debugging:
# Virtual Services auflisten
ipvsadm -Ln
# Service-spezifische Real Servers
ipvsadm -Ln -t <service-ip>:<port>
# Connection-Statistiken
ipvsadm -Ln --stats --connection
# Rate-Limiting und Performance-Metriken
ipvsadm -Ln --rateNetwork Connectivity Testing:
# ClusterIP-Erreichbarkeit testen
kubectl run debug --image=nicolaka/netshoot -it --rm
# Im Pod:
curl -v http://<service-ip>:<port>
nc -zv <service-ip> <port>
# Pod-zu-Pod direkte Connectivity
curl -v http://<pod-ip>:<container-port>
# DNS-basierte Service-Resolution
curl -v http://<service-name>.<namespace>.svc.cluster.localProblem: Service nicht erreichbar
Mögliche Ursachen und Debugging:
Problem: Ungleichmäßige Load-Distribution
Ursachen-Analyse:
Problem: Source-IP nicht verfügbar
Typische Szenarien:
Lösungsansätze:
Kleine Cluster (< 100 Services, < 1000 Pods):
Mittlere Cluster (100-1000 Services, 1000-10000 Pods):
Große Cluster (> 1000 Services, > 10000 Pods):
Performance-Metriken für Modus-Entscheidung:
| Metrik | iptables Limit | IPVS Empfehlung |
|---|---|---|
| Rules-Sync-Duration | > 10 Sekunden | < 1 Sekunde |
| Services × Endpoints | > 50.000 | Unbegrenzt |
| CPU-Usage (kube-proxy) | > 50% | < 10% |
| Memory-Usage | > 2GB | < 500MB |
Wichtige kube-proxy Metriken:
| Metrik | Beschreibung | Alert-Threshold |
|---|---|---|
kubeproxy_sync_proxy_rules_duration_seconds |
Zeit für Regel-Synchronisation | > 10s |
kubeproxy_sync_proxy_rules_last_timestamp_seconds |
Letzte erfolgreiche Synchronisation | > 300s alt |
kubeproxy_sync_proxy_rules_iptables_restore_failures_total |
Fehlgeschlagene iptables-Updates | > 0 |
kubeproxy_network_programming_duration_seconds |
End-to-End Network Programming Latenz | > 30s |
Prometheus AlertManager Regeln:
groups:
- name: kube-proxy
rules:
- alert: KubeProxyDown
expr: up{job="kube-proxy"} == 0
for: 5m
annotations:
summary: "kube-proxy is down"
- alert: KubeProxyRulesSyncLatency
expr: kubeproxy_sync_proxy_rules_duration_seconds > 10
for: 2m
annotations:
summary: "kube-proxy rules sync is taking too long"Service-Level Monitoring:
# Service Response Time Monitoring
kubectl run monitoring --image=nicolaka/netshoot --rm -it
# Continuous health checks
while true; do
curl -w "@curl-format.txt" -o /dev/null -s http://service-name/health
sleep 5
donekube-proxy Konfiguration-Tuning:
# kube-proxy ConfigMap Optimierung
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-proxy
namespace: kube-system
data:
config.conf: |
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs" # IPVS für bessere Performance
ipvs:
scheduler: "rr" # Round-Robin Load-Balancing
syncPeriod: "30s" # Reduzierte Sync-Frequenz
minSyncPeriod: "5s" # Minimum zwischen Syncs
iptables:
syncPeriod: "30s"
minSyncPeriod: "10s"
masqueradeAll: false # Nur bei NodePort/LoadBalancer
metricsBindAddress: "0.0.0.0:10249" # Metrics-Endpoint
enableProfiling: true # Performance-ProfilingKernel-Parameter für High-Performance:
# Erhöhung der Connection-Tracking-Limits
echo 'net.netfilter.nf_conntrack_max = 1048576' >> /etc/sysctl.conf
echo 'net.netfilter.nf_conntrack_buckets = 262144' >> /etc/sysctl.conf
# TCP-Optimierung für hohe Connection-Raten
echo 'net.core.somaxconn = 32768' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 16384' >> /etc/sysctl.conf
# Anwendung der Einstellungen
sysctl -pkube-proxy arbeitet komplementär zu CNI-Plugins - beide haben unterschiedliche Verantwortlichkeiten im Kubernetes-Netzwerk-Stack:
Verantwortlichkeitsaufteilung:
| Komponente | Verantwortlichkeit | Scope |
|---|---|---|
| CNI-Plugin | Pod-zu-Pod-Kommunikation, IP-Zuweisung, Route-Management | L3-Netzwerk (IP-Layer) |
| kube-proxy | Service-zu-Pod-Mapping, Load-Balancing, External Access | L4-Abstraktion (Service-Layer) |
Beispiel-Integration mit Calico:
# Calico NetworkPolicy beeinflusst Pod-zu-Pod-Traffic
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
# kube-proxy Service-Regeln haben Vorrang bei Service-Traffic
apiVersion: v1
kind: Service
metadata:
name: protected-service
spec:
selector:
app: protected
ports:
- port: 80Calico + kube-proxy Regel-Hierarchie:
Cilium kube-proxy Replacement bietet eine eBPF-basierte Alternative, die kube-proxy komplett ersetzen kann:
Traditioneller Stack:
Application → Service → kube-proxy (iptables/IPVS) → CNI → Pod
Cilium-basierter Stack:
Application → Service → Cilium eBPF → Pod (direkt)
Cilium Vorteile gegenüber kube-proxy:
| Feature | kube-proxy | Cilium eBPF |
|---|---|---|
| Performance | Kernel-Space (iptables/IPVS) | Kernel-Space (eBPF) |
| Latenz | ~0.1-1ms | ~0.01-0.1ms |
| Skalierung | Linear (IPVS) | Konstant |
| L7 Load-Balancing | Nicht verfügbar | HTTP/gRPC-aware |
| Observability | Begrenzt | Umfassend (Hubble) |
| Security | Network Policies extern | Integrierte L3-L7-Policies |
Cilium kube-proxy Replacement Konfiguration:
# Cilium ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: cilium-config
namespace: kube-system
data:
# kube-proxy Replacement aktivieren
kube-proxy-replacement: "strict"
k8s-service-host: "10.0.0.1"
k8s-service-port: "6443"
# eBPF-Features
enable-l7-proxy: "true"
enable-ipv4: "true"
enable-ipv6: "false"
# Performance-Optimierung
preallocate-bpf-maps: "true"
bpf-lb-algorithm: "maglev" # Konsistentes HashingMigration zu Cilium:
# 1. Cilium mit kube-proxy Replacement installieren
helm install cilium cilium/cilium \
--set kubeProxyReplacement=strict \
--set k8sServiceHost=<APISERVER_IP> \
--set k8sServicePort=6443
# 2. kube-proxy DaemonSet entfernen
kubectl delete daemonset kube-proxy -n kube-system
# 3. Validation
cilium status
cilium service listService Mesh (Istio, Linkerd) arbeitet oberhalb von kube-proxy und erweitert Service-Funktionalität:
Architektur-Layer:
Application Layer │ Service Mesh (Istio/Linkerd)
│ ├─ mTLS, Traffic Management
│ ├─ Circuit Breaking, Retries
│ └─ Observability, Security
────────────────────────────────────────────────────
Service Layer │ kube-proxy
│ ├─ Service Discovery
│ ├─ Load Balancing
│ └─ External Access
────────────────────────────────────────────────────
Network Layer │ CNI Plugin (Calico/Flannel)
│ ├─ Pod-zu-Pod Networking
│ ├─ IP Address Management
│ └─ Network Policies
Service Mesh + kube-proxy Interaktion:
Betriebsmodus-Auswahl:
Service-Design-Patterns:
Monitoring und Alerting:
Security-Überlegungen:
Bei Service-Connectivity-Problemen:
DNS-Resolution validieren
nslookup service-name.namespace.svc.cluster.localService-Konfiguration prüfen
kubectl describe service <service-name>
kubectl get endpoints <service-name>Pod-Readiness verifizieren
kubectl get pods -l <selector> -o widekube-proxy Status kontrollieren
kubectl get pods -n kube-system -l k8s-app=kube-proxyNetzwerk-Rules inspizieren
# iptables-Modus
iptables -t nat -L KUBE-SERVICES
# IPVS-Modus
ipvsadm -LnPerformance-Probleme debuggen:
Sync-Latenz messen
curl http://node-ip:10249/metrics | grep sync_durationResource-Usage prüfen
kubectl top pods -n kube-system -l k8s-app=kube-proxyNetwork-Overhead analysieren
iftop -i eth0 # Network Bandwidth per Interface
ss -tuln # Active Network ConnectionsUpgrade von iptables zu IPVS:
# 1. IPVS-Module auf allen Nodes aktivieren
for node in $(kubectl get nodes -o name); do
kubectl debug $node -it --image=ubuntu -- bash -c "chroot /host modprobe ip_vs ip_vs_rr"
done
# 2. kube-proxy ConfigMap aktualisieren
kubectl patch configmap kube-proxy -n kube-system --patch '
data:
config.conf: |
mode: "ipvs"
ipvs:
scheduler: "rr"
'
# 3. kube-proxy DaemonSet Rolling Update
kubectl rollout restart daemonset kube-proxy -n kube-system
kubectl rollout status daemonset kube-proxy -n kube-system
# 4. Validation
kubectl get pods -n kube-system -l k8s-app=kube-proxy
ipvsadm -Ln # Auf Worker Nodes ausführenMonitoring während Migration: