Ein Kubernetes EndpointSlice ist die moderne Form der Service-Erkennung: Er bündelt die aktuellen Ziel-IPs und Ports hinter einem Service. Der EndpointSlice-Controller im kube-controller-manager erzeugt die Slices aus den Pods, die zum Label-Selektor des Services passen. Die EndpointSlice-API (discovery.k8s.io/v1) löst dabei die ältere Endpoints-API ab, die weiterhin unterstützt wird.
Warum Slices?
Ein großes Deployment kann Tausende Pods hinter einem Service haben. Die alte Endpoints-Ressource musste alle Adressen in einem einzigen Objekt speichern – bei sehr großen Services wurde das unpraktisch. EndpointSlices begrenzen die Größe: Standardmäßig enthält ein Slice höchstens 100 Endpoints. Ein Service mit 5000 Pods wird also auf 50 Slices verteilt. Jedes Slice trägt das Label kubernetes.io/service-name und muss für die Gesamtliste der Endpoints zusammengeführt werden.
Aufbau eines EndpointSlice
addressType:IPv4,IPv6oderFQDN.endpoints: Liste mitaddresses,conditions(ready,serving,terminating),hostname,targetRef,nodeNameundtopology.ports: bis zu 100 Ports mit Name, Protokoll und Nummer.
Die Bedingung serving zeigt an, ob ein Endpoint gerade Anfragen bedienen kann (bei Pods entspricht das der Ready-Bedingung); terminating markiert Pods, die sich im Herunterfahren befinden und laufende Verbindungen noch zu Ende führen dürfen.
Wer nutzt EndpointSlices?
kube-proxy beobachtet Service- und EndpointSlice-Objekte und programmiert daraus die Weiterleitungsregeln. Auch der DNS-Dienst liefert für Headless Services die A-Records aus den Slices. Die Session Affinity eines Services klebt einen Client an genau eine dieser Ziel-IPs. Ingress-Controller (ausgewählt per IngressClass) routen den HTTP-Verkehr auf Services, die ihre Ziele über EndpointSlices ermitteln. Manuell gepflegte Endpoints-Objekte spiegelt der EndpointSliceMirroring-Controller in Slices, damit auch sie von der neuen API profitieren.
Verwandte Grundlagen: Kubernetes Service, kube-controller-manager, StatefulSet, DNS.