'Kubernetes: Conectando a un pod desde localhost'
18-04-2022
Esta semana tuve un problema con un despliegue usando Kubernetes. El servicio se reiniciaba constantemente sin dejar ningún log en la consola y no tenía claro el motivo.
Se reiniciaba porque lo tenemos configurado para que lo haga cuando detecta que el servicio no está funcionando correctamente. Esto lo hace gracias al endpoint /actuator/health
de Spring Boot y a los "probes" de Kubernetes. Este endpoint comprueba el estado de las conexiones a la base de datos, espacio disponible en disco y otras cosas que puedes configurar. Si hay algún problema el servicio se reinicia, pero si no era un problema temporal... el servicio se queda en modo crash-looping
.
El truquillo que aprendí, es que puedes hacer un port-forward
desde el pod a tu equipo, de forma que puedes acceder al servicio desde tu máquina antes de que se reinicie:
kubectl port-forward <<pod-name>> 8080:8080
Haciendo esto pude conectarme al pod desde http://localhost:8080/actuator/health lo que me permitió ver el problema:
{ "status": "DOWN", "components": { "r2dbc": { "status": "DOWN", "details": { "database": "Oracle Database", "validationQuery": "validate(REMOTE)", "error": "TNS:listener does not currently know of service requested in connect descriptor" } }, ... } }
Un error tonto que estoy seguro que volveré a cometer pronto, por eso dejo esta nota :D