Openshift 调试支持Istio的Java应用程序

Openshift 调试支持Istio的Java应用程序,openshift,remote-debugging,jdb,istio,Openshift,Remote Debugging,Jdb,Istio,我正在尝试用Istio远程调试一个运行在Openshift中的java应用程序,因此它是一个pod,其中一个docker容器包含应用程序本身,另一个容器包含特使代理 我已经在java进程上设置了调试参数: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 进程已打开端口,并写入: Listening for transport dt_socket at address: 5005 但是,当我尝试从外部和容器本

我正在尝试用Istio远程调试一个运行在Openshift中的java应用程序,因此它是一个pod,其中一个docker容器包含应用程序本身,另一个容器包含特使代理

我已经在java进程上设置了调试参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
进程已打开端口,并写入:

Listening for transport dt_socket at address: 5005
但是,当我尝试从外部和容器本身连接到该容器时,我得到:

> jdb -attach 172.17.0.8:5005
java.io.IOException: handshake failed - connection prematurally closed
    at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136)
    at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232)
    at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116)
    at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90)
    at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519)
    at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328)
    at com.sun.tools.example.debug.tty.Env.init(Env.java:63)
    at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066)

Fatal error:
Unable to attach to target VM.
我怀疑这与Istio的代理有关,Istio不理解JDWP,并且弄乱了JDWP(即使使用

oc exec -it myservice-42-abcdef -c myservice bash
但是我无法从容器中检查iptables,因为我在那里没有根)


我的嫌疑犯对吗?如何禁用某些端口上的代理功能?

您必须在启用Istio的POD访问的端口上定义服务,即使是在本地主机上访问。必须将端口命名为
[-]
,例如
tcp jdwp
。请参阅启用Istio的POD的要求。

看起来您正在连接到该服务,对吗?您是否在svc上公开了5505?我尚未公开该服务;我不需要说出它的名字。然而,即使来自容器内部的连接也失败的事实告诉我,这是受到影响的。