我有一个部署到Azure的dc/os群集。我用java应用程序向集群部署了一个容器。但我无法通过jmx访问它。DC/OS JMX访问
让我们部署非标准的Tomcat图像的示例:
1)I打开的端口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任务控制。我将字段'Host'和'Port'填充为'prefixagents.westeurope.cloudapp.azure.com'和'8081'。但我无法连接,我收到一条消息:'无法连接'。
但对于所有这些我可以使用Telnet客户端成功地连接到这个端口:
telnet prefixagents.westeurope.cloudapp.azure.com 8081
我也可以连接到端口8080,我可以打开以下网址的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
我得到了下一个异常:“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打开。
DC/OS代理ssh服务不会暴露给Internet。您可以ssh到主虚拟机上的代理。主节点和代理节点使用相同的ssh密钥。您可以将您的私钥复制到主虚拟机。 ssh -i/id_rsa [email protected] 您也可以使用FileZilla将私钥上传到主虚拟机。 –
当我在'docker exec -it 3802221a5808 bash'时,我用'ps -ef | grep jmx'找到了jmx进程。我得到结果'root @ 3802221a5808:/ usr/local/tomcat/bin#ps -ef | grep jmx root 1 0 4 06:50? 00:00:27/docker-java-home/jre/bin/java -Djava.util.logging.config.file =/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager = org .apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname = 0.0.0.0 -Dcom.sun.managem .... ' –
根据我的经验,似乎你的配置是正确。你可以尝试将你的应用程序部署到tomcat容器并再次测试吗? –