Seorang klien terhubung ke salah satu dari beberapa server OpenVPN lalu membutuhkan layanan kecil yang berjalan di node itu: halaman status, endpoint metrik, agen cadangan. Memberi setiap node alamat layanan privat yang sama membuat konfigurasi klien identik di server mana pun ia mendarat. Kenyamanan itu nyata, dan juga mudah ditafsirkan berlebihan: alamat bersama memberi tahu node mana yang Anda capai, bukan bahwa ada sesuatu yang redundan.

Mengapa alamat yang sama di setiap node berhasil

Setiap node memiliki alamat itu secara lokal dan menjawabnya, sehingga klien yang mencapainya melalui terowongannya saat ini mendapat layanan di ujung terjauh terowongan itu. Tidak ada yang dikoordinasikan antarnode, dan tidak ada lalu lintas yang menyeberang dari satu node ke node lain.

Alamat itu adalah label lokal, diulang bukan direplikasi. Setiap node menjawab hanya untuk dirinya sendiri, dan tidak satu pun meneruskan lalu lintas untuk alamat itu atas nama node lain. Itulah yang menjaga satu konfigurasi klien tetap sah sementara server tetap independen. Itu juga sebabnya rancangan ini tidak membutuhkan koordinasi antarnode.

Itulah sebabnya konfigurasi yang sama berhasil di setiap server tanpa protokol perutean di antara mereka. Itu juga sebabnya rancangan ini tidak mengatakan apa pun tentang kesehatan: alamat itu ada pada node yang sakit persis seperti pada node yang sehat, karena ia terikat pada host, bukan pada bergunanya layanan.

Tetapkan ke loopback, bukan ke terowongan

Menaruh alamat pada antarmuka loopback memisahkannya dari masa hidup perangkat terowongan mana pun, sehingga koneksi ulang atau pemuatan ulang konfigurasi tidak menghapusnya. Alamat itu ada selama host ada.

Alamat pada lo bukan filter. Layanan tetap harus mendengarkannya, dan tembok api host tetap menilai jalur masuk yang sebenarnya, yang tiba di antarmuka terowongan. Siapa pun yang menganggap loopback berarti hanya lokal akhirnya memblokir klien yang sah atau mengekspos sesuatu yang tidak ia maksudkan.

Jadikan penetapan itu persisten melalui konfigurasi jaringan host alih-alih menambahkannya lagi dari hook. Hook penyiapan tidak akan berjalan pada node yang tidak menaikkan terowongan, dan alamat layanan seharusnya tidak bergantung pada aktivitas terowongan. Taruh alamat di konfigurasi antarmuka yang dikelola distribusi Anda, lalu reboot sekali dan periksa. Reboot adalah satu-satunya uji yang bertahan terhadap perubahan konfigurasi di kemudian hari.

ip address show dev lo | grep 10.250.0.1
ip address add 10.250.0.1/32 dev lo

Dorong satu rute dan maksudkan satu tujuan

Klien membutuhkan rute host untuk alamat itu, ditawarkan oleh server yang ia hubungi. Karena setiap server menawarkan tujuan yang sama, profil tidak berubah ketika klien berpindah.

Periksa apa yang dipasang klien sebelum menyalahkan layanan.

ip route get 10.250.0.1

Untuk layanan HTTP, beri alamat itu nama dan sertifikat untuk nama tersebut. IP bersama bukan identitas, dan itu tidak menghapus verifikasi TLS, juga tidak membenarkan menyalin satu kunci privat ke setiap node. Nama yang mengarah ke alamat bersama membuat kisah sertifikat tetap biasa dan memungkinkan Anda menyimpan identitas per node bila perlu.

Apa yang tidak bisa dilakukan alamat bersama

Ia tidak menyediakan failover. Jika node yang dipilih mati, alamat itu mati bersamanya, dan klien harus menyambung ulang di tempat lain.

Ia tidak memigrasikan sesi TCP yang hidup, karena koneksi baru berakhir di host lain yang tidak tahu apa-apa tentang yang lama.

Ia tidak memilih node yang sehat, tidak menyeimbangkan beban, dan tidak menyinkronkan data antarnode. Masing-masing itu adalah mekanisme terpisah dengan mode kegagalannya sendiri, dan berpura-pura bahwa trik pengalamatan mencakup semuanya adalah cara rancangan sederhana memperoleh reputasi ketahanan yang tidak layak. Jika dua terowongan aktif sekaligus, makna tujuan menjadi kabur, jadi pertahankan asumsi satu terowongan aktif secara eksplisit.

Pertahankan identitas layanan bersama nama

Tuliskan apa arti alamat itu: ia mencapai layanan pada node tempat klien saat ini terhubung. Satu kalimat itu mencegah sebagian besar kesalahpahaman yang ditarik pola ini.

Lalu dokumentasikan bagian-bagiannya bersama: alamatnya, antarmuka tempat ia hidup, rute yang didorong server, dan nama serta sertifikat yang disajikan layanan. Empat fakta kecil yang dapat diverifikasi pembaca masa depan, dalam urutan ia akan memeriksanya.

Jika kebutuhannya adalah tujuan stabil untuk layanan lokal node, pola ini cocok dan hampir tidak memakan biaya.

Jika kebutuhannya ketersediaan, naik satu lapis: penyeimbang beban, nama layanan dengan pemeriksaan kesehatan, atau sistem orkestrasi yang sudah tahu cara mengganti node.

Memutuskannya lebih awal menjaga alamat bersama tetap sebagai dirinya, label yang nyaman, alih-alih komponen yang diam-diam diharapkan melakukan pekerjaan yang tidak pernah dirancang untuknya.

Artikel terkait