network_mode: service:vpn dan nama host db yang hilang
Berbagi ruang nama VPN adalah pilihan topologi. Entah db mempertahankan alamatnya sendiri dan vpn bergabung ke jaringan itu, atau semuanya menjawab di loopback.
Anda menambahkan network_mode: service:vpn ke aplikasi, memulai ulang stack, dan aplikasi mati karena db tidak lagi ter-resolve. Tidak ada yang diganti namanya di berkas compose, jadi tersangka yang jelas adalah DNS dan basis data. Perubahan sebenarnya lebih kecil dan lebih aneh: aplikasi berhenti menjadi anggota jaringan Compose tempat nama itu ada. Sampai Anda memutuskan dari ruang nama mana basis data harus menjawab, setiap perbaikan nama host hanyalah dugaan.
Mengapa nama host db berhenti ter-resolve
Layanan yang memakai network_mode tidak punya alamat sendiri di jaringan Compose; ia meminjam ruang nama layanan yang disebut. Ruang nama itu membawa antarmuka, rute, ruang port, dan resolver-nya sendiri, dan ia menggantikan keterikatan aplikasi ke jaringan backend. Nama db tidak pernah abstrak: ia hidup di jaringan itu dan di-resolve melalui DNS bawaannya. Lepaskan keterikatan itu dan nama tersebut tidak punya tempat untuk di-resolve.
Pastikan itu dari dalam kontainer, bukan dari host. Pencarian yang gagal di aplikasi tetapi berhasil di kontainer basis data berarti namanya benar dan keanggotaannya tidak. Hasil itu juga menempatkan perbaikan pada topologi compose, bukan pada pengaturan resolver aplikasi.
Tiga pertanyaan sebelum Anda menyunting berkas
Jawab berurutan, karena masing-masing mempersempit topologi. Atas apa basis data harus menjawab: nama host yang dipakai kontainer lain, atau hanya aplikasi di loopback? Apakah aplikasi harus menerbitkan port ke host, dan layanan mana yang akan memilikinya? Apakah basis data harus dapat dijangkau dari host atau dari mesin lain, atau hanya dari dalam terowongan?
Jika basis data membutuhkan namanya sendiri dan aplikasi tidak menerbitkan apa pun, biarkan keduanya pada keterikatan terpisah. Jika aplikasi harus menerbitkan port dan semuanya melewati terowongan, taruh basis data di ruang nama VPN dan gunakan loopback. Mencampur keduanya menghasilkan stack yang mulai bersih dan gagal saat menyambung.
Biarkan basis data di tempatnya
Perubahan yang lebih kecil mengaitkan pemilik ruang nama ke jaringan yang sudah berisi basis data. Aplikasi mewarisi keterikatan itu karena berbagi stack vpn, dan db ter-resolve persis seperti sebelumnya.
services:
vpn:
networks:
- backend
app:
network_mode: service:vpn
db:
networks:
- backend
networks:
backend:Jangan tambahkan networks juga ke aplikasi. Compose menolak properti itu bersama network_mode di layanan yang sama, dan galatnya menunjuk berkas, bukan pasangannya. Jika klien VPN memfilter tujuan backend di dalam ruang namanya, sesuaikan juga kebijakan jaringan lokal yang didukungnya; keterikatan bersama menawarkan jalur tetapi tidak mengesampingkan filter itu.
Pindahkan basis data ke ruang nama
Perubahan yang lebih besar menaruh basis data di ruang nama yang sama dan mengarahkan aplikasi ke 127.0.0.1 dengan port sebenarnya. Dua proses tidak bisa keduanya mengikat alamat dan port yang sama hanya karena keduanya dimulai di kontainer berbeda, jadi basis data yang juga mendengarkan di alamat wildcard akan bertabrakan dengan apa pun yang juga melakukannya. Periksa pendengarnya sebelum memindahkannya.
Port yang diterbitkan milik layanan pemilik ruang nama. Menambahkan ports ke aplikasi ditolak bersama network_mode, dan mengarang alamat aplikasi terpisah menggambarkan antarmuka yang tidak ada.
Kesiapan, pemblokiran, dan resolver
depends_on mengurutkan mulai kontainer; itu bukan bukti terowongan hidup, dan tidak menghentikan lalu lintas saat terowongan putus. Perlakukan keterjangkauan, kesiapan terowongan, dan pemblokiran kegagalan sebagai tiga persyaratan terpisah. Stack yang hanya memenuhi yang pertama lolos uji manual pada hari baik dan bocor pada hari buruk. Tuliskan ketiga jawaban di samping berkas compose, tempat orang berikutnya akan melihat.
Berbagi ruang nama juga berarti aplikasi mewarisi resolver kontainer VPN, yang membantu saat terowongan mendorong server DNS dan membingungkan saat tidak. Periksa apa yang sebenarnya dimuat ruang nama alih-alih menganggap resolver host berlaku. Referensi layanan Compose mendokumentasikan network_mode, ports, dan perilaku dependensi di satu tempat, termasuk mengapa layanan network_mode tidak punya alamat sendiri.