Zum Inhalt

Ingress Controller und Ingress-Ressourcen

Ziel

In diesem Projekt geht es um die Einrichtung eines Ingress Controllers und die Konfiguration von Ingress-Ressourcen für externe HTTP-Zugriffe. Sie werden:

  • Helm als Package Manager für Kubernetes installieren
  • Traefik als Ingress Controller über Helm bereitstellen
  • Eine Ingress-Ressource für die Demo-Anwendung erstellen
  • Den externen Zugriff über den Ingress Controller testen

Vorbereitung

  • Stellen Sie sicher, dass die Demo-Anwendung aus der vorherigen Aufgabe noch läuft

    kubectl get pods -n docker-demoapp
    kubectl get services -n docker-demoapp
    
  • Erstellen Sie ein Arbeitsverzeichnis und wechseln Sie hinein

    cd ~/workspace
    mkdir ingress-setup
    cd ingress-setup
    

Aufgabe 1: Helm installieren

Helm Binary herunterladen

  • Laden Sie die aktuelle Helm-Version herunter und installieren Sie sie

    wget https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz
    tar -zxvf helm-v3.19.0-linux-amd64.tar.gz
    cp linux-amd64/helm .
    rm -r helm-v3.19.0-linux-amd64.tar.gz linux-amd64
    
  • Überprüfen Sie die Installation

    ./helm version
    
  • Nach der Installation sollten Sie eine Ausgabe ähnlich dieser sehen:

    version.BuildInfo{Version:"v3.19.0", GitCommit:"...", GitTreeState:"clean", GoVersion:"go1.23.4"}
    

Aufgabe 2: Traefik Ingress Controller installieren

Helm Repository konfigurieren

  • Fügen Sie das Traefik Helm Repository hinzu

    ./helm repo add traefik https://traefik.github.io/charts
    
  • Aktualisieren Sie die Repository-Informationen

    ./helm repo update
    
  • Listen Sie die verfügbaren Repositories auf

    ./helm repo list
    

Traefik installieren

  • Installieren Sie Traefik mit Helm in einem eigenen Namespace

    ./helm install traefik traefik/traefik \
      --namespace traefik \
      --create-namespace
    
  • Überprüfen Sie den Installationsstatus

    ./helm list -n traefik
    

Traefik-Pods überprüfen

  • Warten Sie, bis alle Traefik-Pods laufen
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n traefik get pods
  • Überprüfen Sie die Services im Traefik-Namespace

    kubectl -n traefik get services
    
  • Betrachten Sie die Details des Traefik-Service

    kubectl -n traefik describe service traefik
    
  • Sie sollten einen Pod im Status "Running" und einen Service vom Typ "LoadBalancer" (in der lokalen Umgebung als NodePort) sehen.

Aufgabe 3: Ingress-Ressource erstellen

Ingress-Manifest erstellen

  • Erstellen Sie eine ingress.yaml Datei für die Docker-Demo-App
  • Verwenden Sie den Hostname Ihres Clusters (angepasst an Ihre Umgebung)

    cat > ingress.yaml << 'EOF'
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: docker-demoapp
      namespace: docker-demoapp
    spec:
      ingressClassName: traefik
      rules:
      - host: HOSTNAME_HIER_EINFUEGEN
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: docker-demoapp
                port:
                  number: 5000
    EOF
    
  • Wichtig: Ersetzen Sie HOSTNAME_HIER_EINFUEGEN mit dem tatsächlichen Hostname Ihres Systems

Ingress-Ressource bereitstellen

  • Wenden Sie das Ingress-Manifest an
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl apply -f ingress.yaml
  • Überprüfen Sie die erstellte Ingress-Ressource

    kubectl get ingress -n docker-demoapp
    
  • Betrachten Sie die Details der Ingress-Ressource

    kubectl describe ingress -n docker-demoapp docker-demoapp
    

Aufgabe 4: Ingress Controller Service überprüfen

NodePort des Traefik-Service ermitteln

  • Finden Sie den NodePort des Traefik-Service heraus
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl -n traefik get service traefik
  • Notieren Sie sich den Port für den HTTP-Traffic (normalerweise Port 80 wird auf einen NodePort gemappt)
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)

Die Ausgabe sollte ähnlich dieser sein:

NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
traefik   NodePort   10.96.xxx.xxx  <none>        80:30080/TCP,443:30443/TCP   5m
In diesem Beispiel wäre der NodePort für HTTP-Traffic 30080.

Worker-Node IP ermitteln

  • Ermitteln Sie die externe IP-Adresse Ihres Worker-Nodes
Lösung (Klicken Sie auf den Pfeil, falls Sie nicht weiterkommen)
kubectl get nodes -o wide

Aufgabe 5: Anwendung über Ingress testen

Browser-Zugriff

  • Öffnen Sie die Anwendung im Browser über die Ingress-URL
  • Format: http://HOSTNAME:NODEPORT
  • Beispiel: http://worker-0.example.com:30080