我部署在Azure上的DC/OS群集。我在群集中部署了一个包含Java应用程序的容器。但是我无法通过JMX访问它。
以部署标准Tomcat镜像为例:
1)根据https://learn.microsoft.com/en-us/azure/container-service/container-service-enable-public-access#open-a-port-portal的说明,我打开了8081端口。
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”。但我无法连接,收到一条消息:“无法连接”。
尽管如此,我可以使用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
我得到了下一个异常:"java.rmi.ConnectException: Connection refused to host: 10.0.0.4"。10.0.0.4是我的公共代理节点的主机名。
我使用https://learn.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已经打开。
ssh -i/id_rsa user@10.0.0.4
您还可以使用FileZilla将私钥上传到Master VM。 - Shui shengbao