JConsole, Java Mission Control과 같은 클라이언트를 사용하여 Java 응용 프로그램 (Java 8 및 Spring Boot 1.4 및 Tomcat)에서 1099 (기본값)로 정의 된 JMX 포트에 연결하려고합니다. 또는 Java VisualVM과, 그러나 나는 오류에 도달하고있다 : 나는 정확한 호스트 IP를 숨겨Kubernetes에서 관리하는 Docker 컨테이너를 통해 JMX에 어떻게 연결할 수 있습니까?
java.rmi.ConnectException: Connection refused to host: 10.xxx.xxx.xx, nested exception is:
java.net.ConnectException: Connection timed out
...
참고하지만, 내 서비스에 배포 된 특정는 Kubernetes 관리 도커 컨테이너의 포드 IP입니다 내가하려고합니다.
jconsole service:jmx:rmi://<nodeIP>:<nodePort>/jndi/rmi://<nodeIP>:<nodePort>/jmxrmi
내가 JMX는 random high port을 엽니 다 알고 : 다음과 같은 서비스 URL을 사용하여 JMX 포트에 연결 나는 custom @Configuration class that forces that high port to also serve on port 1099을 포함하여이를 해결하려고 노력했습니다. 내가 실제 컨테이너와 포드에 사라와 열려있는 포트를 볼 수
netstat -tulpn
을 달리고, 내가 열 수있는 유일한 포트 (내 응용 프로그램이 실행되고있는) 8443 및 1099 있음을 확인했습니다했다합니다 (JMX 포트); 이것은 내 수업이 작동 함을 나타냅니다. 나는 또한 포트 1099가 Kubernetes쪽에 열려 있음을 확인 했으므로 차단하지 않습니다. 대답은 JMX 포트와 RMI 레지스트리 포트를 강제 제안
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.jmi.port=1099 -Djava.rmi.server.hostname=0.0.0.0
하십시오 JMX 원격 연결을 둘러싼
로 많은 대답은 내가 아무 소용이 다음과 같은 Java 옵션의 많은 변화를 시도했다 제안 동일하지만, 이들 중 어느 것도 효과가 없습니다.
호스트 이름 (-Djava.rmi.server.hostname = 0.0.0.0으로 동적으로 만들려고 했으므로)이 매번 생성 된 다른 호스트 이름 (포드 IP)을 확인할 수 없기 때문에이 문제가 발생할 수 있다고 생각합니다. 내 서비스가 배포됩니다.
따라서 JMX는 내 서비스가 배포 된 후 Kubernetes가 할당 한 호스트 이름을 볼 수 없기 때문에 연결을 완료 할 수없는 것처럼 보입니다.
JMX가 Kubernetes 호스트 이름을 인식 할 수있는 방법이 있습니까? 아니면 Kubernetes가 배포 한 서비스를 통해 JMX 포트에 원격으로 연결할 수있는 다른 방법이 있습니까?
EDIT 1 : 추가 조사를 해본 결과, RMI 대신 선택적 JMXMP가 작동 할 수 있습니까? Tomcat에서이 작업을하는 사람이 있습니까?
'kubectl port-forward [podname] 1099 : 1099'를 사용하여 듣고 있는지 테스트 해 보셨습니까? – 3ocene
또한 [10.xxx.xxx.xxx IP 범위가 예약되어 있습니다] (https://en.wikipedia.org/wiki/Private_network). 공개 IP가 아니기 때문에 연결할 수 없습니다. 노드의 IP 주소를 통해 대화 상대와 통신하려면 서비스 및 수신을 설정해야합니다. – 3ocene
우리의 경우 @3cene 포트 포워드는 옵션이 아닙니다. 우리는 상황에 맞게 노드 포트를 사용할 수 있어야합니다. 10.xxx.xxx.xxx 주소는 개인 IP이며 클러스터는 개인 네트워크의 일부입니다.클러스터의 노드에서 podIP : 1099와 연결 작업까지 ssh-tunnel을했지만 node : nodePort와는 작동하지 않습니다. – realgenob