Mi sono trovato in una situazione molto specifica e, sebbene ci siano altri modi per farlo, sono diventato ossessionato da questo e vorrei scoprire un modo per farlo esattamente in questo modo:
sfondo
Supponiamo che io abbia un server che esegue diversi servizi nascosto in contenitori docker isolati. Poiché la maggior parte di questi servizi sono http, sto usando un proxy nginx per esporre sottodomini specifici a ciascun servizio. Ad esempio, un server nodo è in esecuzione su un contenitore finestra mobile con la porta 80
collegata 127.0.0.1:8000
all'host. Creerò un vhost in nginx che inoltra tutte le richieste myapp.mydomain.com
a http://127.0.0.1:8000
. In questo modo, il contenitore docker non è accessibile dall'esterno, tranne attraverso myapp.mydomain.com
.
Ora voglio avviare un contenitore finestra mobile gogs in modo tale che gogs.mydomain.com
punti al contenitore gogs. Quindi avvio questo contenitore gog con porta 8000
associata 127.0.0.1:8001
sull'host. E un sito nginx che richiede il proxy gogs.mydomain.com
a http://127.0.0.1:8001
e funziona bene ...
Tuttavia, essendo gog un contenitore git, vorrei anche accedere ai repository come attraverso git@gogs.mydomain.com:org/repo
ma ciò non funziona con la configurazione corrente. Un modo per farlo sarebbe legare la porta 22
del contenitore alla porta 0.0.0.0:8022
sull'host, e quindi l'URL git ssh può essere qualcosa di simile git@gogs.mydomain.com:8022/repo
.
(Questo non sembra funzionare; quando spingo su un'origine con uri del genere, git richiede la password per l'utente git
su gogs.mydomain.com
- invece di gogs.mydomain.com:8022
- ma è probabilmente qualcosa che sto facendo di sbagliato e fuori portata per questa domanda, tuttavia, Gradirei qualsiasi diagnosi anche per quello)
Problema
La mia preoccupazione principale è che desidero <gogs container>:22
eseguire il proxy della porta ssh proprio come sto facendo il proxy delle porte http usando nginx; vale a dire qualsiasi connessione ssh da gogs.mydomain.com
trasmettere alla porta del contenitore 22
. Ora non posso associare la porta ssh del contenitore alla porta ssh dell'host perché sull'host è già in esecuzione un sshd. Inoltre, ciò significherebbe che qualsiasi connessione deve *.mydomain.com
essere passata al sshd del contenitore.
Voglio qualsiasi connessione ssh per:
mydomain.com
host.mydomain.com
o l'indirizzo IP di miodominio da accettare e inoltrare allo sshd sull'hostgogs.mydomain.com
ogit.mydomain.com
per essere accettato e trasmesso allo sshd sul contenitore di gogs*.mydomain.com
(dove*
c'è qualcosa di diverso dalle possibilità sopra) da rifiutare
Se fosse http, potrei facilmente farlo funzionare con nginx. C'è un modo per farlo per ssh?
(Vorrei anche andare su un arto e chiedere: c'è un modo per farlo con qualsiasi servizio TCC in generale?)
Sono anche benvenute tutte le informazioni sul modo in cui sto cercando di farlo qui. Non mi dispiace che mi venga detto quando quello che sto cercando di fare è assolutamente stupido.
Quello che ho già in mente:
Forse potrei condividere il socket sshd sull'host con il contenitore come ro
volume? Ciò significherebbe che l'shsh all'interno del contenitore potrebbe raccogliere tutte le connessioni *.mydomain.com
. Potrebbe esserci un modo per fare in modo che sshd all'interno del contenitore rifiuti tutte le connessioni diverse da gogs.mydomain.com
o git.mydomain.com
? Tuttavia, sshd sull'host prenderà *.mydomain.com
comunque tutte le connessioni tra cui gogs.mydomain.com
; quindi ci sarebbe un conflitto. Non lo so, non l'ho ancora provato. Dovrei provarlo?