1、在 kubernetes 中,我可以使用 service 公开服务,这可以。
2、假设我有 1 个 web 实例和 10 个 java 服务器实例。
3、我有一个 Windows 网关,我习惯于通过安装在它上面的 jconsole 访问这 10 个 java 服务器实例。
4、显然,我没有通过kubernetes服务export(公开)所有应用程序的jmx端口。
这里有什么办法吗?
1、在 kubernetes 中,我可以使用 service 公开服务,这可以。
2、假设我有 1 个 web 实例和 10 个 java 服务器实例。
3、我有一个 Windows 网关,我习惯于通过安装在它上面的 jconsole 访问这 10 个 java 服务器实例。
4、显然,我没有通过kubernetes服务export(公开)所有应用程序的jmx端口。
这里有什么办法吗?
另一种选择是使用
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.port
和jmxremote.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(从安全角度来看更好)。
你的答案