Um recurso de entrada do Kubernetes fornece roteamento HTTP ou HTTPS de fora do cluster para um ou mais serviços dentro do cluster. Os clusters do Tanzu Kubernetes oferecem suporte à entrada por meio de controladores de terceiros, como o Nginx.

Este tutorial demonstra como implantar um serviço de entrada do Kubernetes com base no NGINX para rotear o tráfego externo para serviços no seu cluster do Tanzu Kubernetes. Um serviço de ingresso requer um controlador de ingresso. Instalamos o controlador de entrada NGINX usando o Helm. Helm é um gerenciador de pacotes para o Kubernetes.

Observação: Existem várias maneiras de realizar essa tarefa. As etapas aqui fornecem uma abordagem. Outras abordagens podem ser mais adequadas para você no seu ambiente específico.

Pré-requisitos

Procedimento

  1. Instale o Helm consultando a documentação .
  2. Instale o controlador de entrada NGINX usando o Helm.
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm install ingress-nginx ingress-nginx/ingress-nginx
  3. Verifique se o controlador de entrada Nginx está implantado como um serviço do tipo LoadBalancer.
    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. Execute ping no balanceador de carga usando o endereço IP externo.
    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. Verifique se o controlador de entrada Nginx está em execução.
    kubectl get pods
    NAME                                        READY   STATUS    RESTARTS   AGE
    ingress-nginx-controller-7c6c46898c-v6blt   1/1     Running   0          76m
  6. Crie um recurso de ingresso com uma regra de ingresso e um caminho chamado 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. Implante o recurso ingress-hello.
    kubectl apply -f ingress-hello.yaml
    ingress.networking.k8s.io/ingress-hello created
  8. Verifique se o recurso de ingresso está implantado.
    Observe que o endereço IP é mapeado para o IP externo do controlador de ingresso.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      51m
  9. Crie um aplicativo e serviço de teste hello chamado 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. Implante o recurso ingress-hello-test.
    kubectl apply -f ingress-hello-test.yaml
    service/hello created
    deployment.apps/hello created
  11. Verifique se a implantação do hello está disponível.
    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. Obtenha o endereço IP público do balanceador de carga usado pelo controlador de entrada Nginx.
    kubectl get ingress
    NAME            CLASS    HOSTS   ADDRESS         PORTS   AGE
    ingress-hello   <none>   *       10.19.14.76     80      13m
  13. Usando um navegador, navegue até o IP público e inclua o caminho de entrada.
    http://10.19.14.76/hello
    A mensagem "olá" é retornada.
    {"message":"Hello"}

Resultados

O aplicativo de back-end que é fronteado pelo serviço em execução dentro do cluster é acessado externamente pelo navegador por meio do controlador de ingresso usando o endereço IP externo do balanceador de carga.