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.
kubectlconfigurado 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
ingressClassNameen Kubernetes 1.22+.