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, IPv6 oder FQDN.
  • endpoints: Liste mit addresses, conditions (ready, serving, terminating), hostname, targetRef, nodeName und topology.
  • 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.