Einführung in die Grundlagen von Ingress und ein einfaches Ingress YAML-Beispiel
In diesem Schritt lernen Sie Kubernetes Ingress kennen, eine leistungsstarke Methode zur Verwaltung des externen Zugangs zu Diensten in einem Kubernetes-Cluster.
Was ist Ingress?
Ingress ist ein API-Objekt, das den externen Zugang zu Diensten in einem Kubernetes-Cluster verwaltet, typischerweise für HTTP-Verkehr. Ingress bietet:
- Lastverteilung: Verteilt den Verkehr auf mehrere Backend-Dienste
- SSL/TLS-Terminierung: Handhabt sichere Verbindungen
- Namensbasierte Virtuelle Hosting: Leitet Anfragen basierend auf dem Hostnamen an verschiedene Dienste weiter
- Pfadbasierte Routing: Leitet Anfragen basierend auf dem URL-Pfad an verschiedene Dienste weiter
Ingress besteht aus zwei Komponenten:
- Ingress-Ressource: Ein Kubernetes-API-Objekt, das die Routing-Regeln definiert
- Ingress-Controller: Die Implementierung, die die in der Ingress-Ressource definierten Regeln durchsetzt
Hinweis: Dieser Lab bietet nur eine grundlegende Einführung in Ingress. In Produktionsumgebungen können Ingress-Konfigurationen viel komplexer sein, einschließlich fortgeschrittenem Routing, Authentifizierung, Rate-Limiting und vieles mehr.
Aktivieren Sie das Ingress-Addon in Minikube:
minikube addons enable ingress
Beispielausgabe:
💡 ingress ist ein von Kubernetes verwaltetes Addon. Bei Fragen wenden Sie sich an minikube auf GitHub.
🔉 ingress wurde erfolgreich aktiviert
Erstellen Sie eine Bereitstellung für zwei Beispielanwendungen:
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
Stellen Sie diese Bereitstellungen als Dienste zur Verfügung:
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
Erstellen Sie eine Ingress YAML-Datei:
nano ingress-example.yaml
Fügen Sie die folgende Ingress-Konfiguration hinzu:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
Wichtige Komponenten dieser Ingress-Konfiguration:
- metadata.annotations: Spezifische Konfigurationen für den Ingress-Controller
- spec.rules: Definieren, wie der Verkehr an Dienste geroutet wird
- path: URL-Pfad, der übereinstimmen muss
- pathType: Wie der Pfad übereinstimmen soll (Prefix, Exact oder ImplementationSpecific)
- backend.service: Der Dienst und der Port, an den der Verkehr geroutet wird
Wenden Sie die Ingress-Konfiguration an:
kubectl apply -f ingress-example.yaml
Überprüfen Sie die Ingress-Ressource:
kubectl get ingress
Beispielausgabe:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Prüfen Sie die Ingress-Details:
kubectl describe ingress example-ingress
Die Beispielausgabe zeigt die Routing-Regeln und die Backend-Dienste.
Testen Sie den Ingress:
## Holen Sie sich die Minikube-IP
minikube ip
## Testen Sie den Zugang zu den Diensten über Ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
Jeder Befehl sollte die Standardseite des jeweiligen Webservers zurückgeben.
In Produktionsumgebungen kann Ingress mit folgenden Merkmalen konfiguriert werden:
- Mehrere hostnamenbasierte Regeln
- TLS-Zertifikate für HTTPS
- Authentifizierungsmechanismen
- Rate-Limiting
- Benutzerdefinierte Timeout-Konfigurationen
- Sitzungsaffinität
- Und viele weitere fortgeschrittene Funktionen
Für eine umfassendere Abdeckung von Ingress verweisen Sie auf die Kubernetes-Dokumentation und erwägen Sie, die spezifische Dokumentation von Ingress-Controllern wie NGINX Ingress oder Traefik zu erkunden.