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, digitekubectl 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
-
Para ativar o NGINX Ingress controller, rode os seguintes comandos:
minikube addons enable ingress
-
Verifique que o NGINX Ingress controller está rodando
kubectl get pods -n ingress-nginx
Nota: Os pods podem levar até um minuto para estarem rodando corretamente.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
-
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
-
Exponha o Deployment:
kubectl expose deployment web --type=NodePort --port=8080
O resultado deve ser:
service/web exposed
-
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
-
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
.
-
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
-
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
-
Verifique se o endereço IP está configurado:
kubectl get ingress
Nota: Isso pode demorar alguns minutos.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
-
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
Nota: Altere o endereço IP para corresponder ao resultado deminikube ip
.Depois que você fizer essa mudança, seu navegador enviará solicitações da URL
hello-world.info
para o Minikube
-
Criando um segundo Deployment
-
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
-
Expondo o segundo Deployment:
kubectl expose deployment web2 --port=8080 --type=NodePort
O resultado deve ser:
service/web2 exposed
Edite o Ingress existente
-
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
-
Aplique as mudanças:
kubectl apply -f example-ingress.yaml
Você deve ver:
ingress.networking/example-ingress configured
Testando o seu Ingress
-
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
-
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
Nota: Se você fez o passo opcional para atualizar o arquivo/etc/hosts
, você também pode visitarhello-world.info
ehello-world.info/v2
do seu navegador.
Próximos passos
- Leia mais sobre Ingress
- Leia mais sobre Ingress Controllers
- Leia mais sobre Services