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.

Voraussetzungen

Prozedur

  1. Installieren Sie Helm und beachten Sie dabei die Dokumentation.
  2. 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
  3. Vergewissern Sie sich, dass der Nginx-Ingress-Controller als Dienst vom Typ LoadBalancer bereitgestellt wird.
    kubectl get services
    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
    
  4. Pingen Sie den Load Balancer mithilfe der externen IP-Adresse an.
    ping 10.19.14.76
    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
    
  5. Vergewissern Sie sich, dass der Nginx-Ingress-Controller ausgeführt wird.
    kubectl get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx-controller-7c6c46898c-v6blt   1/1     Running   0          76m
  6. 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
    
  7. Stellen Sie die ingress-hello-Ressource bereit.
    kubectl apply -f ingress-hello.yaml
    ingress.networking.k8s.io/ingress-hello created
  8. 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
  9. 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
    
  10. Stellen Sie die ingress-hello-test-Ressource bereit.
    kubectl apply -f ingress-hello-test.yaml
    service/hello created
    deployment.apps/hello created
  11. Vergewissern Sie sich, dass die hello-Bereitstellung verfügbar ist.
    kubectl get deployments
    NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
    hello                      3/3     3            3           4m59s
    ingress-nginx-controller   1/1     1            1           3h39m
    
  12. Rufen Sie die öffentliche IP-Adresse des Lastausgleichsdiensts ab, der vom Nginx-Ingress-Controller verwendet wird.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <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/hello
    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.