나는 매우 구체적인 상황에 빠졌고 이것을 할 다른 방법이 있지만, 나는 이것에 사로 잡히고 정확하게 이와 같은 일을하는 방법을 찾고 싶습니다 :
배경
격리 된 도커 컨테이너에 여러 서비스를 실행하는 서버가 있다고 가정 해보십시오. 이러한 서비스의 대부분은 http이므로 nginx 프록시를 사용하여 특정 하위 도메인을 각 서비스에 노출시킵니다. 예를 들어, 노드 서버는 포트 가 호스트에 80
바인딩 된 도커 컨테이너에서 실행 중입니다 127.0.0.1:8000
. 그 프록시 모든 요청에의 nginx에 가상 호스트를 만듭니다 myapp.mydomain.com
에 http://127.0.0.1:8000
. 그렇게하면를 제외하고 외부에서 도커 컨테이너에 액세스 할 수 없습니다 myapp.mydomain.com
.
이제 gogs 컨테이너 를 가리키는 방식으로 gogs docker 컨테이너 를 시작하고 싶습니다gogs.mydomain.com
. 그래서이 gogs 컨테이너 를 호스트에 8000
바인딩 된 포트로 시작 하십시오127.0.0.1:8001
. 그리고 nginx 사이트 프록시 요청을 gogs.mydomain.com
하고 http://127.0.0.1:8001
잘 작동합니다 ...
그러나 gog는 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
에 gogs.mydomain.com
- 대신 gogs.mydomain.com:8022
-하지만 그러나, 아마 내가이 질문에 대한 잘못된 범위에서하고있어 뭔가, 나는 그것에 대한 진단도 감사하겠습니다)
문제
내 주요 관심사는 <gogs container>:22
nginx를 사용하여 http 포트를 프록시 처리하는 것처럼 ssh 포트 가 프록시되도록 하려는 것입니다 . 즉, 모든 ssh 연결 gogs.mydomain.com
이 컨테이너의 포트로 전달됩니다 22
. 이제 호스트에서 sshd가 이미 실행 중이므로 컨테이너의 ssh 포트를 호스트의 ssh 포트에 바인딩 할 수 없습니다. 또한 *.mydomain.com
이는 컨테이너의 sshd로 전달 되는 모든 연결을 의미합니다 .
ssh 연결을 원합니다 :
mydomain.com
host.mydomain.com
또는 mydomain의 IP 주소를 수락하여 호스트의 sshd로 전달gogs.mydomain.com
또는git.mydomain.com
gogs 컨테이너의 sshd로 전달되도록 허용됩니다.*.mydomain.com
(*
위의 가능성 이외의 다른 곳 은 거부)
http 인 경우 nginx를 통해 쉽게 작동시킬 수 있습니다. ssh를 위해 할 수있는 방법이 있습니까?
(또한 사지에 나가서 물어보고 싶습니다으로 그 작업을 수행 할 수있는 방법이 어떤 일반적인 TCP 서비스는?)
내가 여기서하려고하는 방식에 대한 통찰력도 환영합니다. 내가하려는 일이 완전히 어리 석다는 말을 듣고 싶지 않습니다.
내가 이미 생각한 것 :
어쩌면 컨테이너의 ro
볼륨 으로 호스트의 sshd 소켓을 공유 할 수 있습니까? 이는 컨테이너 내부의 sshd가에 대한 모든 연결을 선택할 수 있음을 의미합니다 *.mydomain.com
. 컨테이너 내부의 sshd 가 또는 이외의 모든 연결을 거부하도록 하는 방법이 있습니까? 그러나 호스트의 sshd는 다음을 포함 하여 어쨌든 모든 연결을 선택합니다 . 그래서 갈등이 생길 것입니다. 나는 몰라, 나는 그것을 실제로 시도하지 않았습니다. 해야 내가 그것을 시도?gogs.mydomain.com
git.mydomain.com
*.mydomain.com
gogs.mydomain.com