Verbinden von Pods mit Kubernetes-Services

KubernetesKubernetesBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In Kubernetes sind Pods vorübergehend und können jederzeit beendet und neu erstellt werden. Dies stellt eine Herausforderung bei der Netzwerkkonfiguration dar, da es schwierig ist, direkt mit einem Pod zu verbinden. Um dieses Problem zu lösen, bietet Kubernetes eine höherwertige Abstraktion namens Service. Ein Service bietet eine stabile IP-Adresse und einen DNS-Namen für eine Gruppe von Pods, sodass andere Komponenten problemlos mit ihnen verbinden können. In diesem Lab (Übungsumgebung) lernen Sie, wie Sie Pods in Kubernetes über Services vernetzen können.

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Anfänger mit einer Abschlussquote von 95% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen können, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.

  1. Navigieren Sie in Ihr Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie in den Standard-Projektordner:

    cd /home/labex/project
  2. Starten Sie Minikube:

    Starten Sie Minikube, um einen Kubernetes-Cluster zu initialisieren:

    minikube start
    • Dieser Befehl richtet einen Ein-Knoten-Kubernetes-Cluster auf Ihrem lokalen Rechner ein.
    • Je nach Leistung Ihres Systems kann es einige Minuten dauern, bis Minikube gestartet ist.
  3. Überprüfen Sie, ob Minikube läuft:

    Überprüfen Sie den Status des Minikube-Clusters:

    minikube status
    • Suchen Sie nach Komponenten wie kubelet und apiserver, die als Running (Läuft) aufgeführt sind.
    • Wenn der Cluster nicht läuft, führen Sie minikube start erneut aus.

Falls Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.

Erstellen eines Pods

Der erste Schritt besteht darin, einen einfachen Pod zu erstellen. Erstellen Sie eine Datei mit dem Namen /home/labex/project/myapp-pod.yaml mit folgendem Inhalt:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
  labels:
    app: nginx
spec:
  containers:
    - name: my-container
      image: nginx

Speichern Sie die Datei und erstellen Sie den Pod, indem Sie den folgenden Befehl ausführen:

kubectl apply -f /home/labex/project/myapp-pod.yaml

Dadurch wird ein Pod mit dem Namen my-pod-1 erstellt, der einen einzelnen Container mit dem Nginx-Image ausführt.

Erstellen eines Services

Der zweite Schritt besteht darin, einen Service zu erstellen, der auf den Pod ausgerichtet ist, den Sie im vorherigen Schritt erstellt haben. Erstellen Sie eine Datei mit dem Namen /home/labex/project/service.yaml mit folgendem Inhalt:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: nginx
  ports:
    - name: http
      port: 80
      targetPort: 80

Speichern Sie die Datei und erstellen Sie den Service, indem Sie den folgenden Befehl ausführen:

kubectl apply -f /home/labex/project/service.yaml

Dadurch wird ein Service mit dem Namen my-service erstellt, der auf Pods mit der Bezeichnung app=nginx abzielt und Port 80 freigibt.

Testen des Services

Der dritte Schritt besteht darin, den Service zu testen, indem Sie ihn von einem anderen Pod aus zugreifen. Erstellen Sie eine Datei mit dem Namen /home/labex/project/test-pod-1.yaml mit folgendem Inhalt:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod-1
spec:
  containers:
    - name: my-container
      image: nginx
      command:
        - sleep
        - "3600"

Speichern Sie die Datei und erstellen Sie den Test-Pod, indem Sie den folgenden Befehl ausführen:

kubectl apply -f /home/labex/project/test-pod-1.yaml

Dadurch wird ein Pod mit dem Namen test-pod-1 erstellt, der einen einzelnen Container mit dem Busybox-Image ausführt.

Als Nächstes werden Sie in den Container wechseln und curl verwenden, um auf den Service zuzugreifen. Führen Sie den folgenden Befehl aus, um in den Container zu wechseln:

kubectl exec -it test-pod-1 -- sh

Dadurch wird eine Shell innerhalb des Containers geöffnet. Führen Sie aus der Shell den folgenden Befehl aus, um auf den Service zuzugreifen:

curl http://my-service

Dadurch wird die Standard-Nginx-Seite zurückgegeben, was darauf hinweist, dass der Service ordnungsgemäß funktioniert.

Aktualisieren des Services

Der vierte Schritt besteht darin, den Service zu aktualisieren, um auf eine andere Gruppe von Pods abzuzielen. Aktualisieren Sie das selector-Feld in der Datei /home/labex/project/service.yaml wie folgt:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: busybox
  ports:
    - name: http
      port: 80
      targetPort: 8

Speichern Sie die Datei und aktualisieren Sie den Service, indem Sie den folgenden Befehl ausführen:

kubectl apply -f service.yaml

Dadurch wird der Service aktualisiert, um auf Pods mit der Bezeichnung app=busybox abzuzielen.

Testen des aktualisierten Service

Der fünfte Schritt besteht darin, den aktualisierten Service zu testen, indem Sie von einem anderen Pod darauf zugreifen. Erstellen Sie einen neuen Test-Pod mit folgendem Befehl:

kubectl run my-pod-2 --image=busybox --restart=Never -- sleep 3600

Dadurch wird ein neuer Pod namens my-pod-2 mit einem einzelnen Container erstellt, der das Busybox-Image ausführt.

Exec in den Container und verwenden Sie curl, um auf den Service zuzugreifen, wie Sie es in Schritt 3 getan haben. Führen Sie den folgenden Befehl aus, um in den Container zu execen:

kubectl exec -it my-pod-2 -- sh

Dieses Mal sollten Sie einen Fehler erhalten, der darauf hinweist, dass die Verbindung verweigert wurde.

Dies liegt daran, dass der Service jetzt auf eine andere Gruppe von Pods abzielt als die, auf denen der Test-Pod ausgeführt wird. Um dies zu beheben, können Sie das Label des Pods aktualisieren, damit es mit dem neuen Selektor im Service übereinstimmt.

Führen Sie den folgenden Befehl aus, um das Label des Test-Pods zu aktualisieren:

kubectl label pod my-pod-2 app=busybox

Dadurch wird dem Test-Pod das Label app=busybox hinzugefügt.

Wenn Sie jetzt den curl-Befehl erneut ausführen, sollten Sie die Standard-Nginx-Seite erhalten, was darauf hindeutet, dass der Service korrekt funktioniert.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Pods in Kubernetes mit Services vernetzen können. Sie haben einen einfachen Pod erstellt, der das Nginx-Image ausführt, einen Service erstellt, um auf den Pod abzuzielen, und den Service getestet, indem Sie ihn von einem anderen Pod aus zugriffen haben. Sie haben auch gelernt, wie Sie den Service aktualisieren können, um auf eine andere Gruppe von Pods abzuzielen, und wie Sie die Bezeichnung eines Pods aktualisieren können, um mit dem neuen Selektor im Service übereinzustimmen. Services sind eine essentielle Komponente der Netzwerkkommunikation in Kubernetes und ermöglichen es Ihnen, auf zuverlässige und skalierbare Weise auf Pods zuzugreifen.