호스트가 아닌 클라우드에서 인프라 구축할 때 방화벽 문제로 노드간 연결되지 않는 상황 발생

즉, 아래와 같은 출력으로 인해 가상 머신 클러스터를 구성할 수 없는 상태임 (aws 에서 docker-machine 생성은 여기 참고)

root@aws01:/home/ubuntu# docker swarm leave
Node left the swarm.
root@aws01:/home/ubuntu# docker swarm join --token SWMTKN-1-67inqm9tz1k8dw5r2izextx7i33m9vz46eqt926zln2vjx1x31-3yclb3lqqhradd7ay7s2u6jue 172.31.24.248:2377
Error response from daemon: Timeout was reached before node joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.

 

무조건 포트가 열려있는지 확인해야함 (vm 이든, host 든 클러스터를 구성할 호스트 OS 에서 방화벽 확인해야 한다.)

 

참고: https://stackoverflow.com/questions/38693560/docker1-12-worker-not-able-to-join-in-clusterswarm-pending

 

Docker1.12 Worker not able to join in cluster(Swarm: Pending)

Manager Version Docker version 1.12.0-rc5, build a3f2063, Worker version Docker version 1.12.0-rc5, build a3f2063. Created Swarm manger: docker swarm init --advertise-addr "172.25.30.2:4243"

stackoverflow.com

 

또한 overlay 네트워크 사용 시 도커 문서내에서는 7946과 4789 포트 개방을 필수로 하라고 되어 있음

 

 

근데 개방해도, 서브넷이 동일하지 않을 경우 호스트에서 vm을 연결한다하더라도 공인 IP 를 사용해야 함

해결방법
 

Docker swarm: 도커 스웜에서 워커/매니저 노드가 조인이 실패할 경우?

도커 스웜 환경 Versions Docker (18.09.0) Docker (1.23.2) 저번 포스트에서 도커 스웜 사용후기에 대해 다뤘었는데, 이번에 실제로 클라우드 서비스를 이용해 도커 스웜을 구축할 때 마주했던 문제에 대해 공유하고자 한다. 답은 방화벽 문제이다. 답만 빠르게 알고 가고싶다면, 문서 맨 밑으로 가면 된다. 발생문제 애초에 노드가 조인이 되지 않음. 노드가 조인이 되었는데도 불구하고, 컨테이너 배포가 이루어지지 않음. 원인파악 사실

hidekuma.github.io

  1. 같은 내부망에 있을 경우
    • 방화벽에서 해당 서버의 tcp 2377 포트를 열어준다.
  2. 같은 내부망에 있지 않을 경우
    • advertise-addr을 퍼블릭ip로 설정해준다.
    • 방화벽에서 해당 서버의 tcp 2377 포트를 열어준다.

** 실제 AWS 인스턴스의 인바운드 정책에서 2377 포트를 개방해야 한다.

$ docker swarm join --token <TOKEN> <Public IP>:2377

(여기서 서버는 호스트자체를 manager node로 두었음)

 

+ Recent posts