2017-12-29 21 views
1

덤불 스택을 만들어 웜에 배포했습니다. 이제는 실제 서버에 배포하는 방법이 어떻게 보이는지 혼란 스럽습니다. 물론원격 도커 호스트에 연결/스택 배포

나는

  1. scp 노드에 내 떼
  2. ssh의 노드 내 docker-stack.yml 파일은
  3. 실행 그래서 내가 생각 docker-machine 도구가 docker stack deploy -c docker-stack.yml stackname

수 있습니다 . 나는

만이 TLS없이 포트를 열면 작동하는 것 같다 무엇
docker-machine -d none --url=tcp://<RemoteHostIp>:2375 node1 

를 시도? 나는 다음과 같은 수신 :

$ docker-machine env node1 
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.178.49:2375": dial tcp 192.168.178.49:2375: connectex: No connection could be made because the target machine actively refused it. 
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'. 
Be advised that this will trigger a Docker daemon restart which might stop running containers. 

이미 인증서를 생성하기 위해 노력 & 호스트에 걸쳐 복사

ssh-keygen -t rsa 
ssh-copy-id [email protected] 

그럼 내가 다음과 같은 결과로

docker-machine --tls-ca-cert PathToMyCert --tls-client-cert PathToMyCert create -d none --url=tcp://192.168.178.49:2375 node1 

를 실행 :

$ docker-machine env node1 
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "node1:2375": There was an error reading certificate 
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'. 
Be advised that this will trigger a Docker daemon restart which might stop running containers. 
,451,515,

나는 또한 일반 드라이버 내가 TLS 제대로 고정 표시기 기계와 원격 고정 표시기 호스트를 추가하려면 어떻게

$ docker-machine create -d generic --generic-ssh-port "22" --generic-ssh-user "MyRemoteUser" --generic-ip-address 192.168.178.49 node1 
Running pre-create checks... 
Creating machine... 
(node1) No SSH key specified. Assuming an existing key at the default location. 
Waiting for machine to be running, this may take a few minutes... 
Detecting operating system of created instance... 
Waiting for SSH to be available... 
Detecting the provisioner... 
Error creating machine: Error detecting OS: OS type not recognized 

와 그것을 시도? 또는 스택을 서버/프로덕션 환경에 배포하는 더 좋은 방법이 있습니까?

나는 항해자의 항구를 드러내지 말고 한 번 해보지 말아야한다고 종종 읽는다. 그리고 나는 그들이 이것을 할 수있는 간단한 방법을 제공하지 않는다고 믿을 수 없다.

업데이트 & 솔루션

나는 모두 답변 자격이 있다고 생각. Deploy to Azure Offical Doc을 찾았습니다 (AWS와 동일합니다). @ Tarun Lalwani의 답은 올바른 방향으로 나를 가리키며 거의 공식적인 해결책입니다. 그 이유는 내가 그의 대답을 받아 들였기 때문이다. 나를 위해

는 다음 명령을했다 :

ssh -fNL localhost:2374:/var/run/docker.sock [email protected] 

그런 다음 중 하나를 실행할 수 있습니다

docker -H localhost:2374 stack deploy -c stack-compose.yml stackname 

또는

DOCKER_HOST=localhost:2374 
docker stack deploy -c stack-compose.yml stackname 

@BMitch에서 대답은 또한 유효하고 안전하다 그가 언급 한 우려는 무시되어서는 안된다.

업데이트 2

@bretf의 대답은 당신의 떼에 연결하는 멋진 방법입니다. 특히 둘 이상이있는 경우. 아직 베타 버전이지만 인터넷에서 사용할 수 있으며 ARM 아키텍처를 보유하지 않은 스웜에 사용할 수 있습니다.

답변

0

나는 TLS를 생각하고 있어도 docker 포트를 열거 나 노출하지 않는 것이 좋습니다. 차라리 SSH 터널을 사용하고 배포를

ssh -L 2375:127.0.0.1:2375 [email protected] 

을 그리고 당신은이에 대한 고정 표시기 기계가 필요하지 않습니다

DOCKER_HOST=tcp://127.0.0.1:2375 
docker stack deploy -c docker-stack.yml stackname 
+0

명령이 작동하지 않지만 그들은 올바른 방향으로 나를 가리켰다. [Docker Doku] (https://docs.docker.com/docker-for-azure/deploy/#connecting-to-your-manager-nodes-using-ssh)를 찾았습니다. 나를 위해 일했다 :'ssh -p 22 -fNL localhost : 2374 : /var/run/docker.sock myuser @ node1'을'docker -H localhost : 2374 ps' 또는'DOCKER_HOST'로 설정 – pr177

+0

2375 포트 설정을 시도했을 때 , 당신이 이미'127.0.0.1 : 2375'를 당신의 도커 데몬 설정에 노출 시켰다고 가정했습니다. 아직 그 일을하지 않았으므로 소켓에 트래픽을 매핑해야합니다. –

1

을 사용합니다. Docker에는 TLS in their documentation을 구성하는 세부 단계가 있습니다. 단계는 포함 :

  • 클라이언트 인증서를
  • 사본을 작성하고 서명 서버 인증서
  • 을 클라이언트 증명서를이 인증서를 사용하여 유효성을 검사 dockerd 데몬을 구성
  • 작성하고 서명 CA를 생성 ca 및 클라이언트 인증서 파일을 클라이언트 컴퓨터의 .docker 폴더에
  • 클라이언트 인증서 및 원격 도커 호스트를 사용하도록 일부 환경 변수를 설정하십시오.

127.0.0.1에 대한 액세스 권한이있는 사용자는 비밀번호 나 감사없이 원격 도커 호스트에 대한 루트 액세스 권한을 갖기 때문에 다중 사용자 환경에서는 ssh 터널 방법을 사용하지 않습니다.

+0

답변 해 주셔서 감사합니다. 공식적인 해결책을 찾아 보겠습니다.하지만 언급 한 문제에 대해 더 많은 정보를 얻으 려합니다. – pr177

1

Windows 용 Docker 또는 Mac 용 Docker를 사용하는 경우 Docker Cloud에 TLS 인증서를 설정하고 무료로 원격 호스트에 안전하게 연결할 수있는 자동화 된 방법이 있습니다. "Swarms"아래에는 "Swarm your own Swarm"이 있습니다. Swarm 관리자가 에이전트 컨테이너를 실행하여 수동으로 CERT 설정을하지 않고도 로컬 docker cli를 쉽게 사용할 수 있습니다. 여전히 Swarm 포트가 인터넷에 열려 있어야하지만,이 설정을 통해 TLS 상호 인증을 사용할 수 있습니다.

Here's a youtube video showing how to set it up. 또한 Swarm에 원격으로 액세스하는 다른 관리자를 추가/제거하는 그룹 권한을 지원할 수 있습니다.

+0

아, AWS & Azure 배포본이 고정 된 클라우드에 있지만 "자신의 떼 가져 오기"가 아닙니다. 감사합니다! 나는 당신이 docker cloud에 문제가없고 인터넷에 군집 포트를 열면 그것은 대단한 방법이라고 생각한다. – pr177