多个java应用程序如何在kubernetes中暴露jmx?

啊啊 发表于: 2021-11-29   最后更新时间: 2021-11-29 22:54:00   1,024 游览

1、在 kubernetes 中,我可以使用 service 公开服务,这可以。

2、假设我有 1 个 web 实例和 10 个 java 服务器实例。

3、我有一个 Windows 网关,我习惯于通过安装在它上面的 jconsole 访问这 10 个 java 服务器实例。

4、显然,我没有通过kubernetes服务export(公开)所有应用程序的jmx端口。

这里有什么办法吗?

发表于 2021-11-29

另一种选择是使用 kubectl port-forward 将 JMX 端口从 K8S pod 转发到本地 PC。

我是这样做的:

1、在你的应用程序中添加以下JVM选项。

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Djava.rmi.server.hostname=127.0.0.1

这里的关键部分是:

  • jmxremote.portjmxremote.rmi.port应该使用同一个端口,这是只需要转发一个端口。

  • 127.0.0.1 应该作为 rmi 服务器主机名传递。这是 JMX 连接端口通过port-forwarding所必需的。

2、通过 kubectl 将 JMX 端口 (1099) 转发到您的本地 PC:

kubectl port-forward <your-app-pod> 1099

3、打开与本地端口 1099 的 jconsole 连接:

jconsole 127.0.0.1:1099

这种方式使得通过 JMX 调试任何 Java pod ,而无需通过 K8 服务公开暴露 JMX(从安全角度来看更好)。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题