Eine Kubernetes-Ingress-Ressource stellt HTTP- oder HTTPS-Routing von außerhalb des Clusters zu einem oder mehreren Diensten innerhalb des Clusters bereit. Tanzu Kubernetes-Cluster unterstützen Ingress durch Drittanbietercontroller wie etwa Nginx.
Dieses Lernprogramm veranschaulicht, wie Sie einen Kubernetes-Ingress-Dienst für das Routing von externem Datenverkehr zu Diensten in einem Tanzu Kubernetes-Cluster auf der Basis von NGINX bereitstellen. Für Ingress-Dienste ist jeweils ein Ingress-Controller erforderlich. Der NGINX-Ingress-Controller wird mit Helm installiert. „Helm“ ist ein Paketmanager für Kubernetes.
Hinweis: Für die Durchführung dieser Aufgabe gibt es mehrere Möglichkeiten. Die hier genannten Schritte beschreiben einen möglichen Ansatz. Andere Ansätze sind möglicherweise für Sie in ihrer jeweiligen Umgebung besser geeignet.
Prozedur
- Installieren Sie Helm und beachten Sie dabei die Dokumentation.
- Installieren Sie den NGINX-Ingress-Controller mit Helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx
- Vergewissern Sie sich, dass der Nginx-Ingress-Controller als Dienst vom Typ LoadBalancer bereitgestellt wird.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.16.18.20 10.19.14.76 80:30635/TCP,443:30873/TCP 59m
ingress-nginx-controller-admission ClusterIP 10.87.41.25 <none> 443/TCP 59m
- Pingen Sie den Load Balancer mithilfe der externen IP-Adresse an.
Pinging 10.19.14.76 with 32 bytes of data:
Reply from 10.19.14.76: bytes=32 time<1ms TTL=62
Reply from 10.19.14.76: bytes=32 time=1ms TTL=62
- Vergewissern Sie sich, dass der Nginx-Ingress-Controller ausgeführt wird.
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7c6c46898c-v6blt 1/1 Running 0 76m
- Erstellen Sie eine Ingress-Ressource mit einer Ingress-Regel und einem Pfad namens
ingress-hello.yaml
.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-hello
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: hello
servicePort: 80
- Stellen Sie die
ingress-hello
-Ressource bereit.
kubectl apply -f ingress-hello.yaml
ingress.networking.k8s.io/ingress-hello created
- Vergewissern Sie sich, dass die Ingress-Ressource bereitgestellt wird.
Beachten Sie, dass die IP-Adresse der externen IP des Ingress-Controllers zugeordnet ist.
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 51m
- Erstellen Sie eine Hello-Test-App und einen Dienst namens ingress-hello-test.yaml.
kind: Service
apiVersion: v1
metadata:
name: hello
spec:
selector:
app: hello
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
replicas: 3
selector:
matchLabels:
app: hello
tier: backend
track: stable
template:
metadata:
labels:
app: hello
tier: backend
track: stable
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
- Stellen Sie die
ingress-hello-test
-Ressource bereit.
kubectl apply -f ingress-hello-test.yaml
service/hello created
deployment.apps/hello created
- Vergewissern Sie sich, dass die
hello
-Bereitstellung verfügbar ist.
NAME READY UP-TO-DATE AVAILABLE AGE
hello 3/3 3 3 4m59s
ingress-nginx-controller 1/1 1 1 3h39m
- Rufen Sie die öffentliche IP-Adresse des Lastausgleichsdiensts ab, der vom Nginx-Ingress-Controller verwendet wird.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-hello <none> * 10.19.14.76 80 13m
- Navigieren Sie in einem Browser zur öffentlichen IP-Adresse und schließen Sie den Ingress-Pfad ein.
Die Meldung „Hallo“ wird zurückgegeben.
{"message":"Hello"}
Ergebnisse
Auf die Backend-App, deren Frontend der im Cluster ausgeführte Dienst ist, wird extern durch den Browser über den Ingress-Controller zugegriffen. Dabei wird die externe IP-Adresse des Lastausgleichsdiensts verwendet.