Introducción
En Kubernetes, un Ingress es un objeto que gestiona el acceso externo a los servicios dentro de un clúster, típicamente HTTP y HTTPS. Los controladores de Ingress son componentes que implementan las reglas de Ingress, permitiendo la entrada de tráfico externo al clúster.
Objetivos de Aprendizaje
Al final de esta sección, deberías ser capaz de:
- Comprender qué es un controlador de Ingress y su propósito.
- Configurar un controlador de Ingress en un clúster de Kubernetes.
- Crear y gestionar recursos de Ingress para enrutar el tráfico a los servicios.
Conceptos Clave
¿Qué es un Ingress?
Un Ingress es un recurso de Kubernetes que expone servicios HTTP y HTTPS fuera del clúster. Proporciona reglas de enrutamiento basadas en el nombre del host y la ruta del URL.
¿Qué es un Controlador de Ingress?
Un controlador de Ingress es un componente que implementa las reglas de Ingress. Es responsable de:
- Configurar el enrutamiento del tráfico.
- Gestionar certificados SSL/TLS.
- Proporcionar balanceo de carga.
Tipos de Controladores de Ingress
Existen varios controladores de Ingress disponibles, cada uno con sus propias características y casos de uso. Algunos de los más populares son:
- NGINX Ingress Controller
- Traefik
- HAProxy
- Istio
Configuración de un Controlador de Ingress
Paso 1: Desplegar el Controlador de Ingress
Para este ejemplo, utilizaremos el NGINX Ingress Controller. Puedes desplegarlo utilizando un manifiesto YAML proporcionado por la comunidad de Kubernetes.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
Paso 2: Verificar la Instalación
Verifica que los pods del controlador de Ingress estén en ejecución:
Deberías ver algo similar a:
Paso 3: Crear un Recurso de Ingress
Ahora, crea un recurso de Ingress para exponer un servicio. Supongamos que tienes un servicio llamado my-service en el namespace default que escucha en el puerto 80.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
namespace: default
spec:
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80Aplica este manifiesto:
Paso 4: Configurar DNS
Asegúrate de que myapp.example.com apunte a la dirección IP externa del controlador de Ingress. Puedes obtener la IP externa con:
Busca el servicio ingress-nginx-controller y anota la IP externa.
Ejemplo Práctico
Desplegar una Aplicación y Configurar Ingress
- Despliega una aplicación simple, como
nginx:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --target-port=80
- Crea un recurso de Ingress para exponer
nginx:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80Aplica el manifiesto:
-
Configura el DNS para que
nginx.example.comapunte a la IP externa del controlador de Ingress. -
Accede a
http://nginx.example.comen tu navegador para verificar que la aplicaciónnginxestá accesible.
Ejercicio Práctico
Ejercicio 1: Configurar un Controlador de Ingress
- Despliega el NGINX Ingress Controller en tu clúster.
- Despliega una aplicación simple (puede ser
nginxo cualquier otra). - Crea un recurso de Ingress para exponer la aplicación.
- Configura el DNS para que el nombre de host apunte a la IP externa del controlador de Ingress.
- Verifica que puedes acceder a la aplicación a través del nombre de host.
Solución
- Desplegar el NGINX Ingress Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
- Desplegar una aplicación simple:
kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --target-port=80
- Crear un recurso de Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
namespace: default
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx
port:
number: 80Aplica el manifiesto:
-
Configurar el DNS para que
nginx.example.comapunte a la IP externa del controlador de Ingress. -
Verificar el acceso a la aplicación:
Accede a http://nginx.example.com en tu navegador.
Conclusión
En esta sección, hemos aprendido sobre los controladores de Ingress en Kubernetes, cómo desplegar y configurar un controlador de Ingress, y cómo crear recursos de Ingress para enrutar el tráfico a los servicios. Estos conocimientos son fundamentales para gestionar el acceso externo a las aplicaciones desplegadas en un clúster de Kubernetes. En la siguiente sección, exploraremos las políticas de red en Kubernetes para gestionar la comunicación entre los pods.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster
