首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Kubernetes管理的Docker容器连接JMX?

如何通过Kubernetes管理的Docker容器连接JMX?
EN

Stack Overflow用户
提问于 2016-12-09 22:14:01
回答 1查看 5.6K关注 0票数 3

我正在尝试连接到我的Java应用程序(Java 8和SpringBoot1.4和Tomcat)上定义为1099 (默认情况下)的JMX端口,它使用JConsole、JConsole或VisualVM等客户端,但我遇到了一个错误:

代码语言:javascript
复制
java.rmi.ConnectException: Connection refused to host: 10.xxx.xxx.xx, nested exception is:
     java.net.ConnectException: Connection timed out
     ...

请注意,我隐藏了确切的主机IP,但部署我的服务的是特定Kubernetes管理的Docker容器的pod。我尝试使用以下服务URL连接到JMX端口:

代码语言:javascript
复制
jconsole service:jmx:rmi://<nodeIP>:<nodePort>/jndi/rmi://<nodeIP>:<nodePort>/jmxrmi 

我知道JMX打开了一个random high port,我试图通过包含一个custom @Configuration class that forces that high port to also serve on port 1099来解决这个问题。我已经进入了实际的集装箱和吊舱

代码语言:javascript
复制
netstat -tulpn

要查看打开的端口,我已经确认打开的端口只有8443 (我的应用程序正在运行)和1099 ( JMX端口);这表明我的类可以工作。我还确保1099端口在Kubernetes一侧是开放的,所以这不是阻挡它的原因。

正如围绕JMX远程连接的许多答案所表明的那样,我尝试了以下Java选项的许多变体,但都没有效果:

代码语言:javascript
复制
-Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.jmi.port=1099 -Djava.rmi.server.hostname=0.0.0.0

答案表明,强制JMX端口和RMI注册端口保持相同,但这些都不起作用。

我认为这个问题可能是因为主机名(因为我试图使用-Djava.rmi.server.hostname=0.0.0.0动态)无法解决每次部署我的服务时创建的不同主机名(pod )。

因此,看起来连接无法完成,因为JMX无法看到在部署我的服务之后,Kubernetes分配了什么主机名。

是否有办法让JMX识别Kubernetes主机名?或者,还有其他方法可以通过Kubernetes部署的服务远程连接到JMX端口吗?

编辑1:我做了一些额外的研究,也许一个可选的JMXMP (而不是)可能有效?有人和Tomcat合作过吗?

EN

回答 1

Stack Overflow用户

发布于 2016-12-10 09:36:18

在我看来,jmx远程连接是一个痛苦的工作,代理它是不可能的。我也遇到了类似的问题,最后我只是用罗洛基亚来连接。

Jolokia是一种JMX桥,它为JSR-160连接器提供了一个替代方案。它是一种基于代理的方法,支持许多平台。除了基本的JMX操作之外,它还以独特的特性增强了JMX,比如批量请求和细粒度的安全策略。-> http://jolokia.org

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41069686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档