У меня есть кластер dc/os, развернутый в Azure. Я развернул в кластере контейнер с моим Java-приложением. Но я не могу получить к нему доступ через jmx.
Давайте рассмотрим пример развертывания стандартного образа 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». Но я не могу подключиться и получаю сообщение: «Невозможно подключиться».
Но при всем этом я могу успешно подключиться к этому порту с помощью клиента telnet:
telnet prefixagents.westeurope.cloudapp.azure.com 8081
Также я могу подключиться к порту 8080 и открыть веб-консоль tomcat по следующему URL-адресу: 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 — это имя узла моего публичного агента.
Я подключился к своему кластеру dc/os (главный узел) с помощью https://docs.microsoft.com/en-us/azure/container-service/container-service-connect. Я также установил туда jmxterm и попытался подключиться к сервису через jmx:
java -jar jmxterm.jar --url service:jmx:rmi:///jndi/rmi://10.0.0.4:8081/jmxrmi
И я успешно подключился.
У кого-нибудь есть идеи, почему я могу подключиться к сервису через jmx с моего главного узла, но не могу с моей локальной машины? Порт 8081 открыт.
docker exec -it 3802221a5808 bash
, я нахожу процесс jmx сps -ef|grep 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....
- person Shui shengbao   schedule 06.06.2017Does anybody have any ideas why I can connect to the service via jmx from my master node but I can't from my local machine? Port 8081 is opened.
Вы имеете в виду, что можете получить доступ к jmx на главной ВМcurl 10.0.0.4:8081
на главной ВМ? - person Shui shengbao   schedule 06.06.2017curl 10.0.0.4:8081
? - person Shui shengbao   schedule 06.06.2017