Kubernetes Expose-Befehl

KubernetesKubernetesBeginner
Jetzt üben

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

Einführung

Der Befehl expose in Kubernetes ist ein einfaches, aber leistungsstarkes Werkzeug, um einen Pod oder eine Bereitstellung (Deployment) über einen Netzwerkdienst zugänglich zu machen. In diesem Lab werden Sie durch den Prozess geführt, einen Kubernetes-Cluster zu starten, eine Bereitstellung zu erstellen, diese als Dienst bereitzustellen und auf den Dienst zuzugreifen, um seine Funktionalität zu überprüfen. Am Ende dieses Labs werden Sie genau verstehen, wie Sie Bereitstellungen zugänglich machen und mit Diensten in Kubernetes arbeiten können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/port_forward("Port-Forward") subgraph Lab Skills kubernetes/initialization -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/get -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/create -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/delete -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/expose -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/run -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/describe -.-> lab-8452{{"Kubernetes Expose-Befehl"}} kubernetes/port_forward -.-> lab-8452{{"Kubernetes Expose-Befehl"}} end

Minikube starten

Um Kubernetes lokal auszuführen, verwenden wir Minikube, das einen Ein-Knoten-Kubernetes-Cluster einrichtet. Bevor Sie mit Kubernetes-Operationen beginnen, stellen Sie sicher, dass Minikube gestartet und läuft.

  1. Öffnen Sie ein Terminal und starten Sie Minikube mit dem folgenden Befehl:

    minikube start

Dies initialisiert den Cluster. Wenn erforderlich, können Sie Ressourcenlimits mit Flags wie --cpus und --memory angeben, um sicherzustellen, dass der Cluster über ausreichende Ressourcen verfügt.

  1. Überprüfen Sie, ob Minikube läuft:

    minikube status

Sie sollten sehen, dass der Cluster und seine Komponenten erfolgreich laufen.

Das Starten von Minikube stellt sicher, dass Kubernetes bereit ist, in den folgenden Schritten Bereitstellungen (Deployments) und Dienste zu verwalten.

Eine Bereitstellung (Deployment) erstellen

In Kubernetes ist eine Bereitstellung (Deployment) ein Ressourcenobjekt, das sicherstellt, dass Ihre Anwendung immer die gewünschte Anzahl von Replikaten ausführt. Bereitstellungen verwalten Pods und helfen, ihren Zustand im Cluster aufrechtzuerhalten. In diesem Schritt werden Sie eine Bereitstellung erstellen, die den Nginx-Webserver ausführt.

  1. Verwenden Sie den folgenden Befehl, um eine Bereitstellung namens hello-world mit dem nginx-Image zu erstellen:

    kubectl create deployment hello-world --image=nginx

Dieser Befehl erstellt eine Bereitstellung mit einem einzelnen Pod, der den Nginx-Webserver ausführt. Das Flag --image gibt das Container-Image an, das verwendet werden soll. Da die Anzahl der Replikate nicht explizit festgelegt ist, erstellt Kubernetes standardmäßig einen Pod.

  1. Überprüfen Sie, ob die Bereitstellung erfolgreich erstellt wurde, indem Sie folgenden Befehl ausführen:

    kubectl get deployments

Dieser Befehl listet alle Bereitstellungen im aktuellen Namespace auf und zeigt ihren Namen, die gewünschte Anzahl von Replikaten und den Status an.

Durch die Erstellung dieser Bereitstellung stellen Sie sicher, dass Kubernetes die Pod-Erstellung und -Neustarts automatisch handhabt, um den gewünschten Anwendungsstatus aufrechtzuerhalten.

Der Befehl kubectl expose erkunden

Der Befehl kubectl expose wird verwendet, um einen neuen Kubernetes-Dienst (Service) zu erstellen, um eine vorhandene Ressource wie einen Pod, eine Bereitstellung (Deployment) oder einen Replikationscontroller zugänglich zu machen. Er vereinfacht die Netzwerkkonfiguration, indem er automatisch Dienste basierend auf der angegebenen Ressource erstellt.

Führen Sie den folgenden Befehl aus, um die verfügbaren Optionen für kubectl expose anzuzeigen:

kubectl expose -h

Sie werden die folgende Ausgabe sehen:

Stellen Sie eine Ressource als neuen Kubernetes-Dienst zur Verfügung.

Sucht nach einer Bereitstellung (Deployment), einem Dienst (Service), einem Replikatsatz (Replica Set), einem Replikationscontroller oder einem Pod anhand des Namens und verwendet den Selektor für diese Ressource als Selektor für einen neuen Dienst am angegebenen Port. Eine Bereitstellung oder ein Replikatsatz wird nur dann als Dienst verfügbar gemacht, wenn sein Selektor in einen Selektor umwandelbar ist, den der Dienst unterstützt, d. h. wenn der Selektor nur die matchLabels-Komponente enthält. Beachten Sie, dass wenn kein Port über --port angegeben wird und die zugänglich gemachte Ressource mehrere Ports hat, alle Ports vom neuen Dienst wiederverwendet werden. Auch wenn keine Labels angegeben werden, wird der neue Dienst die Labels von der Ressource wiederverwenden, die er zugänglich macht.

Mögliche Ressourcen sind (groß- und kleinschreibungsegal):
  pod (po), service (svc), replicationcontroller (rc), deployment (deploy), replicaset (rs)

Beispiele:
  ## Erstellen Sie einen Dienst für ein repliziertes nginx, das am Port 80 dient und mit den Containern am Port 8000 verbindet
  kubectl expose rc nginx --port=80 --target-port=8000

  ## Erstellen Sie einen Dienst für einen Replikationscontroller, der durch Typ und Namen in "nginx-controller.yaml" identifiziert wird,
  der am Port 80 dient und mit den Containern am Port 8000 verbindet
  kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000

  ## Erstellen Sie einen Dienst für einen Pod valid-pod, der am Port 444 dient und den Namen "frontend" hat
  kubectl expose pod valid-pod --port=444 --name=frontend

  ## Erstellen Sie einen zweiten Dienst basierend auf dem obigen Dienst, der den Containerport 8443 als Port 443 zugänglich macht und den Namen
  "nginx-https" hat
  kubectl expose service nginx --port=443 --target-port=8443 --name=nginx-https

  ## Erstellen Sie einen Dienst für eine replizierte Streaminganwendung am Port 4100, der UDP-Verkehr ausgleicht und 'video-stream' heißt.
  kubectl expose rc streamer --port=4100 --protocol=UDP --name=video-stream

  ## Erstellen Sie einen Dienst für ein repliziertes nginx unter Verwendung eines Replikatsatzes, der am Port 80 dient und mit den Containern am
  Port 8000 verbindet
  kubectl expose rs nginx --port=80 --target-port=8000

  ## Erstellen Sie einen Dienst für eine nginx-Bereitstellung, die am Port 80 dient und mit den Containern am Port 8000 verbindet
  kubectl expose deployment nginx --port=80 --target-port=8000

Die Bereitstellung (Deployment) zugänglich machen

Um die Bereitstellung von außerhalb des Kubernetes-Clusters zugänglich zu machen, müssen Sie sie als Dienst (Service) verfügbar machen. Ein Dienst in Kubernetes fungiert als stabiler Netzwerkendpunkt, auch wenn sich die zugrunde liegenden Pods ändern.

  1. Führen Sie den folgenden Befehl aus, um einen NodePort-Dienst namens hello-service zu erstellen:

    kubectl expose deployment hello-world --name=hello-service --port=80 --target-port=80 --type=NodePort
    • Das Flag --port gibt den Port an, über den der Dienst externen Clients zur Verfügung gestellt wird.
    • Das Flag --target-port definiert den Port auf dem Container, an den der Dienst den Verkehr leitet.
    • Das Flag --type=NodePort macht den Dienst auf einem bestimmten Port auf jedem Knoten im Cluster zugänglich.
  2. Überprüfen Sie, ob der Dienst erfolgreich erstellt wurde:

    kubectl get services hello-service

Dieser Befehl zeigt Details des Dienstes an, einschließlich seines Typs und des zugewiesenen NodePorts.

Dienste wie NodePort ermöglichen es externen Clients, mit Pods im Kubernetes-Cluster zu interagieren, indem sie Anfragen an die richtigen Containerports weiterleiten.

Dienstdetails abrufen

Um auf den zugänglich gemachten Dienst zuzugreifen, benötigen Sie den NodePort, der dem Dienst zugewiesen wurde, und die interne IP-Adresse eines Knotens im Cluster. Diese Details ermöglichen es externen Clients, sich mit Ihrer Anwendung zu verbinden.

  1. Rufen Sie den dem hello-service zugewiesenen NodePort ab, indem Sie folgenden Befehl ausführen:

    kubectl get service hello-service -o jsonpath='{.spec.ports[0].nodePort}'

Dieser Befehl extrahiert den NodePort-Wert aus der Dienstdefinition.

  1. Erhalten Sie die interne IP-Adresse eines beliebigen Knotens im Cluster mit dem folgenden Befehl:

    kubectl get nodes -o wide

Notieren Sie das Feld INTERNAL-IP in der Ausgabe. Diese IP-Adresse repräsentiert die private Netzwerkadresse des Knotens.

Mit dem NodePort und der internen IP-Adresse haben Sie nun die erforderlichen Details, um von außen auf den Dienst zuzugreifen.

Zugriff auf den Dienst

Mit dem NodePort und der IP-Adresse des Knotens können Sie den Dienst mit einem Tool wie curl oder einem Webbrowser testen.

  1. Ersetzen Sie <NODE_IP> und <NODE_PORT> durch die in der vorherigen Stufe abgerufenen Werte und führen Sie dann folgenden Befehl aus:

    curl <NODE_IP>:<NODE_PORT>
  2. Wenn alles korrekt konfiguriert ist, sollten Sie die Standard-Nginx-Willkommensseite im Terminal sehen. Diese Ausgabe bestätigt, dass der Dienst läuft und von außen zugänglich ist.

<!doctype html>
<html>
  <head>
    <title>Welcome to nginx!</title>
    <style>
      html {
        color-scheme: light dark;
      }
      body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
      }
    </style>
  </head>
  <body>
    <h1>Welcome to nginx!</h1>
    <p>
      If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.
    </p>

    <p>
      For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br />
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.
    </p>

    <p><em>Thank you for using nginx.</em></p>
  </body>
</html>

Der Zugriff auf den Dienst zeigt, wie Kubernetes den Datenverkehr zwischen Clients und den entsprechenden Containerports leitet.

Ressourcen bereinigen

Nach Abschluss des Labs ist es wichtig, die von Ihnen erstellten Ressourcen zu bereinigen, um eine unnötige Ressourcenverbrauch in Ihrem Kubernetes-Cluster zu vermeiden.

  1. Löschen Sie den hello-service, indem Sie folgenden Befehl ausführen:

    kubectl delete service hello-service
  2. Entfernen Sie die hello-world-Bereitstellung (Deployment) mit dem folgenden Befehl:

    kubectl delete deployment hello-world

Das Bereinigen von Ressourcen stellt sicher, dass Ihr Cluster in einem sauberen Zustand bleibt und für zukünftige Experimente bereit ist.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den expose-Befehl in Kubernetes verwenden, um einen NodePort-Dienst zu erstellen. Sie haben eine Nginx-Bereitstellung (Deployment) zugänglich gemacht, über den NodePort darauf zugegriffen und seine Funktionalität überprüft. Diese Übung hat die Kernkonzepte von Kubernetes-Diensten (Services) gezeigt und wie sie den Netzwerkzugang zu Ihren Workloads ermöglichen.