मैंने एक बहुत ही विशिष्ट स्थिति में प्रवेश किया है और हालांकि ऐसा करने के अन्य तरीके भी हैं, मैं थोड़े इस के साथ पागल हो गया हूं और इसे इस तरह से करने का एक तरीका खोजना चाहता हूं:
पृष्ठभूमि
कहो कि मेरे पास एक सर्वर है जो कई सेवाओं को अलग-थलग डॉकटर कंटेनरों में रखता है। चूंकि उन सेवाओं में से अधिकांश http हैं, मैं प्रत्येक सेवा के लिए विशिष्ट उपडोमेन को उजागर करने के लिए एक nginx प्रॉक्सी का उपयोग कर रहा हूं। उदाहरण के लिए, एक नोड सर्वर होस्ट पर 80
बाध्य पोर्ट के साथ docker कंटेनर पर चल रहा है 127.0.0.1:8000
। मैं nginx में एक vhost बनाऊंगा जो सभी अनुरोधों को सम्मिलित करता myapp.mydomain.com
है http://127.0.0.1:8000
। इस तरह, डॉकटर कंटेनर को बाहर से नहीं पहुँचा जा सकता है, सिवाय इसके myapp.mydomain.com
।
अब मैं इस तरह से एक गोगस डॉकटर कंटेनर शुरू करना चाहता हूं gogs.mydomain.com
जो गॉग्स कंटेनर की ओर इशारा करता है। इसलिए मैं इस गॉग्स कंटेनर को होस्ट पर पोर्ट पोर्ट 8000
के साथ शुरू करता हूं 127.0.0.1:8001
। और एक nginx साइट करने के gogs.mydomain.com
लिए अनुरोध http://127.0.0.1:8001
करता है और यह अच्छी तरह से काम करता है ...
हालांकि, गॉग एक git कंटेनर है, मैं भी इस तरह के माध्यम से repos का उपयोग करना चाहते हैं, git@gogs.mydomain.com:org/repo
लेकिन यह वर्तमान सेटअप के साथ काम नहीं करता है। उस काम को बनाने का एक तरीका यह होगा कि 22
कंटेनर के पोर्ट 0.0.0.0:8022
को मेजबान के पोर्ट पर बाँध दिया जाए , और फिर git ssh url कुछ इस तरह हो सकता है git@gogs.mydomain.com:8022/repo
।
(यही कारण है कि काम करने के लिए प्रतीत नहीं होता है, जब मैं uri उस तरह के साथ एक मूल करने के लिए धक्का, Git उपयोगकर्ता के लिए पासवर्ड की मांग git
पर gogs.mydomain.com
- के बजाय gogs.mydomain.com:8022
- लेकिन यह है कि शायद कुछ मैं गलत और क्षेत्र से बाहर कर रहा हूँ इस प्रश्न के लिए है, तथापि, मैं उसके लिए भी किसी निदान की सराहना करूंगा)
मुसीबत
मेरी मुख्य चिंता यह है, कि मैं ssh पोर्ट <gogs container>:22
को उसी तरह सम्मिलित करना चाहता हूं जैसे मैं nginx का उपयोग करके http पोर्ट को सम्मिलित कर रहा हूं; gogs.mydomain.com
कंटेनर के बंदरगाह पर जाने के लिए किसी भी ssh कनेक्शन 22
। अब मैं कंटेनर के ssh पोर्ट को होस्ट के ssh पोर्ट पर नहीं बांध सकता क्योंकि होस्ट पर पहले से ही sshd चल रहा है। इसके अलावा, इसका मतलब यह होगा कि *.mydomain.com
कंटेनर के sshd में जाने के लिए कोई भी कनेक्शन ।
मैं किसी भी ssh कनेक्शन चाहते हैं:
mydomain.com
host.mydomain.com
या होस्ट पर sshd को अग्रेषित करने के लिए mydomain का IP पताgogs.mydomain.com
याgit.mydomain.com
गॉग्स कंटेनर पर sshd के लिए एक पास को स्वीकार किया जाना चाहिए*.mydomain.com
(जहां*
ऊपर की संभावनाओं के अलावा कुछ भी नहीं है) को अस्वीकार कर दिया जाए
यदि यह http होता, तो मैं आसानी से nginx के माध्यम से वह काम कर सकता था। वहाँ एक तरीका है कि ssh के लिए है?
(इसके अलावा एक अंग पर बाहर जाना और पूछना: वहाँ एक तरीका है कि सामान्य रूप से किसी भी tcp सेवा के साथ है ?)
जिस तरह से मैं इसे यहाँ करने की कोशिश कर रहा हूँ, वह भी स्वागतयोग्य है। मुझे नहीं बताया जा रहा है जब मैं जो करने की कोशिश कर रहा हूं वह पूरी तरह से बेवकूफ है।
मेरे दिमाग में पहले से क्या है:
शायद मैं एक ro
वॉल्यूम के रूप में कंटेनर के साथ होस्ट पर sshd सॉकेट साझा कर सकता हूं ? इसका मतलब होगा कि कंटेनर के अंदर sshd सभी कनेक्शनों को उठा सकता है *.mydomain.com
। वहाँ कंटेनर के अंदर sshd बनाने के लिए एक रास्ता हो सकता है के अलावा सभी कनेक्शन को अस्वीकारgogs.mydomain.com
या git.mydomain.com
? हालाँकि, होस्ट पर sshd *.mydomain.com
किसी भी तरह से सभी कनेक्शनों को उठाएगा gogs.mydomain.com
; इसलिए संघर्ष होगा। मुझे नहीं पता, मैंने वास्तव में इसकी कोशिश नहीं की है। क्या मुझे इसकी कोशिश करनी चाहिए ?