多个应用程序节点如何在kubernetes中公开jmx?
- 在
kubernetes
我可以公开服务service
。这可以。 - 可以说我有1个Web实例和10个Java服务器实例。
- 我有一个Windows网关,用于通过安装在其上的jconsole访问这10个Java服务器实例。
- 显然,我没有通过kubernetes服务公开所有应用程序的jmx端口。
我在这里有什么选择?我应该如何允许外部到kubernetes群集Windows网关访问这10个服务器的jmx端口?这里有什么做法吗?
回答:
另一个选择是使用 将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。
以上是 多个应用程序节点如何在kubernetes中公开jmx? 的全部内容, 来源链接: utcz.com/qa/405344.html