VXLAN을 이용한 오버레이 네트워크를 구성해 보려고 한다.
클라우드 인프라를 위한 네트워크 모델을 고민하고 있다. 일단은 단순한 L3 Flat Network를 생각하고 있지만, AWS VPC와 같은 격리된 (그리고 복잡한)네트워크 구성의 확장 가능성은 열어두려고 한다. 어차피 L3 Flat Network 모델이라면, 이 위에서 오버레이 네트워크 모델을 만드는 건 크게 어려운 일은 아닐 것이다. 오버레이 네트워크 기술을 이해하면, 확장 가능한 L3 Flat Network 구성 설게에 도움이 될 것이다.
Open vSwitch 네트워크는 양쪽 모두 172.17.42.0/24로 했다. 가상머신 올리는 방법은 OVS를 이용한 KVM네트워크 구성을 참고하자. KVM이 익숙하지 않다면, VirtualBox등 (사용이 쉬운)가상화 툴을 이용해도 상관 없다. Host-1과 Host-2가 서로 통신할 수 있으면 된다.
Host-1과 Host-2에 Docker 네트워크를 구성하고, 컨테이너를 실행 했다. 도커의 기본 브로커는 docker-0인데, VXLAN 설정을 위해서 OVS 브릿지로 구성을 했다.
설정 방법은 Docker 레퍼런스 네트워크를 참고한다. 172.17.42.2와 172.17.42.3 두 개의 컨테이너를 만들었다. 도커 컨테이너에 네트워크를 할당하기 위한 스크립트를 만들었다. Docker 레퍼런스 네트워크에 있는 네트워크 설정 과정을 코드화 했다. 다운로드 ovs_work.sh 스크립트는 VXLAN 설정은 빠져있다. 일단은 도커 네트워크를 만든 다음에 수작업으로 VXLAN을 설정한다.
먼저 OVS 브릿지를 만들고 네트워크를 설정한다.
각 컨테이너들끼리는 VXLAN을 이용해서 통신을 할 수 있지만, 게이트웨이(172.17.42.1)로는 통신이 안된다. arp 테이블을 보면 172.17.42.1에 대한 ARP 테이블을 완료하지 못했음을 알 수 있다. 현재 br0 포트가 게이트웨이 역할을 하고 있는데, tag를 붙여주지 않았기 때문이다. br0에 태깅한다.
이렇게 해서 도커들은 L3 로컬 네트워크 상에서 격리된 네트워크를 구성하고, 서로 통신할 수 있게 됐다.
NAT를 통한 인터넷으로의 접근 역시 가능하다. 단 구성을 약간 바꿔야 한다. 인터넷으로 향하는 패킷은 br0로 보내야 하며, 이를 위해서 br0에도 veth와 같은 태그를 붙여줘야 한다. 하지만 br0 인터페이스에는 단지 하나의 태그만 가능하다.
그래서 나는 vxlan 별로 브릿지를 만들기로 했다. VNID 100은 br0, VNID 200은 br1을 가지도록 네트워크를 다시 구성했다.
두 개의 vxlan을 위해서 독립된 브릿지 br0, br1을 만들었다.
두 개의 브릿지들도 태깅을 했다.
이제 0.0.0.0/0으로 향하는 패킷은 태깅된 브릿지로 포트를 통해서 인터넷으로 나가게 된다. 아래와 같이 브릿지 포트에 태깅하면 된다.
br1브릿지를 만든다.
컨테이너(Ins-1)에 대해서 1.22.3.5 주소로 접근하기를 원한다면, 컨테이너로의 NAT를 위한 NAT-IP를 하나 할당한다. 스위치는 컨테이너의 퍼블릭 아이피를 NAT-IP에 매핑한다. 이렇게 하면 두 번의 NAT로 인스턴스를 찾아갈 수 있다.
이 방식은 DHCP와 같은 네트워크 관리 프로토콜을 사용하기 어렵다는 단점이 있다.
(Stateless NAT를 하면 되니) 스케일링이 용이하고, 트래픽을 완전히 분산할 수 있으며, 고가용성 구성이 용이하다는 장점이 있다.
Contents
1. Open vSwitch를 이용한 오버레이 네트워크 구성
2. 구성
2.1. Host-1의 도커 네트워크 설정
2.2. Host-2의 도커 네트워크 설정
2.3. 테스트
2.4. 멀티 터넌트
2.5. NAT 구성
2.6. 인터넷 게이트웨이 - IGW
2.6.1. 2중 NAT
2.6.2. 중앙 IGW
2.6.3. 테스트
2.7. 관련 툴
1. Open vSwitch를 이용한 오버레이 네트워크 구성
2. 구성
2.1. Host-1의 도커 네트워크 설정
2.2. Host-2의 도커 네트워크 설정
2.3. 테스트
2.4. 멀티 터넌트
2.5. NAT 구성
2.6. 인터넷 게이트웨이 - IGW
2.6.1. 2중 NAT
2.6.2. 중앙 IGW
2.6.3. 테스트
2.7. 관련 툴
Recent Posts
Archive Posts
Tags