Configurando o Ingress no Minikube com o NGINX Ingress Controller Config

O Ingress é um objeto da API que define regras que permitem acesso externo a serviços em um cluster. Um Ingress controller cumpre as regras estabelecidas no Ingress.

Essa página mostra como configurar um Ingress simples que redireciona as requisições para o Service "web" ou "web2" dependendo do URI HTTP.

Antes de você começar

Esse tutorial assume que você está usando minikube para rodar um cluster Kubernetes local. Visite Install tools para aprender como instalar o minikube.

Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:

O seu servidor Kubernetes deve estar numa versão igual ou superior a 1.19. Para verificar a versão, digite kubectl version. Se você estiver usando uma versão mais antiga do Kubernetes, veja a documentação para essa versão.

Criando um cluster minikube

Se você ainda não configurou um cluster local, rode minikube start para criar um cluster.

Ativando o Ingress controller

  1. Para ativar o NGINX Ingress controller, rode os seguintes comandos:

    minikube addons enable ingress
    
  2. Verifique que o NGINX Ingress controller está rodando

    kubectl get pods -n ingress-nginx
    

    O resultado deve ser similar a:

    NAME                                        READY   STATUS      RESTARTS    AGE
    ingress-nginx-admission-create-g9g49        0/1     Completed   0          11m
    ingress-nginx-admission-patch-rqp78         0/1     Completed   1          11m
    ingress-nginx-controller-59b45fb494-26npt   1/1     Running     0          11m
    

Instale uma aplicação hello world

  1. Crie um Deployment usando o seguinte comando:

    kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
    

    O resultado deve ser:

    deployment.apps/web created
    
  2. Exponha o Deployment:

    kubectl expose deployment web --type=NodePort --port=8080
    

    O resultado deve ser:

    service/web exposed
    
  3. Verifique que o Service está criado e disponível em uma porta do nó:

    kubectl get service web
    

    O resultado deve ser similar:

    NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    web       NodePort   10.104.133.249   <none>        8080:31637/TCP   12m
    
  4. Visite o Service via NodePort:

    minikube service web --url
    

    O resultado é similar a:

    http://172.17.0.15:31637
    
    curl http://172.17.0.15:31637 
    

    O resultado é similar a:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
    

    Você agora pode acessar a aplicação de exemplo através do endereço IP do Minikube e NodePort. No próximo passo, você irá acessar a aplicação usando o recurso Ingress.

Criando um Ingress

O manifesto a seguir define um Ingress que envia tráfego para seu Serviço via hello-world.info.

  1. crie example-ingress.yaml usando o arquivo:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
    spec:
      rules:
        - host: hello-world.info
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: web
                    port:
                      number: 8080
    
  2. Crie o objeto Ingress rodando o seguinte comando:

    kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
    

    O resultado deve ser:

    ingress.networking.k8s.io/example-ingress created
    
  3. Verifique se o endereço IP está configurado:

    kubectl get ingress
    

    Você deve ver um endereçco IPv4 na coluna ADDRESS; por exemplo:

    NAME              CLASS    HOSTS              ADDRESS        PORTS   AGE
    example-ingress   <none>   hello-world.info   172.17.0.15    80      38s
    
  4. Verifique se o Ingress controller está direcionando o tráfego:

    curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info
    

    Você deve ver:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
    

    Você também pode visitar hello-world.info no seu navegador.

    • Opcionalmente Procure o endereço IP externo reportado pelo minikube:

      minikube ip
      

      Adicione uma linha semelhante à seguinte no final do arquivo /etc/hosts no seu computador (você vai precisar de acesso de administrador):

      172.17.0.15 hello-world.info
      

      Depois que você fizer essa mudança, seu navegador enviará solicitações da URL hello-world.info para o Minikube

Criando um segundo Deployment

  1. Crie outro Deployment usando o seguinte comando:

    kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
    

    O resultado deve ser:

    deployment.apps/web2 created
    
  2. Expondo o segundo Deployment:

    kubectl expose deployment web2 --port=8080 --type=NodePort
    

    O resultado deve ser:

    service/web2 exposed
    

Edite o Ingress existente

  1. Edite o manifesto example-ingress.yaml existente, e adicione as seguintes linhas no final:

    - path: /v2
      pathType: Prefix
      backend:
        service:
          name: web2
          port:
            number: 8080
    
  2. Aplique as mudanças:

    kubectl apply -f example-ingress.yaml
    

    Você deve ver:

    ingress.networking/example-ingress configured
    

Testando o seu Ingress

  1. Acesse a primeira versão da sua aplicação Hello World.

    curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info
    

    O resultado deve ser similar a:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
    
  2. Acesse a segunda versão da sua aplicação Hello World.

    curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info/v2
    

    O resultado deve ser similar a:

    Hello, world!
    Version: 2.0.0
    Hostname: web2-75cd47646f-t8cjk
    

Próximos passos