skip to Main Content

I am trying to debug my app in testing environment, my app is running in pod, I said ‘pod’ because I am not familiar with Kubernetes, its manage client looks like this:app running schematic diagram. I have learn I should set idea like this idea RUN/Debug Configurations schematic diagram. And should restart and redeploy my app, I changed Dockfile firstly. the origin instruction is FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-Xmx2048m","-jar","/app.jar"] and I changed this to FROM xxx/java:alpine VOLUME /tmp ADD recruitment.jar app.jar ENTRYPOINT ["java","-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-jar","/app.jar"] but it always show error like this Error running 'face_remote': Unable to open debugger port (888.88.888.888[not real]:5005): java.io.IOException "handshake timeout". I am not sure with this ip,sicne I use ‘ping 888.88.888.888’ instruction can not success. I use this ip because Swagger request url’s domain name’s ip is this.this main enter image description here. and I guess if the app is running in docker or k8s and it will have a different Interactive mode. not same like just running in linux

2

Answers


  1. most of the attached image are not visible.

    • IP address should be accessible from your local system
      [888.88.888.888] note sure this is correct.
    • debug port also need to be mapped from your local system
      -use port forwarding
      ex:kubectl port-forward 5005:5005

    If you have configure port forwarding then you can use localhost:5005 for debugging

    Login or Signup to reply.
  2. I see three things that you can check:

    Check the IP address:
    The jar file runs inside a Docker container, which runs inside a pod. To access the pod you usually go through a service and an ingress. The ip you are using is most likely hitting the ingress/service or any other higher layer.

    To attach a remote debugger, you will need to connect directly to the PodIP. One way of doing this is to first connect to your kubernetes cluster using the tool kubectl (some configuration required) and make a port forward from your pod: kubectl port-forward my-pod-c93b8b6df-8c4aa 5005:5005 pod (as an example, the pod instance name is my-pod-c93b8b6df-8c4aa).

    This will open a connection from your local computer into the pod. Then you will need to identify the PodIP by kubectl describe pods my-pod-c93b8b6df-8c4aa and use that in IntelliJ

    Check if the port is exposed:
    Make sure you expose the port 5005 from the pod in your test environment (similar to exposing a port when you run the container locally).

    How to do this depends a bit on how you are running your Kubernetes cluster. If you use Helm chart, you can just add a configuration like this in the port section of your deployment yaml:

    - containerPort: 5005
      name: debug
      protocol: TCP
    

    Check debug-command address:
    Last thing is to make sure you are adding the correct address in the command line option. As IntelliJ suggest in the debug editor: for JDK9+ use …suspend=n,address=*:5005 and for JDK8 and below use …suspend=n,address=5005

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search