Pular para o conteúdo principal

Lab 8.1 - Configuração do Ingress NGINX

Objetivos do Lab​

Ao final deste lab, você será capaz de:

  • Instalar um Ingress Controller NGINX.
  • Compreender o papel de um Ingress Controller.
  • Criar um recurso Ingress básico.
  • Expor uma aplicação via Ingress.
  • Testar o acesso à aplicação via Ingress.

Duração Estimada​

45-60 minutos

Pré-requisitos​

  • kubectl instalado e configurado.
  • Cluster Kubernetes local funcional (minikube ou kind).
  • Conhecimentos sobre Ingress (Capítulo 8.1 e 8.2).

Parte 1: Instalação do Ingress Controller NGINX​

Etapa 1.1: Ativar o Ingress no Minikube​

Se você estiver usando minikube, ative o plugin Ingress:

minikube addons enable ingress

Verifique se o Ingress Controller está instalado:

kubectl get pods -n ingress-nginx

Você deve ver os Pods do Ingress Controller NGINX.

Etapa 1.2: Instalação Manual (Alternativa)​

Se você não estiver usando minikube ou para uma instalação manual, utilize:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

Aguarde até que os Pods estejam prontos:

kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s

Parte 2: Deploy de uma Aplicação de Teste​

Antes de configurar o Ingress, vamos fazer o deploy de uma aplicação simples.

Etapa 2.1: Criar um Deployment​

Crie um arquivo app-deployment.yaml:

# app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80

Aplique o Deployment:

kubectl apply -f app-deployment.yaml

Etapa 2.2: Criar um Service​

Crie um arquivo app-service.yaml:

# app-service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 80
type: ClusterIP

Aplique o Service:

kubectl apply -f app-service.yaml

Verifique se o Service foi criado:

kubectl get svc web-app-service

Parte 3: Criação de um Recurso Ingress​

Etapa 3.1: Criar o Ingress​

Crie um arquivo ingress-basic.yaml:

# ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app-ingress
spec:
ingressClassName: nginx # Especifica o Ingress Controller a ser usado
rules:
- host: webapp.local # Nome do host (para local, use este nome ou modifique /etc/hosts)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80

Explicação:

  • ingressClassName: nginx: Indica que deve ser usado o Ingress Controller NGINX.
  • host: webapp.local: O nome do host para acessar a aplicação.
  • path: /: Todos os caminhos começando com /.
  • backend: O Service backend que recebe o tráfego.

Aplique o Ingress:

kubectl apply -f ingress-basic.yaml

Etapa 3.2: Verificar o Ingress​

Verifique se o Ingress foi criado:

kubectl get ingress

Verifique os detalhes:

kubectl describe ingress web-app-ingress

Você deve ver o endereço IP do Ingress Controller (no minikube, isso pode levar alguns segundos).


Parte 4: Acesso à Aplicação​

Etapa 4.1: Obter o Endereço IP do Ingress​

No minikube, obtenha o IP:

minikube ip

Ou verifique o Ingress:

kubectl get ingress web-app-ingress

Etapa 4.2: Configurar o Hostname (Local)​

Para um cluster local, você deve adicionar a entrada em /etc/hosts (Linux/Mac) ou C:\Windows\System32\drivers\etc\hosts (Windows):

# No Linux/Mac, edite /etc/hosts
sudo nano /etc/hosts

# Adicione esta linha (substitua <INGRESS_IP> pelo IP do Ingress):
<INGRESS_IP> webapp.local

No Windows, edite C:\Windows\System32\drivers\etc\hosts com permissões de administrador.

Etapa 4.3: Testar o Acesso​

Teste o acesso à aplicação:

curl http://webapp.local

Ou abra http://webapp.local no seu navegador.

Você deve ver a página padrão do NGINX.

Etapa 4.4: Alternativa com Port-Forward (Sem Modificar /etc/hosts)​

Se você não quiser modificar o /etc/hosts, utilize port-forward para o Ingress Controller:

# Encontre o nome do Pod do Ingress Controller
INGRESS_POD=$(kubectl get pods -n ingress-nginx -l app.kubernetes.io/component=controller -o jsonpath='{.items[0].metadata.name}')

# Port-forward
kubectl port-forward -n ingress-nginx $INGRESS_POD 8080:80

Depois teste:

curl -H "Host: webapp.local" http://localhost:8080

Parte 5: Verificação dos Logs​

Verifique os logs do Ingress Controller para ver as requisições:

kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller --tail=20

Você deve ver as requisições HTTP recebidas.


Parte 6: Limpeza​

Remova os recursos criados:

kubectl delete ingress web-app-ingress
kubectl delete -f app-service.yaml
kubectl delete -f app-deployment.yaml

Para desativar o Ingress no minikube:

minikube addons disable ingress

Resumo do Lab​

Neste lab, você instalou e configurou um Ingress Controller NGINX, criou um recurso Ingress básico e expôs uma aplicação via Ingress. Você aprendeu a acessar a aplicação pelo nome de host configurado.


Próximos Passos​

O próximo lab mostrará como configurar o routamento baseado em caminhos (Path-based routing) para direcionar o tráfego para diferentes aplicações.

Lab 8.2: Path-based Routing


Lab criado em: Dezembro 2024