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.
Starten Sie das Minikube-Cluster
Bevor Sie Ressourcen erstellen, benötigen Sie einen laufenden Kubernetes-Cluster. Minikube ist eine leichte Kubernetes-Umgebung, die auf Ihrem lokalen Rechner läuft.
Navigieren Sie zu Ihrem Arbeitsverzeichnis:
Öffnen Sie das Terminal und navigieren Sie zum Standardprojektordner:
cd /home/labex/projectStarten 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.
Überprüfen Sie, ob Minikube läuft:
Überprüfen Sie den Status des Minikube-Clusters:
minikube status- Suchen Sie nach Komponenten wie
kubeletundapiserver, die alsRunningaufgeführt sind. - Wenn der Cluster nicht läuft, führen Sie
minikube starterneut aus.
- Suchen Sie nach Komponenten wie
Wenn Sie Probleme beim Starten von Minikube haben, können Sie minikube delete verwenden, um die Umgebung bei Bedarf zurückzusetzen.
Installieren Sie den Nginx Ingress Controller
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 Sie eine 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 Sie eine 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 Sie die 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.


