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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/set("Set") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") subgraph Lab Skills kubernetes/initialization -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/get -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/create -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/set -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/expose -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/apply -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/describe -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/exec -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} kubernetes/label -.-> lab-15815{{"Verbinden von Pods mit Kubernetes-Services"}} end

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 Services

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

kubectl run my-pod-2 --image=nginx --restart=Never

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

Wechseln Sie in den Container und verwenden Sie curl, um auf den Service zuzugreifen, wie Sie es in Schritt 3 getan haben. Diesmal sollten Sie eine Fehlermeldung erhalten, die darauf hinweist, dass die Verbindung abgelehnt wurde.

Dies liegt daran, dass der Service jetzt auf eine andere Gruppe von Pods abzielt als diejenigen, die der Test-Pod ausführt. Um dies zu beheben, können Sie die Bezeichnung des Pods aktualisieren, um mit dem neuen Selektor im Service übereinzustimmen.

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

kubectl label pod my-pod-2 app=busybox

Dadurch wird die Bezeichnung app=busybox dem Test-Pod hinzugefügt.

Wenn Sie jetzt erneut den curl-Befehl ausführen, sollten Sie die Standard-Nginx-Seite erhalten, was darauf hinweist, dass der Service ordnungsgemäß 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.