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: 80
Aplica 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: 80
Aplica el manifiesto:
-
Configura el DNS para que
nginx.example.com
apunte a la IP externa del controlador de Ingress. -
Accede a
http://nginx.example.com
en tu navegador para verificar que la aplicaciónnginx
está 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
nginx
o 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: 80
Aplica el manifiesto:
-
Configurar el DNS para que
nginx.example.com
apunte 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