JConsole kobler til registret, og så sender RMI den et annet sted
At registry-porten svarer, er bare det første spranget. En ekstern JMX-server kan annonsere en annen vert og en annen connector-port, og tunnelen må nå begge.
Koble til registry-porten gjennom tunnelen, se håndtrykket begynne, og se deretter JConsole få tidsavbrudd likevel. Det skjer fordi den første TCP-tilkoblingen ikke er administrasjonstilkoblingen: den er et oppslag. RMI-registret svarer med en referanse som angir en vert og en andre port, og JConsole går deretter dit den blir sendt. Hvis tunnelen bare når serverens første port, eller referansen angir en adresse som bare finnes på serverens eget LAN, stopper klienten etter tilsynelatende å ha lykkes.
Myten: én åpen port er én tilkobling
Ekstern JMX over RMI involverer minst to endepunkter, og de velges av forskjellige deler av systemet. Registry-porten er den du skriver inn i klienten, og den finnes for å dele ut stubben som beskriver den faktiske connectoren. Å ta den første vellykkede socketen som bevis på at administrasjonsveien er åpen, gjør en to-minutters diagnose om til en ettermiddag med brannmur-saker.
Se på klientens egen feil i stedet for serverens lytterliste. En feil etter at håndtrykket har begynt, forteller deg at den andre tilkoblingen, ikke den første, ikke ble fullført.
Hva registret gir tilbake
Stubben inneholder en adresse og en port, serialisert i det øyeblikket connectoren ble opprettet. På en server med flere grensesnitt kan stacken ha valgt en adresse som er nåbar fra det lokale nettverket og ikke fra ditt. Klienten kjenner ikke forskjellen; den ringer ganske enkelt verdien den fikk, og pakken følger den ruten som finnes for adressen, som på en VPN-klient ofte er ingen. Det er i det øyeblikket den andre tilkoblingen forsøkes.
Det er også derfor feilen er periodisk mellom miljøer: den samme serveren kan oppføre seg annerledes for en bruker på LAN og en bruker på tunnelen, uten at JMX-konfigurasjonen endres i det hele tatt.
To porter og to egenskaper som låser dem
Registry-porten kommer fra com.sun.management.jmxremote.port, og connectoren kan låses med com.sun.management.jmxremote.rmi.port i stedet for å overlates til det stacken tildeler. Angi begge eksplisitt når det er en brannmur eller sikkerhetsgruppe mellom klienten og serveren, for en uforutsigbar andre port kan ikke tillates på forhånd, og et bredt område åpnet for å romme den er verre enn å låse én verdi.
Bekreft deretter med ss -ltn eller netstat -an på serveren at begge portene lytter, og på hvilke adresser. En lytter bundet til loopback er riktig for en helt lokal utrulling og ubrukelig for denne.
Når det annonserte navnet er feil
Vertsnavnet som vises i fjernreferansen, settes av java.rmi.server.hostname. Det påvirker hva stubben annonserer; det er ikke i seg selv en instruks om å binde hver lytter til ett grensesnitt, og derfor gir det ikke alltid den forventede oppførselen med én port. Sett det, start prosessen på nytt, og kontroller deretter hva stubben faktisk inneholder. Velg et navn eller en adresse som klienten kan slå opp og nå gjennom tunnelen, og start prosessen på nytt slik at stubben bygges på nytt.
Containernettverk gjør dette verre, fordi adressen prosessen ser, kan være en intern en som ingenting utenfor containeren kan rute. Publiser det tiltenkte vertsnavnet eksplisitt i stedet for å la plattformen velge.
Hvis du tunnelerer med SSH i stedet for en VPN, dukker samme problem opp i en annen drakt: å videresende bare registry-porten lar det andre endepunktet peke på en adresse klienten din ikke kan nå. Videresend begge portene og sørg for at det annonserte navnet slår opp til noe klienten kan nå lokalt.
Ikke slå av administrasjonssikkerheten for å forenkle det
Snippets som slår av autentisering og TLS er lette å finne og får tilkoblingen til å virke på en måte du må angre senere. Ekstern JMX er et administrasjonsgrensesnitt med samme privilegier som prosessen det inspiserer; behold tilgangskontrollene, og hvis klienten ikke kan vise legitimasjon, fiks det i stedet.
Når endepunktene er riktige, ta vare på den neste feilen du ser. En avvisning fra et truststore eller en konto er et senere trinn enn en utilgjengelig connector og betyr at nettverksarbeidet er ferdig.