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

  1. 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
    Hinweis: Wenn eine strengere Sicherheit erforderlich ist, wenden Sie ein RoleBinding auf den projectcontour-Namespace an. Weitere Informationen hierzu finden Sie unter Anwenden der standardmäßigen Pod-Sicherheitsrichtlinie auf TKG-Dienstcluster.
  2. 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
  3. Laden Sie die neueste YAML-Datei des Contour-Ingress-Controllers herunter: Contour-Ingress-Bereitstellung.
  4. Öffnen Sie die Datei contour.yaml mit einem Texteditor.
  5. 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
    
  6. Stellen Sie Contour bereit, indem Sie die Datei contour.yaml anwenden.
    kubectl apply -f contour.yaml
  7. 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
  8. 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
  9. Pingen Sie den Load Balancer mithilfe der externen IP-Adresse an.
    ping 192.168.123.5
    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
    
  10. 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
  11. 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
  12. Rufen Sie die öffentliche IP-Adresse des Lastausgleichsdiensts ab, der vom Contour-Ingress-Controller verwendet wird.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-nihao   <none>   *       10.19.14.76     80      13m
  13. Navigieren Sie in einem Browser zur öffentlichen IP-Adresse und schließen Sie den Ingress-Pfad ein.
    http://10.19.14.76/nihao
    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.