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 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

  • Weitere Informationen finden Sie in der Dokumentation zu Kubernetes unter der Ressource Ingress.
  • Lesen Sie die Dokumentation zum Ingress-Controller Nginx.
  • Stellen Sie einen TKG-Cluster bereit.
  • Aktivieren Sie bei Bedarf die Pod-Sicherheitsrichtlinie.
  • Stellen Sie eine Verbindung mit dem TKG-Cluster her.

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
    
    Achtung: Die Kubernetes-API networking.k8s.io/v1beta1 ist ab Kubernetes v1.22 veraltet. Die zu verwendende neue API ist networking.k8s.io/v1 und beinhaltet mehrere Manifeständerungen, die hier dokumentiert sind: https://kubernetes.io/docs/reference/using-api/deprecation-guide/.
  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.