Isolieren von Workloads mit Namespaces

KubernetesKubernetesBeginner
Jetzt üben

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

Einführung

Kubernetes bietet Namespaces (Namensräume) als Möglichkeit, Workloads und Ressourcen in einem Cluster voneinander zu isolieren. In diesem Lab lernen Sie, wie Sie Namespaces verwenden können, um Workloads und Ressourcen zu isolieren. Sie werden einen Namespace erstellen, eine einfache Webanwendung in diesem Namespace bereitstellen und überprüfen, dass die Webanwendung von den anderen Ressourcen im Cluster isoliert ist.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced 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/expose("Expose") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/get -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/create -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/expose -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/apply -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/describe -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} kubernetes/exec -.-> lab-9199{{"Isolieren von Workloads mit Namespaces"}} end

Starten des Minikube-Clusters

Bevor Sie Ressourcen erstellen, 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.
    • Minikube kann je nach Leistung Ihres Systems einige Minuten dauern, um zu starten.
  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.

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

Erstellen eines Namespaces

In diesem Schritt erstellen Sie einen Namespace (Namensraum) namens webapp, um die Webanwendung von den anderen Ressourcen im Cluster zu isolieren.

Erstellen Sie eine Datei namens namespace.yaml mit folgendem Inhalt:

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

Wenden Sie den Namespace auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f namespace.yaml

Überprüfen Sie, ob der Namespace erstellt wurde, mit folgendem Befehl:

kubectl get namespaces

Sie sollten den webapp-Namespace in der Liste der Namespaces sehen.

Bereitstellen einer Webanwendung

In diesem Schritt werden Sie eine einfache Webanwendung im webapp-Namespace (Namensraum) bereitstellen.

Erstellen Sie eine Datei namens web-app.yaml mit folgendem Inhalt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Diese Datei erstellt ein Deployment (Bereitstellung) mit einer Replik eines Containers, der die neueste Version des Nginx-Webservers ausführt.

Wenden Sie das Deployment auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f web-app.yaml

Überprüfen Sie, ob die Webanwendung im webapp-Namespace läuft, mit folgendem Befehl:

kubectl get pods -n webapp

Sie sollten den web-app-Pod in der Liste der Pods sehen, die im webapp-Namespace laufen.

Freigeben der Webanwendung

In diesem Schritt werden Sie die Webanwendung für die Außenwelt mithilfe eines Kubernetes-Services (Dienstes) zugänglich machen.

Erstellen Sie eine Datei namens web-app-service.yaml mit folgendem Inhalt:

apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: webapp
spec:
  selector:
    app: web-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

Diese Datei erstellt einen Service, der die Webanwendung im Cluster über eine ClusterIP zugänglich macht.

Wenden Sie den Service auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f web-app-service.yaml

Überprüfen Sie, ob der Service im webapp-Namespace (Namensraum) läuft, mit folgendem Befehl:

kubectl get services -n webapp

Sie sollten den web-app-Service in der Liste der Services sehen, die im webapp-Namespace laufen.

Überprüfen der Namespace-Isolation

In diesem Schritt überprüfen Sie, ob die Webanwendung von den anderen Ressourcen im Cluster isoliert ist.

Erstellen Sie eine Datei namens other-app.yaml mit folgendem Inhalt:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: other
spec:
  replicas: 1
  selector:
    matchLabels:
      app: other
  template:
    metadata:
      labels:
        app: other
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

In dieser Datei erstellen Sie ein weiteres Deployment namens other im Standard-Namespace (default namespace), das einen Container mit dem nginx-Image ausführt.

Wenden Sie das Deployment auf Ihren Cluster mit folgendem Befehl an:

kubectl apply -f other-app.yaml

Überprüfen Sie, ob das Deployment im Standard-Namespace läuft, mit folgendem Befehl:

kubectl get pods | grep other

Sie sollten den other-Pod in der Liste der Pods sehen, die im Standard-Namespace laufen.

Überprüfen des Zugriffs zwischen Namespaces

Zunächst finden Sie den Namen des Pods, der Ihre Anwendung ausführt, indem Sie folgenden Befehl ausführen:

kubectl get pods -l app=other

Sie sollten den other-Pod sehen. Notieren Sie sich den Namen des Pods.

Als Nächstes führen Sie folgenden Befehl aus, um eine Shell-Sitzung im Container zu öffnen, der Ihre Anwendung ausführt:

kubectl exec -it pod-name -- /bin/sh

Ersetzen Sie <pod-name> durch den Namen des Pods, den Sie zuvor notiert haben.

Sobald Sie in der Shell-Sitzung sind, führen Sie folgenden Befehl aus, um auf das web-app-Deployment zuzugreifen:

curl web-app.webapp

Sie sollten die HTML-Antwort des Nginx-Webservers sehen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Namespaces (Namensräume) verwenden können, um Workloads und Ressourcen in einem Kubernetes-Cluster zu isolieren. Sie haben einen Namespace erstellt, eine einfache Webanwendung in diesem Namespace bereitgestellt, die Webanwendung für die Außenwelt mithilfe eines Kubernetes-Services zugänglich gemacht und überprüft, ob die Webanwendung von den anderen Ressourcen im Cluster isoliert ist.