Prisijunkite prie registro prievado per tunelį, stebėkite, kaip prasideda rankos paspaudimas, ir tada žiūrėkite, kaip JConsole vis tiek baigiasi skirtuoju laiku. Taip nutinka todėl, kad pirmasis TCP ryšys nėra valdymo ryšys: tai paieška. RMI registras atsako nuoroda, kurioje nurodytas mazgas ir antrasis prievadas, ir JConsole tada eina ten, kur jai buvo liepta. Jei tunelis pasiekia tik pirmąjį serverio prievadą arba nuoroda nurodo adresą, kuris egzistuoja tik pačio serverio vietiniame tinkle, klientas sustoja po tariamos sėkmės.

Mitas: vienas atidarytas prievadas yra vienas ryšys

Nuotolinis JMX per RMI apima bent du galinius taškus, o juos parenka skirtingos sistemos dalys. Registro prievadas yra tas, kurį įvedate kliente, ir jis egzistuoja tam, kad išduotų stubą, aprašantį tikrąjį jungtuką. Jei pirmąjį sėkmingą socket laikote įrodymu, kad valdymo kelias atidarytas, dviejų minučių diagnostika virsta visa popiete ugniasienės prašymų.

Žiūrėkite į paties kliento klaidą, o ne į serverio klausytojų sąrašą. Klaida prasidėjus rankos paspaudimui sako, kad nebaigtas antrasis ryšys, o ne pirmasis.

Ką registras grąžina

Stubas turi adresą ir prievadą, serializuotus tuo momentu, kai jungtukas buvo sukurtas. Serveriuje su keliomis sąsajomis dėklas galėjo pasirinkti adresą, pasiekiamą iš vietinio tinklo ir nepasiekiamą iš jūsų. Klientas skirtumo nežino; jis tiesiog renkasi gautą reikšmę, o paketas eina maršrutu, kuris egzistuoja tam adresui, o VPN kliente jo dažnai nėra. Tai momentas, kai bandomas antrasis ryšys.

Tai ir priežastis, kodėl klaida tarp aplinkų pasitaiko nereguliariai: tas pats serveris gali elgtis skirtingai vietinio tinklo naudotojui ir tunelio naudotojui, visai nekeičiant JMX konfigūracijos.

Du prievadai ir dvi savybės, kurios juos fiksuoja

Registro prievadas ateina iš com.sun.management.jmxremote.port, o jungtuką galima užfiksuoti su com.sun.management.jmxremote.rmi.port, o ne palikti tam, ką skiria dėklas. Nustatykite abu aiškiai, kai tarp kliento ir serverio yra ugniasienė ar saugos grupė, nes nenuspėjamo antrojo prievado negalima leisti iš anksto, o platus diapazonas, atidarytas dėl jo, yra blogiau nei vienas fiksuotas prievadas.

Tada serveriuje su ss -ltn arba netstat -an patvirtinkite, kad abu prievadai klausosi ir kuriais adresais. Klausytojas, susietas su loopback, yra teisingas tik vietiniam diegimui ir nenaudingas šiam atvejui.

Kai skelbiamas vardas neteisingas

Mazgo vardą nuotolinėje nuorodoje nustato java.rmi.server.hostname. Jis veikia tai, ką skelbia stubas; pats savaime tai nėra nurodymas susieti kiekvieną klausytoją su viena sąsaja, todėl jo nustatymas ne visada duoda laukiamą vieno prievado elgseną. Nustatykite jį, paleiskite procesą iš naujo ir tada patikrinkite, ką stubas iš tikrųjų turi. Pasirinkite vardą ar adresą, kurį klientas gali išspręsti ir pasiekti per tunelį, ir paleiskite procesą iš naujo, kad stubas būtų perstatytas.

Konteinerių tinklai tai blogina, nes adresas, kurį mato procesas, gali būti vidinis ir nepasiekiamas maršrutu iš konteinerio išorės. Skelbkite numatytą mazgo vardą aiškiai, o ne leiskite platformai rinktis.

Jei tunelį darote per SSH, o ne VPN, ta pati problema pasirodo kitu pavidalu: peradresavus tik registro prievadą, antrasis galinis taškas nurodo adresą, kurio jūsų klientas negali pasiekti. Peradresuokite abu prievadus ir užtikrinkite, kad skelbiamas vardas išsispręstų į tai, ką klientas pasiekia vietiškai.

Neišjunkite valdymo saugos, kad supaprastintumėte

Fragmentai, išjungiantys autentifikavimą ir TLS, lengvai randami ir priverčia ryšį veikti taip, kad vėliau teks atšaukti. Nuotolinis JMX yra valdymo sąsaja su tokiomis pačiomis teisėmis kaip procesas, kurį ji tikrina; išsaugokite jos prieigos kontrolę, o jei klientas negali pateikti prisijungimo duomenų, sutvarkykite būtent tai.

Kai galiniai taškai teisingi, išsaugokite kitą klaidą, kurią pamatysite. Pasitikėjimo saugyklos ar paskyros atmetimas yra vėlesnis etapas nei nepasiekiamas jungtukas ir reiškia, kad tinklo darbas baigtas.

Susiję straipsniai