Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Kubernetes Headless-Service
Übersicht
Ein Service ist eine Kubernetes-Ressource, die einen einzigen Einstiegspunkt zu einem oder mehreren Pods bereitstellt. Genauer gesagt stellt ein Service eine Gruppe von Pods über einen einzigen Domänennamen und eine IP-Adresse im Netzwerk zur Verfügung. Sobald eine Anfrage den Service erreicht, leitet kube-proxy die Anfrage an einen der dahinterliegenden Pods weiter.
In diesem Tutorial lernen wir eine spezialisierte Form von Service-Ressourcen kennen, den sogenannten Headless Service. Im Gegensatz zum herkömmlichen Service erlaubt uns ein Headless Service, die IP-Adressen der einzelnen unterstützenden Pods direkt zu erhalten. Diese Fähigkeit eröffnet interessante Anwendungsfälle, die mit einem normalen Service nicht möglich wären.
Wir werden zunächst die grundlegende Konfiguration eines Headless Service behandeln und anschließend an einer praktischen Demonstration sehen, wie man ihn in der Praxis einsetzen kann.
Headless Service
In Kubernetes bezeichnet man einen Headless Service als eine Service-Ressource, der keine Cluster-IP-Adresse zugewiesen wird.
Um einen solchen Headless Service zu definieren, setzt man im Ressourcen-Definition das Feld spec.clusterIP
auf den Wert None
:
$ cat headless-svc.yaml apiVersion: v1 kind: Service metadata: name: headless-svc spec: clusterIP: None selector: app: web ports: - protocol: TCP port: 80 targetPort: 8080
Nachdem wir die Ressource auf unserem Cluster erstellt haben, können wir die Details mit dem Befehl kubectl get svc überprüfen:
$ kubectl get svc -o go-template='{{ .spec.clusterIPs }}' headless-svc [None]
Dabei verwenden wir die Option -o go-template, um speziell das Feld clusterIP des Services auszulesen. Wie zu erwarten war, weist die Kubernetes control plane einer Headless-Service-Ressource keine IP-Adresse zu.