Anda mengedit konfigurasi WireGuard di dalam kontainer yang berjalan, berhasil, dan pembaruan image berikutnya menghapusnya. Tidak ada yang salah dikonfigurasi. File itu hidup di lapisan yang dapat ditulis milik kontainer, yang hanya ada untuk instans kontainer itu. Perbandingan yang penting bukanlah alat mana yang dipakai, melainkan input mana yang dideklarasikan oleh deployment Anda. Apa pun yang Anda edit dengan tangan adalah input yang tidak diketahui deployment.

Dua jenis status, salah satunya sekali pakai

Kontainer memiliki lapisan yang dapat ditulis untuk perubahan saat runtime, dan lapisan itu dibuang ketika kontainer diganti. Itu bukan penyimpanan konfigurasi dan bukan cadangan. Image ditambah input yang dideklarasikan adalah definisi lengkap dari apa yang berjalan.

Tanyakan file VPN mana yang merupakan input yang dideklarasikan dan mana yang kebetulan:

docker diff wg-vpn
docker inspect --format '{{json .Mounts}}' wg-vpn

Diff mendaftar apa yang berubah di lapisan yang dapat ditulis, dan itu tepat kumpulan hal yang akan hilang. Daftar mount menunjukkan apa yang bertahan. Membandingkan keduanya menjawab pertanyaan sebelum Anda kehilangan sesuatu.

Bind mount, volume bernama, atau secret: apa yang dilindungi masing-masing

Ketiganya dapat menyimpan profil VPN, dan berbeda dalam siapa yang dapat membacanya dan apa yang terjadi saat penggantian.

MechanismSurvives recreationWho can read it
Writable layerNoAnyone with container access, until it is gone
Bind mountYes, while the host path existsWhatever the host permissions allow
Named volumeYes, until the volume is removedManaged by the runtime
SecretYes, as a declared inputThe container process, by design

Bind mount memetakan jalur host, jadi file terlindungi sejauh jalur itu terlindungi dan terlihat sejauh izin host mengizinkan. Volume bernama dikelola oleh runtime dan bertahan saat kontainer dihapus, yang menjadikannya default yang lebih aman untuk status yang dimiliki deployment. Mekanisme secret untuk materi yang tidak Anda inginkan di image atau variabel lingkungan.

Jangan perlakukan setiap variabel lingkungan dan setiap file host sebagai perlindungan yang setara, karena memang tidak.

Mengedit di dalam kontainer adalah jebakannya

Jebakannya bukan alatnya, melainkan arah pengeditannya. Perubahan yang dibuat di dalam kontainer yang berjalan tidak terlihat oleh deployment, sehingga pembuatan ulang berikutnya mengembalikannya diam-diam dan gejalanya tampak seperti regresi pada image. Jika Anda harus mengubah sesuatu di sana untuk diagnosis, segera salin keluar dan masukkan ke input yang dideklarasikan. Lalu buat ulang untuk membuktikan bahwa deployment mereproduksinya.

Profil dapat membawa kunci privat dan materi akun, yang menjadikan cadangan file itu tugas penanganan rahasia, bukan sekadar salinan file. Jaga kepemilikan dan akses baca tetap terbatas pada proses kontainer yang sebenarnya, alih-alih memperlebar direktori host agar kesalahan izin menghilang.

Pelebaran itu adalah cara kenyamanan di kontainer menjadi paparan pada host.

Buat ulang dengan sengaja, lalu verifikasi empat hal

Catat versi image, perangkat dan kemampuan yang diperlukan, koneksi jaringan, dan input persisten. Daftar perangkat dan kemampuan sangat penting untuk kontainer VPN, karena terowongan membutuhkan perangkat jaringan dan hak istimewa untuk mengonfigurasinya.

Pastikan status runtime yang dihasilkan mana yang harus dibangun ulang alih-alih disimpan. Kunci yang dihasilkan terowongan saat pertama kali mulai adalah status, dan keputusan untuk menyimpannya atau membuatnya ulang berdampak pada setiap peer yang mengetahui kunci publik lama.

Setelah pembuatan ulang yang terkendali, verifikasi identitas, perutean, DNS, dan blok kegagalan yang diperlukan. Proses yang mulai tanpa kesalahan tidak membuktikan satu pun dari keempatnya. Periksa saat terowongan aktif dan lagi setelah Anda menghentikannya, karena blok kegagalan hanya menampakkan diri ketika terowongan hilang.

Simpan salinan pemulihan di luar kontainer

Simpan salinan pemulihan yang hidup terpisah dari kontainer, dan uji pemulihannya melalui proses yang didokumentasikan. Cadangan profil VPN yang belum diuji hanyalah harapan, terutama ketika jalur pemulihan melibatkan izin yang dibutuhkan proses kontainer.

Jika kontainer pemilik VPN diganti, koordinasikan aplikasi yang berbagi tumpukan jaringannya dalam siklus hidup yang didukung runtime.

Koordinasi itulah perbedaan antara mulai ulang dan pemadaman. Deployment harus menjelaskan dari mana konfigurasi berasal, dan dokumentasi volume adalah tempat untuk memeriksa apa yang sebenarnya dipertahankan runtime.

Artikel terkait