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:

kubectl get pods -n ingress-nginx

Deberías ver algo similar a:

NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-5d8b9d6b6b-abcde   1/1     Running   0          2m

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:

kubectl apply -f my-ingress.yaml

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:

kubectl get svc -n ingress-nginx

Busca el servicio ingress-nginx-controller y anota la IP externa.

Ejemplo Práctico

Desplegar una Aplicación y Configurar Ingress

  1. Despliega una aplicación simple, como nginx:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --target-port=80
  1. 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:

kubectl apply -f nginx-ingress.yaml
  1. Configura el DNS para que nginx.example.com apunte a la IP externa del controlador de Ingress.

  2. Accede a http://nginx.example.com en tu navegador para verificar que la aplicación nginx está accesible.

Ejercicio Práctico

Ejercicio 1: Configurar un Controlador de Ingress

  1. Despliega el NGINX Ingress Controller en tu clúster.
  2. Despliega una aplicación simple (puede ser nginx o cualquier otra).
  3. Crea un recurso de Ingress para exponer la aplicación.
  4. Configura el DNS para que el nombre de host apunte a la IP externa del controlador de Ingress.
  5. Verifica que puedes acceder a la aplicación a través del nombre de host.

Solución

  1. Desplegar el NGINX Ingress Controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml
  1. Desplegar una aplicación simple:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --target-port=80
  1. 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:

kubectl apply -f nginx-ingress.yaml
  1. Configurar el DNS para que nginx.example.com apunte a la IP externa del controlador de Ingress.

  2. 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

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

Módulo 8: Seguridad en Kubernetes

Módulo 9: Escalado y Rendimiento

Módulo 10: Ecosistema y Herramientas de Kubernetes

Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real

Módulo 12: Preparación para la Certificación de Kubernetes

© Copyright 2024. Todos los derechos reservados