Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Kubernetes Service und DNS

Nach dieser Lektion: Ich kann Pods einen gemeinsamen Namen geben und ihn von einem anderen Pod aus finden.

Lektion, 55 Min.12 BefehleKubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Wie finden sich Pods in Kubernetes?

Ein Service gibt einer Gruppe von Pods in Kubernetes einen festen Namen und eine feste Adresse. Andere Pods erreichen sie über diesen Namen, auch wenn die Pods wechseln.

Der Shop einer Buchhandlung in Hamburg läuft in zwei Pods. Das Kassenprogramm will den Shop erreichen. Die Adressen der Pods ändern sich aber bei jedem Neustart, der Name des Services bleibt.

Am Ende dieser Lektion

Notiz

Ich kann Pods einen gemeinsamen Namen geben und ihn von einem anderen Pod aus finden.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Serviceein fester Name und eine feste Adresse für eine Gruppe von Pods
Selectordie Labels, an denen ein Service seine Pods erkenntapp=laden
Portdie Nummer der Tür, an der ein Programm Anfragen annimmt8080
Cluster-DNSder Namensdienst, der Servicenamen in Adressen übersetzt
ClusterIPdie Adresse eines Services, die nur im Cluster gilt
Endpointdie Adresse eines Pods hinter einem Service

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Warum Pods keine feste Adresse haben

Jeder Pod bekommt beim Start eine eigene Adresse im Cluster. Wird er ersetzt, bekommt der neue Pod eine andere. Ein Programm, das sich eine Adresse merkt, findet seinen Pod nach dem Ersetzen nicht mehr.

Die Befehle unten legen den Namespace kurs3 an und darin das Deployment laden mit zwei Pods. Jeder Pod liefert mit httpd eine Seite auf Port 8080 aus, und die Seite nennt den Namen des Pods.

Den Namespace kurs3 anlegen

Befehl
kubectl create namespace kurs3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Deployment laden mit zwei Pods anlegen

Befehl
kubectl create deployment laden -n kurs3 --image=busybox:1.37.0 --replicas=2 --port=8080 -- sh -c 'mkdir -p /www; echo "Willkommen im Laden, antwortet $HOSTNAME" > /www/index.html; trap "exit 0" TERM; httpd -f -p 8080 -h /www & wait'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die laufenden Pods zählen

Befehl
kubectl get pods -n kurs3 --no-headers | grep -c Running

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Service wählt seine Pods mit einem Selector

Ein Service hat einen festen Namen und eine feste Adresse, die ClusterIP. Sie gilt nur im Cluster.

Der Selector sagt dem Service, welche Pods dahinterstehen: alle mit den passenden Labels. Fällt ein Pod aus oder kommt einer hinzu, ändert der Service seine Liste von selbst. Die Befehle legen einen Service für laden an. Er nimmt Anfragen auf Port 80 an und leitet sie an Port 8080 der Pods weiter.

Einen Service für das Deployment anlegen

Befehl
kubectl expose deployment laden -n kurs3 --port=80 --target-port=8080

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Service anzeigen

Befehl
kubectl get service laden -n kurs3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Selector des Services abfragen

Befehl
kubectl get service laden -n kurs3 -o jsonpath='{.spec.selector}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Pods mit dem Label app=laden zählen

Befehl
kubectl get pods -n kurs3 -l app=laden --no-headers | wc -l

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Ports, zwei Aufgaben

AngabeWert hierBedeutung
--port80Auf diesem Port nimmt der Service Anfragen an
--target-port8080An diesen Port des Pods leitet er weiter

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Der Name des Services ist eine Adresse

Sie müssen sich keine Adresse merken. Das Cluster-DNS übersetzt den Namen eines Services in seine ClusterIP. Der volle Name lautet dienst.namespace.svc.cluster.local.

Im selben Namespace genügt der kurze Name laden. Aus einem anderen Namespace schreiben Sie laden.kurs3. Die Befehle starten einen kurzen Pod tmp im Namespace kurs3, der eine Anfrage stellt und danach verschwindet.

Den Service aus einem Pod anfragen

Befehl
kubectl run -n kurs3 tmp --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- http://laden

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den vollen Namen im Cluster-DNS nachschlagen

Befehl
kubectl run -n kurs3 tmp --rm -i --restart=Never --image=busybox:1.37.0 -- nslookup laden.kurs3.svc.cluster.local

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den kurzen Namen aus dem Namespace default versuchen

Befehl
kubectl run tmp --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- -T 3 http://laden

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Namen mit Namespace aus default versuchen

Befehl
kubectl run tmp --rm -i --restart=Never --image=busybox:1.37.0 -- wget -qO- -T 3 http://laden.kurs3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele denken, ein Service gehöre zu einem Deployment. Er kennt aber nur Labels. Passt der Selector zu keinem Pod, ist die Liste leer, und jede Anfrage läuft ins Leere. Prüfen Sie bei einem Service ohne Antwort zuerst, ob der Selector zu den Labels der Pods passt.

Den Namespace kurs3 wieder löschen

Befehl
kubectl delete namespace kurs3

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: Kubernetes-Lab: ein k3s-Cluster mit einem Knoten für jede lernende Person auf einer privaten Ubuntu-VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.