一尘不染

多个应用程序节点如何在kubernetes中公开jmx?

docker

  1. kubernetes我可以公开服务service。这可以。
  2. 可以说我有1个Web实例和10个Java服务器实例。
  3. 我有一个Windows网关,用于通过安装在其上的jconsole访问这10个Java服务器实例。
  4. 显然,我没有通过kubernetes服务公开所有应用程序的jmx端口。

我在这里有什么选择?我应该如何允许外部到kubernetes群集Windows网关访问这10个服务器的jmx端口?这里有什么做法吗?


阅读 418

收藏
2020-06-17

共1个答案

一尘不染

另一个选择是使用 kubectl port-forward 将JMX端口从K8 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连接需要通过端口转发才能工作。

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

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

3)。打开jconsole连接到本地端口1099:

jconsole 127.0.0.1:1099

这种方式使得可以通过JMX调试任何Java Pod,而不必通过K8服务公开公开JMX(从安全性角度来看更好)。

另一个可能有用的选项是将Jolokia(https://jolokia.org/)代理附加到容器内的Java进程,以便它通过HTTP端口代理JMX并公开或端口转发此HTTP端口以查询JMX。通过HTTP。

2020-06-17