여러 호스트를 이용하는 도커가 swarm을 이룰경우 서로 통신을 하려면 네트웍이 필요하다. 이때 각각 다른 호스트에서 생성된 컨테이너 사이에 네트워크를 생성해주는 것이 바로 overlay 네트워크 이다.
각각의 호스트에서 쓰고있는 네트워크와 상관없이 컨테이너 끼리의 사설망을 따로 만들어줌.
Docker Swarm 을 구성해놓은 상태에서 새로
overlay 네트워크 생성하고 테스트해보기.
Docker Swarm 을 구성
Docker Swarm은 여러가지 컨테이너 오케스트레이션 툴(가장 대표적인 것이 kubernetes임) 중 하나이다.
Docker Swarm에서 제어하는 단위는 컨테이너가 아닌 "service" 이다. (쿠버네티스의 pod와 같다고 생각하면 됨)
1. Swarm manager 설정
Swarm 클러스터에서 manager 역할을 할 노드를 선정한다. 여기서는 "swarm-manager" 로 선택했다. 아래 init 명령을 swarm-manager에서 수행한다. --advertise-addr은 manager 역할을 하는 IP를 입력한다. 즉 swarm-manager의 IP를 입력한다.
docker swarm init --advertise-addr 10.10.1.39
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1e2cs4etdsl1yo7yclq5rdngheo6f3yecy0gc1wnt03fyrt1yd-1taof5n1m6zmbtenuysd5q60a 10.10.1.39:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
결과 중 docker swarm join --token 부분은 연결을 위한 비밀키가 생성된 것이다. 복사하여 각 노드들이 docker swarm 클러스터에 조인하도록 사용한다.
docker swarm join --token SWMTKN-1-1e2cs4etdsl1yo7yclq5rdngheo6f3yecy0gc1wnt03fyrt1yd-1taof5n1m6zmbtenuysd5q60a 10.10.1.39:2377
This node joined a swarm as a worker.
docker swarm init과 join을 수행하면 docker network 에 ingress와 docker_gwbridge 네트워크가 추가된다.
2. 노드 조인 및 확인
위에서 manager node에서 아래 명령어를 수행하면 도커 스웜 클러스터에 참여한 node를 확인할 수 있다.
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
q9d7qflcsd1nvoy9291v7vhcz * swarm-manager Ready Active Leader 20.10.17
mllks5805fyeoake38u6d2nfa swarm-node-1 Ready Active 20.10.17
1.network 생성
overlay 네트워크 생성 및 확인
$ docker network create --driver=overlay --subnet=192.168.0.0/24 my-overlay
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
c09c209df657 bridge bridge local
bf717637be38 docker_gwbridge bridge local
156d020c1e52 host host local
knzfg8g8u065 ingress overlay swarm
fadlzyj565he my-overlay overlay swarm
d3cd7692e4cb none null local
도커 스웜 서비스 생성
$ docker service create --name overlaysvc --network my-overlay --replicas 3 hello-world
**3.네트워크 테스트**
master노드에서 ps 실행 및 ip 확인