TL;DR
In Kubernetes v1.36 wird das .spec.externalIPs-Feld für Services offiziell als veraltet markiert und soll in zukünftigen Versionen entfernt werden. Dies geschieht aufgrund von Sicherheitsbedenken, da die Funktionalität potenzielle Angriffsvektoren birgt. Alternativen wie manuell verwaltete LoadBalancer-Services oder der Einsatz von Drittanbieter-Load-Balancer-Controllern wie MetalLB werden empfohlen.
Hauptinhalt
Kubernetes hat das .spec.externalIPs-Feld für Services, das ursprünglich dazu gedacht war, cloud-ähnliche Load-Balancer-Funktionalitäten in nicht-cloudbasierten Clustern bereitzustellen, in der Version 1.36 als veraltet erklärt. Die Entscheidung wurde getroffen, nachdem festgestellt wurde, dass die API davon ausgeht, dass alle Benutzer im Cluster vollständig vertrauenswürdig sind. In Szenarien, in denen dies nicht zutrifft, könnten Sicherheitsanfälligkeiten, wie sie in CVE-2020-8554 beschrieben sind, ausgenutzt werden. Um die Nutzung des .spec.externalIPs-Feldes zu reduzieren, wurde bereits in Kubernetes 1.21 empfohlen, dieses Feld zu deaktivieren, und ein Admission Controller namens DenyServiceExternalIPs wurde eingeführt.
Die Sicherheitsprobleme, die mit der Nutzung von .spec.externalIPs verbunden sind, bleiben weiterhin bestehen. Daher wird erwartet, dass in einer zukünftigen Version von Kubernetes die Implementierung dieser Funktionalität aus kube-proxy entfernt wird. Zudem werden die Kriterien für die Kubernetes-Konformität aktualisiert, um sicherzustellen, dass konforme Implementierungen die Unterstützung für .spec.externalIPs nicht bieten.
Es ist wichtig zu beachten, dass der Begriff "externe IP" in Kubernetes mehrere Bedeutungen hat. Die Abkündigung bezieht sich spezifisch auf das .spec.externalIPs-Feld. Wenn dieses Feld nicht in den Services verwendet wird, ist die Abkündigung nicht relevant. Dennoch wird empfohlen, den DenyServiceExternalIPs Admission Controller zu aktivieren, um eine zukünftige Nutzung des .spec.externalIPs-Feldes zu verhindern.
Technische Details/Implikationen
Für Benutzer, die das .spec.externalIPs-Feld derzeit verwenden, stehen mehrere Alternativen zur Verfügung. Eine Möglichkeit besteht darin, von .spec.externalIPs auf einen LoadBalancer-Service zu wechseln, wobei die Load-Balancer-IP manuell zugewiesen wird. Dies hat jedoch ähnliche Sicherheitsimplikationen, da die IP-Adresse in der .status des Services gespeichert wird und nur von Benutzern mit entsprechenden Berechtigungen bearbeitet werden kann.
Eine bessere Alternative ist die Verwendung eines nicht-cloudbasierten Load-Balancer-Controllers, wie MetalLB. Dieser ermöglicht es Administratoren, IP-Adressbereiche zu konfigurieren, die den Services zugewiesen werden können, und stellt sicher, dass keine zwei Services dieselbe IP-Adresse verwenden. Dies löst die Sicherheitsprobleme, die mit der Nutzung von .spec.externalIPs verbunden sind.
Fazit/Ausblick
Die Abkündigung des .spec.externalIPs-Feldes in Kubernetes v1.36 stellt einen wichtigen Schritt in Richtung einer sichereren Cluster-Architektur dar. Die Nutzung von Alternativen wie MetalLB wird empfohlen, um die Funktionalität eines Load-Balancers sicher und effizient bereitzustellen.