JConsole terhubung ke registry, lalu RMI mengirimnya ke tempat lain
Port registry yang menjawab hanya lompatan pertama. Server JMX jarak jauh bisa mengumumkan host lain dan port konektor lain, dan terowongan harus mencapai keduanya.
Hubungkan ke port registry melalui terowongan, amati handshake dimulai, lalu lihat JConsole tetap kehabisan waktu. Itu terjadi karena koneksi TCP pertama bukan koneksi manajemen: itu adalah pencarian. Registry RMI menjawab dengan referensi yang menyebut sebuah host dan port kedua, dan JConsole lalu pergi ke mana pun ia disuruh. Jika terowongan hanya mencapai port pertama server, atau referensi menyebut alamat yang hanya ada di LAN server itu sendiri, klien berhenti setelah tampak berhasil.
Mitos: satu port terbuka adalah satu koneksi
JMX jarak jauh melalui RMI melibatkan setidaknya dua titik akhir, dan keduanya dipilih oleh bagian sistem yang berbeda. Port registry adalah yang Anda ketik di klien, dan ia ada untuk menyerahkan stub yang menjelaskan konektor sebenarnya. Menganggap soket pertama yang berhasil sebagai bukti jalur manajemen terbuka adalah yang mengubah diagnosis dua menit menjadi seharian tiket firewall.
Perhatikan kesalahan klien itu sendiri, bukan daftar pendengar di server. Kegagalan setelah handshake dimulai memberi tahu Anda bahwa koneksi kedua, bukan yang pertama, tidak selesai.
Apa yang dikembalikan registry
Stub berisi alamat dan port yang diserialkan saat konektor dibuat. Pada server dengan beberapa antarmuka, tumpukan mungkin memilih alamat yang dapat dijangkau dari jaringan lokal dan tidak dari jaringan Anda. Klien tidak tahu bedanya; ia hanya memanggil nilai yang diberikan, dan paket mengikuti rute yang ada untuk alamat itu, yang pada klien VPN sering kali tidak ada sama sekali. Saat itulah koneksi kedua dicoba.
Inilah juga sebabnya kegagalan bersifat intermiten antar lingkungan: server yang sama dapat berperilaku berbeda bagi pengguna di LAN dan pengguna di terowongan, tanpa perubahan apa pun pada konfigurasi JMX.
Dua port dan dua properti yang memakunya
Port registry berasal dari com.sun.management.jmxremote.port, dan konektor dapat dipaku dengan com.sun.management.jmxremote.rmi.port alih-alih dibiarkan pada apa yang dialokasikan tumpukan. Tetapkan keduanya secara eksplisit ketika ada firewall atau grup keamanan antara klien dan server, karena port kedua yang tak terduga tidak dapat diizinkan sebelumnya, dan rentang lebar yang dibuka untuk mengakomodasinya lebih buruk daripada memaku satu nilai.
Lalu pastikan dengan ss -ltn atau netstat -an di server bahwa kedua port mendengarkan dan pada alamat apa. Pendengar yang terikat ke loopback benar untuk penerapan hanya lokal dan tidak berguna untuk yang ini.
Ketika nama yang diumumkan salah
Nama host yang muncul di referensi jarak jauh diatur oleh java.rmi.server.hostname. Itu memengaruhi apa yang diumumkan stub; dengan sendirinya itu bukan instruksi untuk mengikat setiap pendengar ke satu antarmuka, karena itu menetapkannya tidak selalu menghasilkan perilaku satu port yang diharapkan. Tetapkan, mulai ulang prosesnya, lalu verifikasi apa yang sebenarnya dikandung stub. Pilih nama atau alamat yang dapat diselesaikan dan dijangkau klien melalui terowongan, dan mulai ulang prosesnya agar stub dibangun ulang.
Jaringan kontainer memperburuk ini, karena alamat yang dilihat proses bisa berupa alamat internal yang tidak dapat dirutekan dari luar kontainer. Publikasikan nama host yang dimaksud secara eksplisit alih-alih membiarkan platform memilih.
Jika Anda membuat terowongan dengan SSH alih-alih VPN, masalah yang sama muncul dalam kostum lain: hanya meneruskan port registry membuat titik akhir kedua menunjuk alamat yang tidak dapat dijangkau klien Anda. Teruskan kedua port dan buat nama yang diumumkan terselesaikan ke sesuatu yang dapat dijangkau klien secara lokal.
Jangan matikan keamanan manajemen untuk menyederhanakannya
Cuplikan yang mematikan autentikasi dan TLS mudah ditemukan dan membuat koneksi bekerja dengan cara yang nanti harus Anda batalkan. JMX jarak jauh adalah antarmuka manajemen dengan hak istimewa yang sama dengan proses yang diperiksanya; pertahankan kontrol aksesnya, dan jika klien tidak dapat menyajikan kredensial, perbaiki itu sebagai gantinya.
Setelah titik akhir benar, simpan kesalahan berikutnya yang Anda lihat. Penolakan dari truststore atau akun adalah tahap yang lebih akhir daripada konektor yang tak terjangkau dan berarti pekerjaan jaringan sudah selesai.