Saya telah memasuki situasi yang sangat spesifik dan walaupun ada cara lain untuk melakukan ini, saya agak terobsesi dengan ini dan ingin mencari cara untuk melakukannya persis seperti ini:
Latar Belakang
Katakanlah saya memiliki server yang menjalankan beberapa layanan yang tersimpan dalam wadah buruh pelabuhan yang terisolasi. Karena sebagian besar layanan tersebut adalah http, saya menggunakan proxy nginx untuk mengekspos subdomain spesifik untuk setiap layanan. Sebagai contoh, sebuah server simpul berjalan pada wadah buruh pelabuhan dengan port 80
terikat ke 127.0.0.1:8000
host. Aku akan membuat vhost di nginx bahwa proxy semua permintaan untuk myapp.mydomain.com
ke http://127.0.0.1:8000
. Dengan begitu, wadah buruh pelabuhan tidak dapat diakses dari luar, kecuali melalui myapp.mydomain.com
.
Sekarang saya ingin memulai gogs buruh pelabuhan kontainer sedemikian rupa sehingga gogs.mydomain.com
poin ke wadah gogs. Jadi saya mulai wadah gogs ini dengan port 8000
terikat 127.0.0.1:8001
pada tuan rumah. Dan permintaan proxy situs nginx gogs.mydomain.com
ke http://127.0.0.1:8001
dan berfungsi dengan baik ...
Namun, gog menjadi wadah git, saya juga ingin mengakses repo seperti melaluinya git@gogs.mydomain.com:org/repo
tetapi itu tidak berfungsi dengan pengaturan saat ini. Salah satu cara untuk membuatnya bekerja adalah dengan mengikat port 22
wadah ke port 0.0.0.0:8022
pada host, dan kemudian git ssh url dapat berupa sesuatu git@gogs.mydomain.com:8022/repo
.
(Itu tampaknya tidak bekerja, ketika saya mendorong ke asal dengan uri seperti itu, git menuntut password untuk pengguna git
di gogs.mydomain.com
- bukan gogs.mydomain.com:8022
- tapi itu mungkin sesuatu yang saya lakukan salah dan keluar dari ruang lingkup untuk pertanyaan ini, bagaimanapun, Saya sangat menghargai diagnosis apa pun untuk itu)
Masalah
Perhatian utama saya adalah, bahwa saya ingin port ssh <gogs container>:22
diproksikan seperti halnya saya memproxy port http menggunakan nginx; yaitu setiap koneksi ssh untuk gogs.mydomain.com
diteruskan ke port kontainer 22
. Sekarang saya tidak dapat mengikat port ssh kontainer ke port ssh host karena sudah ada sshd berjalan pada host. Juga, itu berarti bahwa setiap koneksi untuk *.mydomain.com
diteruskan ke sshd wadah.
Saya ingin koneksi ssh ke:
mydomain.com
host.mydomain.com
atau alamat IP mydomain untuk diterima dan diteruskan ke sshd pada hostgogs.mydomain.com
ataugit.mydomain.com
untuk diterima diteruskan ke sshd pada wadah gogs*.mydomain.com
(Di mana*
ada selain kemungkinan di atas) untuk ditolak
Jika itu http, saya bisa dengan mudah membuatnya bekerja melalui nginx. Apakah ada cara untuk melakukan itu untuk ssh?
(Juga ingin pergi keluar pada tungkai dan bertanya: apakah ada cara untuk mencapai itu dengan setiap layanan tcp secara umum?)
Setiap wawasan tentang cara saya mencoba melakukannya di sini, juga diterima. Saya tidak keberatan diberi tahu ketika apa yang saya coba lakukan benar-benar bodoh.
Apa yang sudah ada dalam pikiran saya:
Mungkin saya bisa berbagi soket sshd di host dengan wadah sebagai ro
volume? Itu berarti sshd di dalam wadah dapat mengambil semua koneksi *.mydomain.com
. Mungkinkah ada cara untuk membuat sshd di dalam wadah menolak semua koneksi selain gogs.mydomain.com
atau git.mydomain.com
? Namun, sshd pada host akan mengambil semua koneksi untuk *.mydomain.com
tetap termasuk gogs.mydomain.com
; jadi akan ada konflik. Saya tidak tahu, saya belum benar-benar mencobanya. Haruskah saya mencobanya?