Entendiendo el Ingress de Kubernetes

En Kubernetes, los Services exponen pods dentro del clúster, pero no proporcionan enrutamiento HTTP externo ni terminación TLS. El recurso Ingress define reglas para enrutar tráfico HTTP/HTTPS externo a servicios internos.

Requisitos Previos

  • Un clúster Kubernetes en ejecución (1.24+).
  • Un Ingress Controller instalado.
  • kubectl configurado con acceso al clúster.

Solución de Problemas Paso a Paso

1. Verificar el Recurso Ingress

kubectl get ingress -A
kubectl describe ingress <nombre-ingress> -n <namespace>

2. Verificar Servicio Backend y Endpoints

kubectl get svc <nombre-servicio> -n <namespace>
kubectl get endpoints <nombre-servicio> -n <namespace>

Si los endpoints están vacíos, el selector del servicio no coincide con ningún pod en ejecución.

3. Inspeccionar Logs del Controller

kubectl get pods -n ingress-nginx
kubectl logs <pod-ingress-controller> -n ingress-nginx --tail=100

4. Solucionar 502 Bad Gateway

kubectl exec -it <pod-ingress-controller> -n ingress-nginx -- curl -v http://<servicio>.<namespace>.svc.cluster.local:<puerto>

5. Corregir Problemas de Certificados TLS

kubectl get secret <nombre-secret> -n <namespace>
kubectl get secret <nombre-secret> -n <namespace> -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout

6. Depurar Enrutamiento por Rutas

  • Exact: Solo la ruta exacta.
  • Prefix: Coincide con el prefijo de la ruta.

Resumen

  • Diagnostique errores 502 verificando endpoints, disponibilidad de pods y mapeos de puertos.
  • Verifique que los secrets TLS existan con certificados válidos y no expirados.
  • Siempre especifique ingressClassName en Kubernetes 1.22+.

Artículos Relacionados