Network Overlay와 VXLAN
Network Overlay
기존의 Traditional Deployment 시대에서
점차 Virtualized, Container Deployment 시대로 발전하면서 Cloud 시대가 왔음.
이에 따라 Host의 수가 몇배로 많아졌고 할당되고 관리되어야하는 IP와 MAC도 증가함.
즉 Deployment 기술의 발전과 동시에 네트워크 기술도 같이 발전함.
시대가 발전하면서 나온 네트워크 기술 중 대표적인것이 Network Overlay이고
Network Overlay 기술 중 가장 주목받은 기술이 바로 VXLAN 임.
Network Overlay란?
관리하는 Subnet이 많아지지고 연결되어 있는 host의 수가 증가면
포워딩, 스위칭, 라우팅 등등 네트워크를 구성하기가 굉장히 복잡함.
이런 상황에서 나오는 단점을 해결하기 위해
물리 네트워크 위에 성립 되는 가상의 컴퓨터 네트워크 구축한 것이 Network Overlay.
실제 노드 간의 네트워크 위에 별도로 Flat한 네트워크를 구성해서
물리적 네트워크망은 고려하지 않고 host와 host간의 연결만 생각해서 구현한
가상의 Network 망을 구축하는 것.
쉽게 비유를 하자면
서울에서 부산까지 가는데
차로 가게 되면
기존의 도로망 체제를 유지하면서
신호등도 거치고 여러 톨게이트를 거쳐야해서 복잡한데
비행기를 타면
김포공항에서 부산행 비행기 티켓을 끊고 한방에 가는 것과 같은 원리
Network Overlay 문제점.
Network Overlay 는 MAC Over IP/UDP 기술을 기반으로 만들어졌는데
이에 따라 기존의 L2 Switch의 VLAN방식을 사용해서 구성하면
Cloud 환경에서 문제가 발생할 수 있음.
[첫번째. MAC Address 문제]
MAC address를 ARP Table에 저장하고 이 정보로 host 대 host로 통신을 하는데
Cloud Server를 도입하게 되면 host 또는 Container의 수가 몇배로 증가하게 되면서
기존의 VLAN에서 수용할 수 있는 Mac의 한계를 초과하게 됨.
그래서 기존의 VLAN과 같은 네트워크 기술을 사용해서 Network Overlay를 구축하게 된다면
Virtualized, Container, Cloud 환경에서 Mac address가 부족한 문제가 발생할 수 있음.
[두번째. VLAN 생성 문제]
VLAN는 12bits의 VLAN ID를 제공해서
최대 4096개의 VLAN을 생성할 수 있는데 예약된 VLAN ID를 제외하면
실제적으로 4000개 정도를 생성할 수 있음
하지만 Cloud 환경에서는 4000개 보다 많은 Subnet을 사용해서
VLAN을 생성할 수 있는 수를 초과하게 되는 상황이 발생할 수 있음.
[두번째. VLAN Trunk 문제]
VLAN 방식을 사용하게 되면 각 VLAN별 VLAN Trunk를 구성해줘야하는데
Cloud나 Kubernetes와 같은 Container Orchestration을 사용하게되면
Subnet도 지속적으로 변경, 재성성 될 수 있기 때문에
이러한 L2 Switch 적인 VLAN Trunk 기술로는
유연하게 변경되는 Cloud 환경에 대처할 수 없음.
VXLAN
VXLAN이란?
VLAN에 X (eXtensible)을 더한 것으로 L2 Network 의 확장성을 의미함
VXLAN Header + UDP + IP 기반으로 전송.
VXLAN Header는 24bit VXLAN Network ID로 구성됨.
학습하지 못한 목적지 VM MAC은 VXLAN기술 기반으로 IP Mulicast를 이용하여
목적지 VM MAC 주소가 있는 스위치에 전송.
(Broadcast, Multicast Unknown destination)
VM MAC은 VXLAN기반의 Encapsulation된 패킷을 받아서 목적지 VM ARP Table을 학습하는 방식.
학습한 목적지 VM MAC은 P2P Tunnel로 직접 해당 스위치와 통신.
Network Overlay 문제점을 VXLAN으로 해결
[첫번째. MAC Address 문제 해결]
모든 MAC address를 L2 Switch의 ARP Table에만 저장하지 않고
가상화 vSwitch에서만 MAC Address를 저장해서 해당 Table를 정보를 확인한 후
패킷을 Forwarding해서 문제를 해결
[두번째. VLAN 생성 문제 해결]
기존의 VLAN는 12Bits의 VLAN ID를 제공해서 4000개 정도의 VLAN을 생성할 수 있었다면
VXLAN은 24Bits의 VLAN ID를 사용할 수 있어서 약 16,000,000 개를 생성 수 있음.
[두번째. VLAN Trunk 문제 해결]
VXLAN은 Multicast 기반으로 알아서 Tree를 구성하기 때문에 Trunk가 필요 없음.
VXLAN의 네트워크 구조
네트워크 구조 예시환경 : VM 안에 생성된 Container 환경
ens192 : VM에 할당된 네트워크 인터페이스
VTEP : VXLAN Tunnel End Point
vSwitch : Virtual Switch
veth0 : Virtual Ethernet
eth0 : Container에 linux network namespace에 할당된 네트워크 인터페이스
veth 란?
Virtual Ethernet.
linux namespace를 할당 받으면
network namespace도 생성되는데
network namespace에는 오직 veth만 할당 받을 수 있음
veth는 항상 쌍으로 생성이 되는데
한쪽에서 입력된 데이터는 다른쪽에서 수신할 수 있음
해당 Container가 할당받은 veth 경우는
한쪽은 물리적인 네트워크 인터페이스와 연결되어있고
다른 한쪽은 linux network namespace 와 연결되어
Container와 host간에 통신이 가능해짐
vSwitch란?
vSwitch ( Virtual Switch )는 기존의 Switch 역할을 그대로 수행하지만
말그대로 가상의 Switch로
실제 물리적으로 존재하는 네트워크 인터페이스가 아닌 가상의 인터페이스임.
VXLAN을 통해 알아오는 모든 MAC 정보는
이 vSwitch 의 ARP Table에 저장됨.
vSwitch가 있기 때문에 MAC주소로 host : host 통신이 가능해지는 것.
VTEP 이란?
VXLAN Tunnel End Point
VXLAN 의 핵심적인 역할을 수행함.
패킷을 UDP를 사용하여 실제 네트워크를 통해 전송하기 위해
MAC in IP/UDP의 L3패킷으로 encapsulated (캡슐화)하는 작업을 진행하고
반대로 받은 encapsulated (캡슐화)된 패킷을 Termination 하는 작업을 수행함.
이름 그대로 Encapsulated과 Termination의 End Point역할을 수행함
이러한 VXLAN은
Kubernetes의 Flannel CNI 의 기반이 되는 기술로 사용됨.
이어서 다음글인
Flannel 을 분석하며 자세히 설명함.
참고
[ VXLAN ]
https://youngmind.tistory.com/entry/Network-Overlay-VXLAN-%EB%B6%84%EC%84%9D-1