OpenShift: Remote Debug

Por suerte o por desgracia el debug remoto es algo que todos hemos tenido que llevar acabo en algún momento de nuestras vidas, en entornos no productivos espero.

En plataformas como Kubernetes o OpenShift esto cobra especial sentido cuando se desarrolla sobre las distribuciones Minikube o Minishift y en el presente articulo se pretende detallar como llevarlo a cabo, paso a paso, de forma sencilla.

Caso de uso

Se dispone en OpenShift de un microservicio Java desarrollado con Spring Boot del que se quiere realizar debug remoto.

Port Forwarding

Port forwarding es una técnica que permite reenviar el trafico de un puerto local (de nuestro PC), al puerto de un pod de OpenShift. Es decir, permite escuchar y enviar datos del pod, lo que a su vez abre las puertas al debug remoto.

El comando oc para realizar el port forwarding sigue la siguiente estructura:

oc port-forward pod puerto_local:puerto_pod

Llevado al presente caso de uso, el comando tendría la siguiente estructura:

oc port-forward spring-microservice-51-aj9la 8080:8080

Si todo ha salido correctamente al realizar una petición sobre http://localhost:8080 se debería obtener una respuesta por parte del microservicio.

Java Remote Debug

Para habilitar debug remoto sobre la JVM de una aplicación Java es necesario asignarle una serie de parámetros en el arranque.

-Xdebug -agentlib:jdwp=transport=dt_socket,address=DEBUG_PORT,server=y,suspend=n

En OpenShift, una de las opciones de llevarlo a cabo es definir una variable de entorno “JAVA_OPTIONS” que contenga dichos valores. Esta variable puede ser definida en el DeploymentConfig de la siguiente manera:

    spec:
      containers:
        - env:
            - name: JAVA_OPTIONS
              value: >-
                -Xdebug
                -agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=n


Una vez añadida la variable “JAVA_OPTIONS” es hora de realizar el
port forwarding sobre el puerto de debug remoto establecido en la misma. Sobra decir que no puede coincidir con el puerto sobre el que escucha el microservicio.

oc port-forward spring-microservice-51-aj9la 8888:8888

Finalmente solo queda realizar el debug remoto como en cualquier aplicación Java convencional desplegada fuera de OpenShift.

En el IDE Eclipse por ejemplo, basta con definir una configuración de debug de tipo “Remote Java Application” y referenciar la dirección en cuestión (http://localhost:8888)


Conclusiones

En conclusión, gracias al port forwarding es posible escuchar y enviar datos de un pod desplegado en OpenShift en un puerto local, que es lo que habilita la opción de realizar debug en remoto.

Advertisements