본 글은 Open vSwitch로 여러 호스트에 존재하는 Docker Container들을 연결 할 수 있는 방법에 대해서 작성 하였으며,

테스트 환경은 Ubuntu 14.04 LTS, Docker v1.5, Open vSwitch 2.0.2 버전에서 진행 되었으며, 기타 자세한 설정에 대해서는 생략 하였습니다.

그리고, 공통된 부분에는 root@ruo91:~# 이라는 것으로 표기 될것이며, 개별 설정인 경우에는 다르게 표기 될것 이므로 이점 유의 하시길 바랍니다.

 

Open vSwitch는 무엇인가?


네트워크 표준 관리 인터페이스 및 프로토콜(NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, 802.1ag)를 지원하면서,

프로그램의 확장을 통해 대규모의 네트워크 자동화를 가능하게 해주는 소프트웨어 입니다.

간단하게 말하자면, 하드웨어가 할일을 소프트웨어를 통해 제어 할 수 있다는 것입니다.

 

Architecture diagram


쉽게 설명 드리고자 간단하게 만들어 본 구성도이며, 각각의 Server-1, Server-2 안에 Docker의 Container들이 존재하게 됩니다.

Server-1에서 Server-2의 Container-1에게 Ping을 날려 볼 수 있도록 설정 해볼 것입니다.

Open vSwitch - Architecture diagram

Open vSwitch 및 Docker 설정


1. Open vSwitch 설치

Ubuntu 14.04 기준으로 Open vSwitch를 아래 명령어로 쉽게 설치가 가능 합니다.

이 작업을 server-1, server-2에서 동일하게 설치를 진행 하도록 합니다.

 

2. Docker bridge CIDR 설정

기존의 docker0 브릿지는 172.17.42.1/16 으로 CIDR이 설정 되어 있기 때문에, 10.0.0.1/24로 설정하겠습니다.

우선, docker 데몬을 중지 하고, docker0 브릿지를 삭제 합니다.

 

이후 docker0 브릿지를 추가시 CIDR을 10.0.0.1/24로 변경 합니다.

– server-1

 

– server-2

 

3. Open vSwitch 설정

br0 브릿지를 새로 추가 합니다.

 

GRE 터널링을 통해 서로 다른 호스트에서 Container끼리 통신이 가능 하도록 설정 합니다.

뒤에 오는 remote_ip는 server-1, server-2의 public ip를 뜻합니다.

– server-1

 

– server-2

 

docker0 브릿지를 브릿지할 br0을 추가 합니다.

 

4. IPTABLE 설정

해당 대역에서 NAT을 사용 할 수 있도록 설정 합니다.

 

들어오는 트래픽을 허용 하도록 합니다.

 

이외의 내부 컨테이너에서 나가는 트래픽을 허용 하도록 합니다.

 

나가는 트래픽을 모두 허용 하도록 합니다.

 

5. Docker 시작

중지 하였던 Docker 데몬을 실행 합니다.

 

6. 설정 확인

– ip addr show

 

– ip route show

 

– brctl show

 

– ovs-vsctl show



 

Ping Test


아래 핑 테스트를 통해 설정이 잘 되었는지 확인 하면 됩니다.
– server-1


 

– server-2

 

감사합니다. :)

참고


https://docs.docker.com/articles/networking/

http://openvswitch.org/support/config-cookbooks/port-tunneling/

https://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/