Remote debug container in kubernetes using intellij
Solution 1
As an alternative to using a NodePort
in a Service
you could also use kubectl port-forward
to access the debug port in your Pod
.
kubectl port-forward
allows using resource name, such as a pod name, to select a matching pod to port forward to since Kubernetes v1.10.
You need to expose the debug port in the Deployment yaml for the Pod
spec:
containers:
...
ports:
...
- containerPort: 5005
Then get the name of your Pod via
kubectl get pods
and then add a port-forwarding to that Pod
kubectl port-forward podname 5005:5005
In IntelliJ you will be able to connect to
Host: localhost
Port: 5005
Solution 2
Alternatively, you can use the Cloud Code Intellij plugin.
Also, if you use Fabric8, it provides the fabric8:debug
goal.
Related videos on Youtube
elp
Business IT student who loves coding. Project for testing microservices / distributed systems: https://github.com/elps/mspublic Alternatively available as image on docker hub: Articleservice Cartservice Catalogservice Customerservice
Updated on October 10, 2022Comments
-
elp over 1 year
I try to remote debug the application in attached mode with host:
192.168.99.100
and port5005
, but it tells me that it isunable to open the debugger port
. The IP is192.268.99.100
(the cluster is hosted locally via minikube).Output of
kubectl describe service catalogservice
Name: catalogservice Namespace: default Labels: <none> Annotations: <none> Selector: app=catalogservice Type: NodePort IP: 10.98.238.198 Port: web 31003/TCP TargetPort: 8080/TCP NodePort: web 31003/TCP Endpoints: 172.17.0.6:8080 Port: debug 5005/TCP TargetPort: 5005/TCP NodePort: debug 32003/TCP Endpoints: 172.17.0.6:5005 Session Affinity: None External Traffic Policy: Cluster Events: <none>
This is the pods service.yml:
apiVersion: v1 kind: Service metadata: name: catalogservice spec: type: NodePort selector: app: catalogservice ports: - name: web protocol: TCP port: 31003 nodePort: 31003 targetPort: 8080 - name: debug protocol: TCP port: 5005 nodePort: 32003 targetPort: 5005
And in here I expose the containers port
spec: containers: - name: catalogservice image: elps/myimage ports: - containerPort: 8080 name: app - containerPort: 5005 name: debug
The way I build the image:
FROM openjdk:11 VOLUME /tmp EXPOSE 8082 ADD /target/catalogservice-0.0.1-SNAPSHOT.jar catalogservice-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n", "-jar", "catalogservice-0.0.1-SNAPSHOT.jar"]
When I execute
nmap -p 5005 192.168.99.100
I receivePORT STATE SERVICE 5005/tcp closed avt-profile-2
When I execute
nmap -p 32003 192.168.99.100
I receivePORT STATE SERVICE 32003/tcp closed unknown
When I execute
nmap -p 31003 192.168.99.100
I receivePORT STATE SERVICE 31003/tcp open unknown
When I execute
kubectl get services
I receiveNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE catalogservice NodePort 10.108.195.102 <none> 31003:31003/TCP,5005:32003/TCP 14m
minikube service customerservice --url
returnshttp://192.168.99.100:32004
-
marcor92 almost 3 yearsCloud Code IntelliJ plugin does the job for me. Isn't Fabric8 library discontinued?