Netzwerkeinstellungen mit Ingress in Kubernetes

KubernetesKubernetesBeginner
Jetzt üben

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

Einführung

In diesem Lab lernen Sie, wie Sie Ingress verwenden können, um externen Datenverkehr an Dienste zu leiten, die in einem Kubernetes-Cluster laufen.

Kubernetes Ingress ist ein leistungsstarkes Tool zum Verwalten des externen Zugriffs auf Dienste in einem Kubernetes-Cluster. Ingress fungiert als Layer-7-Load Balancer und ermöglicht es Ihnen, Datenverkehr an verschiedene Dienste basierend auf dem eingehenden URL-Pfad oder Hostnamen zu leiten.

In diesem Lab werden wir eine Beispielanwendung erstellen und sie über Ingress der Außenwelt zugänglich machen. Wir werden nginx-ingress als Ingress-Controller verwenden, was eine beliebte und weit verbreitete Lösung für Kubernetes Ingress ist.

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 97% von den Lernenden erhalten.

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 zu Ihrem Arbeitsverzeichnis:

    Öffnen Sie das Terminal und navigieren Sie zum Standardprojektordner:

    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 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.

Installation des Nginx Ingress-Controllers

Zunächst müssen wir den nginx-ingress-Controller in unserem Cluster installieren. Dies können wir tun, indem wir eine Deployment und einen Service erstellen, die für das Ausführen des Ingress-Controllers verantwortlich sein werden.

Erstellen Sie einen Namespace für den Ingress-Controller:

kubectl create namespace ingress-nginx

Installieren Sie das ingress-nginx-Chart mit kubectl:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml

Überprüfen Sie, ob die ingress-nginx-Controller-Pods laufen:

kubectl get pods -n ingress-nginx
NAME                                        READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-zjfqx        0/1     ContainerCreating   0          2s
ingress-nginx-admission-patch-8rvzw         0/1     ContainerCreating   0          2s
ingress-nginx-controller-6bdb654777-qz8fb   0/1     ContainerCreating   0          2s

Erstellen einer Beispielanwendung

Als Nächstes werden wir eine Beispielanwendung erstellen, die wir über Ingress zugänglich machen werden.

Erstellen Sie ein Deployment für eine Beispielanwendung:

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

Die YAML-Datei heißt sample-app.yaml. Wenden Sie das Deployment auf Ihren Cluster mit dem folgenden Befehl an:

kubectl apply -f sample-app.yaml

Erstellen Sie einen Service für die Beispielanwendung:

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

Die YAML-Datei heißt service-sample-app.yaml. Wenden Sie das Deployment auf Ihren Cluster mit dem folgenden Befehl an:

kubectl apply -f service-sample-app.yaml

Erstellen einer Ingress-Ressource

Jetzt, da wir den Ingress-Controller eingerichtet und einen Backend-Service laufen haben, können wir die Regeln für die Ingress-Ressource erstellen.

In diesem Beispiel werden wir eine einfache Regel erstellen, um den Datenverkehr für die Domain test.local an unseren Backend-Service zu leiten:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: test.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: sample-app
            port:
              name: http

Die YAML-Datei heißt ingress.yaml. Wenden Sie die Ingress-Ressource auf den Cluster an:

kubectl apply -f ingress.yaml

Testen der Ingress-Ressource

Schließlich können wir die Ingress-Ressource testen, um sicherzustellen, dass alles korrekt funktioniert.

Zunächst ermitteln Sie die IP-Adresse des Knotens:

kubectl get node -o wide
NAME       STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
minikube   Ready    control-plane   93s   v1.26.1   192.168.49.2   <none>        Ubuntu 20.04.5 LTS   5.15.0-56-generic   docker://20.10.23

Dieser Befehl ruft die Kubernetes-Knotenadresse ab. Die als INTERNAL-IP gekennzeichnete IP-Adresse ist die gesuchte.

Als Nächstes fügen Sie einen Eintrag in Ihre /etc/hosts-Datei hinzu, um die Domain test.local auf die IP-Adresse des Knotens zu mappen:

echo "<IP_ADDRESS> test.local" | sudo tee -a /etc/hosts

Ersetzen Sie <IP_ADDRESS> durch die interne IP-Adresse des Knotens. Beispiel:

echo "192.168.49.2 test.local" | sudo tee -a /etc/hosts

Dann ermitteln Sie den NodePort des ingress-nginx-Services.

kubectl get services -n ingress-nginx

Dieser Befehl zeigt eine Liste der Services im ingress-nginx-Namespace an. Suchen Sie nach dem nginx-ingress-controller-Service und notieren Sie seinen NodePort.

NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.104.99.158   <pending>     80:32518/TCP,443:31620/TCP   2m45s
ingress-nginx-controller-admission   ClusterIP      10.100.46.109   <none>        443/TCP                      2m45s

Schließlich verwenden Sie curl, um eine HTTP-Anfrage an den Ingress-Endpunkt zu senden:

curl test.local:NodePort

Beispiel:

curl test.local:32518

Ersetzen Sie <NodePort> durch den NodePort des nginx-ingress-controller-Services.

Wenn alles korrekt eingerichtet ist, sollten Sie die Nginx-Willkommensseite sehen.

Sie können den Ingress auch testen, indem Sie mit einem Webbrowser die Adresse test.local:<NodePort>/nginx besuchen.

Herzlichen Glückwunsch! Sie haben erfolgreich eine Ingress-Ressource in Kubernetes eingerichtet und getestet, um sicherzustellen, dass sie korrekt funktioniert.

Zusammenfassung

In diesem Lab haben wir den Prozess der Einrichtung und Konfiguration eines Nginx Ingress-Controllers in Kubernetes durchlaufen. Wir haben auch eine Beispielanwendung erstellt und Ingress verwendet, um externen Datenverkehr an unseren Nginx-Service zu leiten. Dies ist nur der Anfang dessen, was Sie mit Kubernetes-Netzwerken tun können, und wir ermutigen Sie, weiter zu erkunden.