Çok özel bir duruma girdim ve bunu yapmanın başka yolları olsa da, buna takıntılı oldum ve bunu tam olarak böyle yapmanın bir yolunu bulmak istiyorum:
Arka fon
Diyelim ki izole docker kaplarına sıkışmış birkaç hizmeti çalıştıran bir sunucum var. Bu hizmetlerin çoğu http olduğundan, her hizmete belirli alt etki alanları göstermek için bir nginx proxy kullanıyorum. Örneğin, bir düğüm sunucusu bağlantı noktası ana makineye 80bağlı olarak bir docker kapsayıcısında çalışıyor 127.0.0.1:8000. Ben proxy uygulama tüm istekleri için nginx bir sankonu oluştururuz myapp.mydomain.comiçin http://127.0.0.1:8000. Bu şekilde, docker konteynerine içinden hariç, dışarıdan erişilemez myapp.mydomain.com.
Şimdi bir gogs docker konteynerini gogs.mydomain.comgogs konteynerine işaret edecek şekilde başlatmak istiyorum . Bu yüzden ana bilgisayara bağlı port ile bu gogs konteyner başlatmak . Ve bir nginx sitesi isteklerini proxy için ve iyi çalışıyor ...8000127.0.0.1:8001gogs.mydomain.comhttp://127.0.0.1:8001
Ancak, git git kap olmak gogs, ben de aracılığıyla depoları erişmek istiyorum git@gogs.mydomain.com:org/repoama geçerli kurulum ile çalışmaz. Bu işi yapmanın bir yolu 22, konteynerin bağlantı noktasını 0.0.0.0:8022ana bilgisayardaki bağlantı noktasına bağlamak ve daha sonra git ssh url'si gibi bir şey olabilir git@gogs.mydomain.com:8022/repo.
(Yani işin görünmüyor; böyle uri bir kökeni iterken, git kullanıcının parolasını talep gitüzerine gogs.mydomain.com- yerine gogs.mydomain.com:8022- ama bu ancak, muhtemelen bu soru için yanlış ve kapsam dışında yapıyorum şey, Bunun için herhangi bir teşhis için minnettar olurum)
Sorun
Benim asıl endişe, ben ssh bağlantı noktası <gogs container>:22nginx kullanarak http bağlantı noktaları proxy gibi proxied istiyorum olduğunu; örn . gogs.mydomain.comkabın bağlantı noktasına iletilecek ssh bağlantıları 22. Artık ana bilgisayarda çalışan bir sshd olduğu için kabın ssh portunu ana bilgisayarın ssh portuna bağlayamıyorum. Ayrıca, bu *.mydomain.com, kapsayıcıya ait herhangi bir bağlantının sshd'ye geçeceği anlamına gelir .
Herhangi bir ssh bağlantısı istiyorum:
mydomain.comhost.mydomain.comveya alan adımın IP adresi kabul edilecek ve ana bilgisayardaki sshd'ye iletilecekgogs.mydomain.comveyagit.mydomain.comgogs kapsayıcısındaki sshd'ye kabul edilmek*.mydomain.com(*yukarıdaki olasılıklardan başka bir şey nerede ) reddedilecek
Eğer http olsaydı, bu işi nginx aracılığıyla kolayca yapabilirdim. Ssh için bunu yapmanın bir yolu var mı?
(Ayrıca bir uzuv dışarı çıkmak ve sormak istiyorum: genel olarak herhangi bir tcp hizmeti ile bunu başarmak için bir yolu var mı?)
Burada yapmaya çalıştığım yolla ilgili herhangi bir fikir de kabul edilir. Yapmaya çalıştığım şeyin tamamen aptalca olduğu söylenmesine aldırmıyorum.
Zaten aklımda ne var:
Belki ana bilgisayardaki sshd soketini bir kap olarak kap ile paylaşabilir miyim ro? Bu, kabın içindeki sshd'nin tüm bağlantıları alabileceği anlamına gelir *.mydomain.com. Konteyner içindeki sshd'nin veya dışındaki tüm bağlantıları reddetmesinin bir yolu olabilir mi? Ancak, ana bilgisayardaki sshd dahil olmak üzere tüm bağlantıları alacak ; yani bir çatışma olur. Bilmiyorum, gerçekten denemedim. Should ben denemek?gogs.mydomain.comgit.mydomain.com*.mydomain.comgogs.mydomain.com