Lab 8.1 - Configuración de Ingress NGINX
Objetivos del Lab
Al finalizar este laboratorio, usted será capaz de:
- Instalar un Ingress Controller NGINX.
- Comprender el rol de un Ingress Controller.
- Crear un recurso Ingress básico.
- Exponer una aplicación a través de Ingress.
- Probar el acceso a la aplicación mediante Ingress.
Duración Estimada
45-60 minutos
Requisitos Previos
- kubectl instalado y configurado.
- Cluster Kubernetes local funcional (minikube o kind).
- Conocimientos sobre Ingress (Capítulo 8.1 y 8.2).
Parte 1: Instalación del Ingress Controller NGINX
Paso 1.1: Activar Ingress en Minikube
Si utiliza minikube, active el complemento Ingress:
minikube addons enable ingress
Verifique que el Ingress Controller esté instalado:
kubectl get pods -n ingress-nginx
Debería ver Pods del Ingress Controller NGINX.
Paso 1.2: Instalación Manual (Alternativa)
Si no utiliza minikube o para una instalación manual, utilice:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml
Espere a que los Pods estén listos:
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
Parte 2: Despliegue de una Aplicación de Prueba
Antes de configurar Ingress, despleguemos una aplicación sencilla.
Paso 2.1: Crear un Deployment
Cree un archivo 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 el Deployment:
kubectl apply -f app-deployment.yaml
Paso 2.2: Crear un Service
Cree un archivo 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 el Service:
kubectl apply -f app-service.yaml
Verifique que el Service se haya creado:
kubectl get svc web-app-service
Parte 3: Creación de un Recurso Ingress
Paso 3.1: Crear el Ingress
Cree un archivo ingress-basic.yaml:
# ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-app-ingress
spec:
ingressClassName: nginx # Especifica el Ingress Controller a utilizar
rules:
- host: webapp.local # Nombre de host (para local, use este nombre o modifique /etc/hosts)
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-app-service
port:
number: 80
Explicación:
ingressClassName: nginx: Indica que se debe usar el Ingress Controller NGINX.host: webapp.local: El nombre de host para acceder a la aplicación.path: /: Todos los caminos que comienzan con/.backend: El Service backend que gestiona el tráfico.
Aplique el Ingress:
kubectl apply -f ingress-basic.yaml
Paso 3.2: Verificar el Ingress
Verifique que el Ingress se haya creado:
kubectl get ingress
Verifique los detalles:
kubectl describe ingress web-app-ingress
Debería ver la dirección IP del Ingress Controller (en minikube, esto puede tardar unos segundos).
Parte 4: Acceso a la Aplicación
Paso 4.1: Obtener la Dirección IP del Ingress
En minikube, obtenga la IP:
minikube ip
O verifique el Ingress:
kubectl get ingress web-app-ingress
Paso 4.2: Configurar el Hostname (Local)
Para un cluster local, debe agregar la entrada en /etc/hosts (Linux/Mac) o C:\Windows\System32\drivers\etc\hosts (Windows):
# En Linux/Mac, edite /etc/hosts
sudo nano /etc/hosts
# Agregue esta línea (reemplace <INGRESS_IP> por la IP del Ingress):
<INGRESS_IP> webapp.local
En Windows, edite C:\Windows\System32\drivers\etc\hosts con permisos de administrador.
Paso 4.3: Probar el Acceso
Pruebe el acceso a la aplicación:
curl http://webapp.local
O abra http://webapp.local en su navegador.
Debería ver la página predeterminada de NGINX.
Paso 4.4: Alternativa con Port-Forward (Sin Modificar /etc/hosts)
Si no desea modificar /etc/hosts, utilice port-forward hacia el Ingress Controller:
# Encuentre el nombre del Pod del 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
Luego pruebe:
curl -H "Host: webapp.local" http://localhost:8080
Parte 5: Verificación de Logs
Verifique los logs del Ingress Controller para ver las solicitudes:
kubectl logs -n ingress-nginx -l app.kubernetes.io/component=controller --tail=20
Debería ver las solicitudes HTTP entrantes.
Parte 6: Limpieza
Elimine los recursos creados:
kubectl delete ingress web-app-ingress
kubectl delete -f app-service.yaml
kubectl delete -f app-deployment.yaml
Para desactivar el Ingress en minikube:
minikube addons disable ingress
Resumen del Lab
En este laboratorio, usted instaló y configuró un Ingress Controller NGINX, creó un recurso Ingress básico y expuso una aplicación a través de Ingress. Aprendió a acceder a la aplicación mediante el nombre de host configurado.
Próximos Pasos
El próximo laboratorio le mostrará cómo configurar el ruteo basado en caminos (Path-based routing) para dirigir el tráfico hacia diferentes aplicaciones.
Lab 8.2: Path-based Routing
Lab creado el: diciembre 2024