1.启动服务时增加debug命令
可以在两个地方添加开启DEBUG的命令。
1是在docker file内添加指令:
EXPOSE 8084
EXPOSE 18084
ENTRYPOINT [“/bin/sh”,”-c”,”java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18084 xxx.jar”]
上面开启的服务端口是8084 ,远程debug端口是18084
查看启动结果
docker ps -a --no-trunc | grep jar包名
只要看到图内黄色字体就代表开启成功了
2.是在pod的deployment文件内的containers下添加如下指令:
-args:
[“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18084”]
查看启动结果
kubectl describe po/podname
如果参数内有
-args: ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18084"]
就代表开启成功
2.查看pod的ip
执行如下命令
kubectl get pod <pod_name> -o jsonpath='{.status.podIP}'
10.233.96.77就是pod的ip,不过这个是容器内的虚拟ip,外部是无法直接访问的。这是我们需要在pod的node节点上增加端口转发的规则,让外部连接直接问转发到容器内部,这样才能连上debug端口。
3.添加转发规则
执行如下命令,host_port就是你直接访问node节点的端口,pod_ip是在第二部中查询出的ip 也就是 10.233.96.77,pod_port就是开启debug服务的端口 18084
iptables -t nat -A PREROUTING -p tcp --dport <host_port> -j DNAT --to-destination <pod_ip>:<pod_port>
到这里就算是大功告成了,接下来只要在IDEA开启远程DEBUG服务就好了。
4.开启远程DEBUG服务
host是node节点你可以Ping的通的ip,我这里开了VPN用的是内网ip 你也可以用外网IP,不过可能需要处理一下防火墙的通行规则。
结果:
这里就可以开始debug了。搞定。
提醒:
这里只是介绍了一种比较复杂的需要自己手动去开启转发规则的方法。
你也可以直接在service的yaml中开放端口,交由kube-proxy帮你配置service的转发规则。