Tiada apa yang salah dengan aplikasi dan tiada apa yang salah dengan terowong, namun papan pemuka masih tidak dimuatkan. Apabila perkhidmatan berjalan dengan network_mode: service:vpn, ia berkongsi ruang nama rangkaian kontena VPN, bermakna pendengarnya dan port yang diterbitkan adalah milik ruang nama itu, bukan perkhidmatan. Tiga keputusan menyusul: di mana aplikasi mengikat, kontena mana yang menerbitkan port, dan betapa sempit laluan pengurusan. Lakukan dalam urutan yang salah dan setiap tetapan nampak betul, sedangkan gabungannya tidak boleh berfungsi.

Siapa yang memiliki ruang nama port

Dalam ruang nama yang dikongsi, menambah entri ports: pada perkhidmatan bergantung tidak membantu apa-apa, dan beberapa pilihan rangkaian memang tidak disokong untuknya mengikut reka bentuk. Terbitkan pada kontena yang memiliki ruang nama itu. Kontena itu juga yang alamatnya muncul pada hos, jadi pemetaan dibaca sebagai satu entri dan bukan satu bagi setiap perkhidmatan.

services:
  vpn:
    image: vpn-client-image
    cap_add: [NET_ADMIN]
    ports:
      - "127.0.0.1:8080:8080"
  app:
    network_mode: "service:vpn"

Perhatikan alamat di sebelah kiri pemetaan. Mengikat pada 127.0.0.1 mengekalkan port yang diterbitkan pada loopback hos, yang biasanya dikehendaki antara muka pengurusan. Mengikat pada 0.0.0.0 mendedahkannya pada setiap antara muka hos, dan itu keputusan keselamatan yang lain, bukan kemudahan.

Buat aplikasi mendengar di tempat yang dijangka oleh ruang nama

Pendengar yang diikat pada 127.0.0.1 di dalam ruang nama hanya boleh dicapai dari dalam ruang nama itu. Port hos yang diterbitkan datang dari luar, jadi aplikasi mesti mengikat alamat yang lebih luas supaya pemetaan berfungsi. Itu perubahan satu baris pada kebanyakan pelayan, dan itulah langkah yang dilangkau orang selepas menyalin panduan pengukuhan yang ditulis untuk penggunaan tanpa kontena.

docker compose exec app ss -lntp
docker port vpn
curl -sS -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/

Senarai pendengar di dalam aplikasi memberitahu kebenaran tentang alamat pengikatan, dan docker port memberitahu apa yang sebenarnya diterbitkan oleh pemilik. Jika yang pertama menunjukkan 127.0.0.1 dan yang kedua menunjukkan pemetaan hos, anda telah menemui ketidakpadanan tanpa menyentuh konfigurasi VPN.

Pilih bagaimana laluan pengurusan masuk

Terdapat tiga susunan yang munasabah. Terbitkan pada kontena VPN dan capai dari hos atau rangkaian tempatan. Letakkan proksi terbalik di hadapan ruang nama dan beri proksi satu-satunya port yang terdedah. Atau kekalkan papan pemuka boleh dicapai hanya dari dalam ruang nama melalui sesi exec atau terowong SSH, iaitu pendedahan terkecil dan kemudahan paling sedikit.

Yang mana sesuai bergantung pada siapa yang memerlukan antara muka dan dari mana. Seorang pentadbir pada hos yang sama memadai dengan pengikatan loopback. Pasukan yang mencapainya melalui VPN memerlukan laluan yang disengajakan dan pemilik yang dinamakan. Memilih pilihan proksi memberi anda TLS dan log akses, dengan kos satu lagi komponen untuk dikemas kini.

Buka port pengurusan tanpa membuka semuanya

Dasar akses tempatan atau kunci klien VPN boleh menggugurkan permintaan pengurusan masuk walaupun terowong keluar berfungsi dengan sempurna. Benarkan satu pengecualian terdokumen untuk sumber dan port yang dimaksudkan, kemudian sahkan perlindungan biasa terowong tidak berubah. Mematikan suis pembunuh supaya papan pemuka dimuatkan menukar kawalan sebenar dengan satu tab pelayar.

Biarkan pengesahan aplikasi itu sendiri dihidupkan. Berada di dalam tindanan yang bersambung ke VPN tidak memberi kuasa kepada setiap pengguna tempatan atau setiap peranti yang boleh mencapai hos, dan panel pentadbir tanpa pengesahan di belakang terowong tetap panel pentadbir tanpa pengesahan.

Sahkan dari peranti pengurusan, kemudian sahkan semula kemudian

Uji dari mesin yang benar-benar akan menguruskan perkhidmatan, bukan dari hos, kemudian sahkan laluan internet yang diperlukan aplikasi secara berasingan. Kejayaan pengurusan membuktikan satu arah dan tidak berkata apa-apa tentang keluar.

Uji semula selepas tindanan dicipta semula. Pemilik rangkaian yang diganti mengubah ruang nama tempat aplikasi melekat, dan URL yang berfungsi sebelum kemas kini mungkin tidak menunjuk ke mana-mana selepasnya. Catat pemetaan yang diterbitkan dan alamat pengikatan supaya pembinaan semula seterusnya menjadi pemeriksaan dua minit dan bukan siasatan berulang.

Artikel berkaitan