리눅스 브릿지는 딱 브릿지만의 역할을 한다. 도커에서 기본으로 지원하는 네트워크 로 간단하게 사용 할 수 있다는 장점이 있는 반면, 할 수 있는게 별로 없다는 단점도 있다. SaaS나 PaaS 인프라를 구축 할경우 QoS(네트워크 자원 제한), ACL, SPAN 룰, 네트워크 격리 등이 필요한데, 할 수가 없다. 결국 OVS를 이용해야 한다.
도커 1.11 버전은 bridge, host, none 세 개의 네트워크를 지원한다. docker network 명령으로 지원하는 네트워크 목록을 확인 할 수 있다.
# docker network ls
NETWORK ID NAME DRIVER
e720cd261b55 bridge bridge
997416d39d98 host host
7ea7e6fc876b none null
나는 지금까지 리눅스 브릿지를 ovs 브릿지로 바꾸고, 네임스페이드와 veth(가상 네트워크 디바이스), ovs-vsctl을 이용해서 직접 ovs를 제어하는 방법으로 ovs 네트워크를 만들었다. 자세한 내용은 Docker 레퍼런스 네트워크문서를 참고하자.
쓸만한 방법이고 잘 작동하기는 하지만 네임스페이스와 veth 특히 컨테이너 네트워크를 직접 관리해야 한다는 단점이 있다. 컨테이너에 IP를 직접 할당해야 한다는 얘기인데, 이 경우 IP의 중복 사용을 막기 위해서 데이터베이스에 IP와 MAC 같은 자원을 관리해야 한다. 크게 어렵지 않은 작업이라고 생각 할 수 있겠는데, 소프트웨어는 최대한 단순하게 개발해야 한다는게 내 지론이다. 코드가 한줄 추가 되면, 2개의 버그가 생겨나기 마련이다. 가능하면 도커에 맡기는게 좋다. 그래서 도커로 할 수 있는 솔류션을 찾기 시작했다.
docker-ovs-plugin
도커는 볼륨과 네트워크에 대한 플러그인을 제공한다. 나는 ovs 플러그인을 개발해서 도커의 네트워크를 확장하기로 했다. 물론 새로 개발하진 않을 거다. docker-ovs-plugin이라는 오픈소스 기반의 플러그인이 있었다. docker-ovs-plugin을 사용하기로(필요하면 수정한다)했다. docker-ovs-plugin(이하 ovsp)에 대한 자세한 내용은 github.com - cocker-ovs-plugin에서 확인하자.
도커 1.9 이상이 필요하다. (2016년 6월 6일)현재 내가 사용하는 도커 버전은 1.11이니 조건을 만족한다. 호스트에 openvswitch를 설치하자.
NetworkID의 첫 5자 185f9가 브릿지의 이름이고, EndpointID의 첫 5자 9a05e가 브릿지에 연결된 포트의 이름이다.
ovs port 이름은 가상 인터페이스에 대한 QoS, ACL의 설정에 사용 할 수 있다. QoS에 대한 자세한 내용은 OpenVSwitch에서의 QoS Policing 문서를 참고하자.
Contents
OpenVSwitch
docker-ovs-plugin
Recent Posts
Archive Posts
Tags