DC / OS JMX访问

我有一个部署到azure色的dc / os群集。 我已经部署到集群与我的Java应用程序的容器。 但是我不能通过jmx访问它。

我们来看看部署一个standart tomcat镜像的例子:

1)我打开一个端口8081根据下一条指令: https : //docs.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal 。

2)我使用下一个json部署服务:

{ "id": "/tomcat", "instances": 1, "cpus": 1, "mem": 512, "container": { "type": "DOCKER", "docker": { "image": "tomcat:8.0", "network": "BRIDGE", "portMappings": [ { "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 }, { "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 } ] } }, "requirePorts": true, "acceptedResourceRoles": [ "slave_public" ], "env": { "JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.4 -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" }, "healthChecks": [ { "gracePeriodSeconds": 120, "intervalSeconds": 30, "maxConsecutiveFailures": 3, "path": "/", "portIndex": 0, "protocol": "HTTP", "timeoutSeconds": 5 } ] } 

连接我使用Oracle Java Mission Control。 填写“主机”和“端口”为“prefixagents.westeurope.cloudapp.azure.com”和“8081”。 但我无法连接,我收到一条消息:'无法连接'。

但是,尽pipe我可以用telnet客户机成功连接到这个端口:

telnet prefixagents.westeurope.cloudapp.azure.com 8081

另外,我可以连接到端口8080,我可以在以下URL打开Tomcat的Web控制台:http://agents.westeurope.cloudapp.azure.com:8080

我安装了另一个jmx命令行客户端 – http://wiki.cyclopsgroup.org/jmxterm/并尝试连接到服务:

 java -jar jmxterm-1.0-alpha-4-uber.jar --url service:jmx:rmi:///jndi/rmi://<prefix>agents.westeurope.cloudapp.azure.com:8081/jmxrmi 

我得到了下一个exception:“java.rmi.ConnectException:连接拒绝主机:10.0.0.4”。 10.0.0.4是我的公共代理节点的主机名。

我使用https://docs.microsoft.com/en-us/azure/container-service/container-service-connect连接到我的dc / os群集(主节点)。 我还安装了jmxterm,并试图通过jmx连接到服务:

 java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://10.0.0.4:8081/jmxrmi 

我连接成功。

有没有人有任何想法,为什么我可以从我的主节点通过jmx连接到服务,但我不能从我的本地机器? 端口8081打开。

我在JAVA_OPTSstring中更改了属性-Djava.rmi.server.hostname的值:-Djava.rmi.server.hostname =“public agent ip”。 它适用于我。 在端口8081打开的情况下,对于标准tomcat容器的工作configuration:

 { "id": "/tomcat", "instances": 1, "cpus": 1, "mem": 512, "container": { "type": "DOCKER", "docker": { "image": "tomcat:8.0", "network": "BRIDGE", "portMappings": [ { "protocol": "tcp", "hostPort": 8080 , "containerPort": 8080 }, { "protocol": "tcp", "hostPort": 8081 , "containerPort": 8081 } ] } }, "requirePorts": true, "acceptedResourceRoles": [ "slave_public" ], "env": { "JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=<public agent ip> -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" }, "healthChecks": [ { "gracePeriodSeconds": 120, "intervalSeconds": 30, "maxConsecutiveFailures": 3, "path": "/", "portIndex": 0, "protocol": "HTTP", "timeoutSeconds": 5 } ] } 

我可以通过本地机器通过jmx连接到tomcat:host =“public agent ip”,port = 8081

公共代理ip =“前缀”agents.westeurope.cloudapp.azure.com

有没有人有任何想法,为什么我可以从我的主节点通过jmx连接到服务,但我不能从我的本地机器? 端口8081打开。

您应该连接jmx作为以下命令。

 java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://<agent public IP>:8081/jmxrmi 

更新:

主机名应该是public agent ip ,那么你可以从本地PC连接jmx。