Introducción a los conceptos básicos de Ingress y muestra de un ejemplo sencillo de YAML de Ingress
En este paso, aprenderá sobre Kubernetes Ingress, una forma poderosa de gestionar el acceso externo a los servicios en un clúster de Kubernetes.
¿Qué es Ingress?
Ingress es un objeto de la API que gestiona el acceso externo a los servicios en un clúster de Kubernetes, normalmente HTTP. Ingress proporciona:
- Balanceo de carga: Distribuye el tráfico a múltiples servicios de back-end.
- Finalización de SSL/TLS: Maneja conexiones seguras.
- Virtual hosting basado en nombres: Enruta las solicitudes a diferentes servicios según el nombre de host.
- Enrutamiento basado en rutas: Enruta las solicitudes a diferentes servicios según la ruta de la URL.
Ingress consta de dos componentes:
- Recurso de Ingress: Un objeto de la API de Kubernetes que define las reglas de enrutamiento.
- Controlador de Ingress: La implementación que hace cumplir las reglas definidas en el Recurso de Ingress.
Nota: Este laboratorio solo proporciona una introducción básica a Ingress. En entornos de producción, las configuraciones de Ingress pueden ser mucho más complejas, incluyendo enrutamiento avanzado, autenticación, limitación de velocidad y mucho más.
Habilitemos el complemento de Ingress en Minikube:
minikube addons enable ingress
Ejemplo de salida:
💡 ingress es un complemento mantenido por Kubernetes. Para cualquier problema, contacte a minikube en GitHub.
🔉 ingress se ha habilitado correctamente
Cree una implementación para dos aplicaciones de muestra:
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
Exponer estas implementaciones como servicios:
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
Cree un archivo YAML de Ingress:
nano ingress-example.yaml
Agregue la siguiente configuración de Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
Componentes clave de esta configuración de Ingress:
- metadata.annotations: Configuraciones específicas para el controlador de Ingress.
- spec.rules: Definen cómo se enruta el tráfico a los servicios.
- path: Ruta de la URL que se coincidirá.
- pathType: Cómo se debe coincidir la ruta (Prefix, Exact o ImplementationSpecific).
- backend.service: El servicio y el puerto a los que se enrutará el tráfico.
Aplique la configuración de Ingress:
kubectl apply -f ingress-example.yaml
Verifique el recurso de Ingress:
kubectl get ingress
Ejemplo de salida:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Consulte los detalles de Ingress:
kubectl describe ingress example-ingress
La salida de ejemplo mostrará las reglas de enrutamiento y los servicios de back-end.
Prueba del Ingress:
## Obtener la IP de Minikube
minikube ip
## Probar el acceso a los servicios a través de Ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
Cada comando debe devolver la página predeterminada del respectivo servidor web.
En entornos de producción, Ingress se puede configurar con:
- Múltiples reglas basadas en nombres de host.
- Certificados TLS para HTTPS.
- Mecanismos de autenticación.
- Limitación de velocidad.
- Configuraciones de tiempo de espera personalizadas.
- Afinidad de sesión.
- Y muchas más características avanzadas.
Para una cobertura más completa de Ingress, consulte la documentación de Kubernetes y considere explorar la documentación de controladores de Ingress dedicados como NGINX Ingress o Traefik.