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