Overlay network driver란 무엇인가?
Source: Dev.to

overlay 네트워크 드라이버는 여러 Docker 데몬 호스트 간에 분산된 네트워크를 생성합니다. 이 네트워크는 호스트‑별 네트워크 위에 겹쳐서(overlay) 존재하며, 암호화가 활성화된 경우 연결된 컨테이너가 안전하게 통신할 수 있게 합니다. Docker는 각 패킷을 올바른 Docker 데몬 호스트와 올바른 대상 컨테이너로 라우팅하는 작업을 투명하게 처리합니다.
docker network create 명령을 사용해 사용자 정의 overlay 네트워크를 만들 수 있으며, 이는 사용자 정의 bridge 네트워크와 동일한 방식입니다. 서비스나 컨테이너는 동시에 여러 네트워크에 연결될 수 있지만, 두 컨테이너가 모두 연결된 네트워크를 통해서만 통신할 수 있습니다.
Overlay 네트워크는 주로 Swarm 서비스들을 연결하는 데 사용되지만, 서로 다른 호스트에서 실행되는 독립 컨테이너들을 연결하는 데에도 사용할 수 있습니다. 독립 컨테이너를 사용할 경우에도 호스트 간 연결을 설정하려면 Swarm 모드가 필요합니다.
Overlay 네트워크에 필요한 포트
시작하기 전에 참여 노드들이 네트워크를 통해 통신할 수 있는지 확인하세요. Overlay 네트워크에 참여하는 각 호스트에서 다음 포트를 열어야 합니다:
- 2377/tcp – Swarm 제어 플레인(
docker swarm join --listen-addr로 설정 가능) - 4789/udp – Overlay 트래픽(
docker swarm init --data-path-addr로 설정 가능) - 7946/tcp 및 7946/udp – 노드 간 통신(설정 불가)
Overlay 네트워크 생성
Docker Swarm 초기화
docker swarm init
이 명령은 호스트에서 Docker Swarm을 초기화하고 Swarm 매니저 노드를 생성합니다.
Overlay 네트워크 생성
docker network create --driver overlay my-overlay-network
서브넷과 게이트웨이를 지정할 수도 있습니다:
docker network create --driver overlay \
--subnet=10.0.1.0/24 \
--gateway=10.0.1.1 \
my-overlay-network
독립 컨테이너와 Swarm 서비스 모두가 네트워크에 연결될 수 있도록 하려면:
docker network create --driver overlay --attachable my-overlay-network
--attachable 옵션을 사용하면 독립 컨테이너와 Swarm 서비스 모두가 overlay 네트워크에 연결할 수 있습니다. 이 옵션이 없으면 Swarm 서비스만 연결할 수 있습니다.
Overlay 네트워크 확인
docker network ls
Overlay 네트워크에서 트래픽 암호화
--opt encrypted 플래그를 사용해 overlay 네트워크에 IPsec 암호화를 활성화합니다:
docker network create \
--opt encrypted \
--driver overlay \
--attachable \
my-attachable-multi-host-network
암호화는 성능에 무시할 수 없는 영향을 미치므로, 프로덕션에 적용하기 전에 반드시 테스트하세요.
컨테이너를 Overlay 네트워크에 연결하기
컨테이너를 overlay 네트워크에 추가하면 개별 Docker 호스트에서 수동 라우팅을 설정하지 않아도 서로 통신할 수 있습니다. 이때 호스트들은 동일한 Swarm에 속해 있어야 합니다.
docker run --network multi-host-network busybox sh
참고: Linux 커널 제한으로 인해, 동일한 호스트에 약 1000개의 컨테이너가 동시에 위치하면 overlay 네트워크가 불안정해질 수 있습니다.
Related article: What is Bridge network driver?