Saltar al contenido principal

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