Eine Kubernetes-Ingress-Ressource stellt HTTP- oder HTTPS-Routing von außerhalb des Clusters zu einem oder mehreren Diensten innerhalb des Clusters bereit. TKG-Cluster unterstützen Ingress durch Drittanbietercontroller wie etwa Contour.
Dieses Lernprogramm veranschaulicht, wie Sie den Contour-Ingress-Controller für das Routing von externem Datenverkehr zu Diensten in einem TKG-Cluster bereitstellen. Contour ist ein Open Source-Projekt, an dem VMware beteiligt ist.
Voraussetzungen
- Weitere Informationen finden Sie in der Dokumentation zu Kubernetes unter der Ressource Ingress.
- Überprüfen Sie den Contour-Ingress-Controller.
- Stellen Sie einen TKG-Cluster bereit.
- Stellen Sie eine Verbindung mit dem TKG-Cluster her.
Prozedur
- Erstellen Sie ein ClusterRoleBinding, mit dem Dienstkonten alle Ressourcen des Clusters verwalten können.
kubectl create clusterrolebinding default-tkg-admin-privileged-binding
--clusterrole=psp:vmware-system-privileged --group=system:authenticated
- Erstellen Sie einen Namespace mit dem Namen
projectcontour
.
Dies ist der Standard-Namespace für die Bereitstellung des Contour-Ingress-Controllers.
kubectl create ns projectcontour
- Laden Sie die neueste YAML-Datei des Contour-Ingress-Controllers herunter: Contour-Ingress-Bereitstellung.
- Öffnen Sie die Datei contour.yaml mit einem Texteditor.
- Kommentieren Sie die folgenden beiden Zeilen aus, indem Sie jeder Zeile das Symbol
#
voranstellen:
Zeile 1632:
# service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
Zeile 1634:
# externalTrafficPolicy: Local
- Stellen Sie Contour bereit, indem Sie die Datei
contour.yaml
anwenden.
kubectl apply -f contour.yaml
- Vergewissern Sie sich, dass der Contour-Ingress-Controller und der Envoy-Lastausgleichsdienst bereitgestellt werden.
kubectl get services -n projectcontour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contour ClusterIP 198.63.146.166 <none> 8001/TCP 120m
envoy LoadBalancer 198.48.52.47 192.168.123.5 80:30501/TCP,443:30173/TCP 120m
- Vergewissern Sie sich, dass die Contour- und Envory-Pods ausgeführt werden.
kubectl get pods -n projectcontour
NAME READY STATUS RESTARTS AGE
contour-7966d6cdbf-skqfl 1/1 Running 1 21h
contour-7966d6cdbf-vc8c7 1/1 Running 1 21h
contour-certgen-77m2n 0/1 Completed 0 21h
envoy-fsltp 1/1 Running 0 20h
- Pingen Sie den Load Balancer mithilfe der externen IP-Adresse an.
PING 192.168.123.5 (192.168.123.5) 56(84) bytes of data.
64 bytes from 192.168.123.5: icmp_seq=1 ttl=62 time=3.50 ms
- Erstellen Sie eine Ingress-Ressource mit dem Namen ingress-nihao.yaml.
Erstellen Sie die YAML.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-nihao
spec:
rules:
- http:
paths:
- path: /nihao
backend:
serviceName: nihao
servicePort: 80
Wenden Sie die YAML an.
kubectl apply -f ingress-nihao.yaml
Vergewissern Sie sich, dass die Ingress-Ressource erstellt wurde.
kubectl get ingress
Die externe IP-Adresse für den Envoy LoadBalancer (
192.168.123.5
in diesem Beispiel) wird vom Ingress-Objekt verwendet.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-nihao <none> * 192.168.123.5 80 17s
- Stellen Sie einen Testdienst mit einer Backend-Anwendung bereit.
Erstellen Sie die folgende YAML-Datei mit dem Namen
ingress-nihao-test.yaml:
kind: Service
apiVersion: v1
metadata:
name: nihao
spec:
selector:
app: nihao
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nihao
spec:
replicas: 3
selector:
matchLabels:
app: nihao
tier: backend
track: stable
template:
metadata:
labels:
app: nihao
tier: backend
track: stable
spec:
containers:
- name: nihao
image: "gcr.io/google-samples/hello-go-gke:1.0"
ports:
- name: http
containerPort: 80
Wenden Sie die YAML an.
kubectl apply -f ingress-nihao-test.yaml
Überprüfen Sie, ob der
nihao
-Server erstellt wird.
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nihao ClusterIP 10.14.21.22 <none> 80/TCP 15s
Vergewissern Sie sich, dass die Backend-Bereitstellung erstellt wurde.
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nihao 3/3 3 3 2m25s
Vergewissern Sie sich, dass die Backend-Pods vorhanden sind.
kubectl get pods
NAME READY STATUS RESTARTS AGE
nihao-8646584495-9nm8x 1/1 Running 0 106s
nihao-8646584495-vscm5 1/1 Running 0 106s
nihao-8646584495-zcsdq 1/1 Running 0 106s
- Rufen Sie die öffentliche IP-Adresse des Lastausgleichsdiensts ab, der vom Contour-Ingress-Controller verwendet wird.
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-nihao <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.