문현선 SK텔레콤 매니저
클라우드에서는 네트워크 트래픽을 만들어 내고 처리하는 서버인 가상 머신이 동적으로 생성, 삭제되며 같은 데이터 센터에 존재하는 다른 물리 머신이나 혹은 다른 데이터 센터로 마이그레이션되기도 한다. 뿐만 아니라, 불특정 다수의 사용자가 같은 물리 인프라를 공유하는 퍼블릭 클라우드의 경우 필요에 따라 개별 사용자에게 독립된 가상 네트워크를 동적으로 생성해 제공해야 할 수도 있다. 이 같은 기본적인 네트워킹 기능 외에도 로드 밸런싱이나 방화벽과 같은 부가적인 네트워크 기능 역시 클라우드 기반의 서비스 구현에 없어서는 안 되는 요소다.
본 고에서는 이런 요구 사항을 구현하는데 필요한 네트워크 가상화 기술들을 대표적인 오픈소스 클라우드 구현 기술인 오픈스택을 통해 설명할 예정이다.
오픈스택에 활용된 네트워크 가상화 기술을 살펴보기 전에 오픈스택의 네트워크 서비스인 뉴트론(Neutron)의 구조를 잠시 살펴 보겠다. 뉴트론은 기본적으로 중앙의 서버 프로세스가 네트워크, 서브넷, 포트, 라우터 등으로 추상화 된 가상 네트워크 리소스를 관리하고, 각 컴퓨트 노드에 분산되어 있는 에이전트 프로세스가 가상 스위치와 호스트 머신의 네트워크 상태를 설정하는 방식으로 동작한다. 에이전트의 동작 및 구현 방식은 어떤 네트워크 가상화 솔루션, 즉 플러그인을 사용하는지에 따라 상이하며 비교적 최근에 추가된 오픈플로우(OpenFlow) 기반의 구현은 에이전트 없이 데이터 플레인을 프로그램하는 것도 가능하다.

[그림1] 오픈스택 뉴트론 구조
일반적으로 가장 많이 사용하는 플러그인인 ML2(Modular Layer 2) 플러그인을 사용하려면 우선 두 가지 종류의 드라이버를 선택해야 한다. 메커니즘 드라이버(Mechanism driver)와 타입 드라이버(Type driver)로 각각 스위치 가상화와 네트워크 가상화 방법에 해당하며, 이 두 가지가 앞서 언급한 클라우드 네트워크 서비스의 요구 사항을 구현하는 핵심 기술이라 할 수 있다.
스위치 가상화
가상 스위치는 물리 스위치의 기능을 소프트웨어로 구현한 것으로 가상 머신과 비슷하게 스위치 자체에 대한 프로비저닝 뿐 아니라 포트 추가, 삭제도 동적으로 가능하다. 때문에 동적으로 생성되고 삭제되는 가상 머신을 네트워크에 연결하는데 꼭 필요한 가상화 기술이라 할 수 있다. 뉴트론이 지원하는 가상 스위치, 즉 메커니즘 드라이버의 종류는 다음과 같다.
Linux bridge
오픈스택 초기부터 사용된 가상 스위치로, 리눅스에 내장되어 있기 때문에 별도의 패키지를 설치하거나 데몬을 실행하지 않아도 된다. Open vSwitch와 비교했을 때 기능적으로 열세하지만 단순함과 안정성을 이유로 선호하는 사용자가 많다. Rackspace 역시 안정성 문제로 2014년 자사의 프라이빗 클라우드 인프라의 가상 스위치를 Open vSwitch에서 Linux bridge로 마이그레이션 했다고 발표했다.
Open vSwitch
상용 수준을 표방하고 있는 오픈 소스 가상 스위치로, 기본적인 스위치의 기능뿐 아니라 NetFlow, sFlow, IPFIX, RSPAN, CLI, LACP, 802.1ag와 같은 다양한 프로토콜과 인터페이스를 지원한다. 초기 버전에서는 커널 패닉을 일으키는 등의 문제가 있었으나 지금은 비교적 안정화 된 것으로 보인다. 오픈스택에서는 Linux bridge가 VXLAN을 지원하지 않던 시기에 GRE, VXLAN 등의 오버레이 네트워크 모델이 인기를 얻으면서 유일한 대안으로 각광을 받기 시작했고, 최근에는 오픈플로우 기반의 가상 네트워크 구현에도 활용되고 있다. 별도의 데몬을 실행해야 한다는 점과 iptables 기반의 시큐리티 그룹 구현 적용이 복잡하다는 점이 단점으로 꼽힌다. 최근 conntrack 지원 기능이 추가되면서 시큐리티 정책 적용 구현은 개선되었다.
MacVTap
MacVTap은 기존의 “tap 인터페이스 + 가상 브릿지” 방식의 가상 네트워크를 좀 더 단순하고 효율적으로 지원하기 위해 만들어진 새로운 디바이스 드라이버로, 물리 인터페이스(lower 인터페이스라고 부른다)에 독립된 MAC 주소를 가지는 tap 인터페이스를 추가/확장하는 방식으로 동작한다. 오픈스택에는 Liberty 릴리즈에 추가됐다. Linux bridge나 Open vSwitch와 비교했을 때 성능과 효율 면에서 우수하지만, 가상 머신 외에 DHCP나 L3 서비스에 필요한 가상 인터페이스에는 활용이 불가능하다는 점과 시큐리티 그룹 및 포트 시큐리티 정책 적용이 어렵다는 단점이 있다. 또한 터널링 기반의 오버레이 네트워크 가상화는 지원하지 않는다. 따라서 보안 이슈가 적은 소규모의 프라이빗 클라우드에서 고성능과 고효율 네트워크가 필요하다면 시도해 볼 만 하다.
SR-IOV
SR-IOV(Single Root Input/Output Virtualization)는 하나의 PCI 장치를 가상화 해서 여러 개의 PCI 장치처럼 보이게 만드는 기술로, 가상 머신에 PCI를 직접 연결하는 것과 같은 효과를 얻을 수 있기 때문에 가상화로 인한 성능 저하를 막을 수 있다. 다만, 장치 드라이버가 SR-IOV를 고려해서 개발되야 하고 하드웨어도 이를 지원해야 하기 때문에 일부 장치에서만 사용 가능한 드라이버다. 고성능 네트워크가 요구되는 NFV 사례에서 주로 사용된다.
네트워크 가상화
클라우드 인프라를 구성할 때 가상 머신 간의 통신에 사용할 데이터 전용 물리 네트워크는 일반적으로 하나만 구성한다. 그런데 만약 서로 다른 두 테넌트가 각자 독립된 네트워크를 원한다면 어떻게 해야 할까? 하나의 물리 서버에 가상 머신을 여러 개 프로비저닝하는 것과 비슷하게, 하나의 물리 네트워크에 여러 개의 가상 네트워크를 구성할 수 있어야 할 것이다. 이 때 필요한 기술이 VLAN이나 VXLAN과 같은 네트워크 가상화 기술이며, 뉴트론에서는 이를 타입 드라이버라고 정의하고 있다. 뉴트론이 지원하는 타입 드라이버는 다음과 같다.
Flat
뉴트론이 제공하는 가장 단순한 형태의 네트워크 모델로, 같은 플랫 네트워크에 연결된 모든 가상 머신은 테넌트에 관계 없이 통신이 가능하다. 그렇기 때문에 퍼블릭 네트워크처럼 물리 네트워크를 가상화하지 않고 그대로 가상 머신에 연결해야 하는 경우에 주로 활용된다. 뉴트론에서는 이런 네트워크를 프로바이더 네트워크라고 부르며, 단순하다는 장점 때문에 멀티 테넌시가 필요 없는 소규모 프라이빗 클라우드 환경에서 가상 네트워크를 구성할 때도 많이 사용된다.
VLAN
가상 네트워크마다 하나의 VLAN을 할당하는 방식으로, 서로 다른 네트워크에 연결된 가상 머신들은 L2 수준에서 완전히 격리된다. VLAN의 특성상 같은 VLAN에 속한 가상 머신은 물리적으로 같은 L2 도메인 내에 존재해야 한다는 제약이 있다. 다시 말해, 클라우드 인프라를 구성하는 모든 컴퓨트 노드가 같은 L2 도메인 내에 존재해야 하기 때문에 규모를 확장하는 데 있어서 한계가 있으며 생성 가능한 가상 네트워크의 수 역시 VLAN ID의 수와 동일한 4096개로 제한된다. 이런 제약 때문에 확장 가능성이 적은 소규모의 클라우드 구축에 선호되는 네트워크 모델이다.
VXLAN
VLAN이 가진 확장성의 제약을 보완한 네트워크 가상화 기술로, 터널링 기법을 이용해 IP 네트워크 위에 L2 네트워크를 구성하는 방식이다. 따라서 컴퓨트 노드 간에 IP로 통신만 가능하다면 위치에 관계 없이 VXLAN을 구성할 수 있다. 생성 가능한 네트워크의 수 역시 16,000,000 개로 거의 제약이 없는 수준이며, VXLAN에 속한 가상 머신들의 MAC 엔트리를 가상 스위치에서 관리한다는 점 또한 확장성을 높이는 데 도움이 된다. 다만, 터널링에 필요한 VXLAN 헤더를 인캡슐레이션 및 디캡슐레이션하는 과정에서 오버헤드가 발생한다. 규모가 크고 테넌트의 수가 많은 대규모의 클라우드 구축에 적합한 모델이다.
그 밖에 DHCP나 라우터 같은 IP 기반의 서비스는 여러 개의 가상 네트워크가 동일한 IP 대역을 사용하는 것(Overlapping IP)을 허용하기 위해서 리눅스의 네트워크 네임스페이스 기능을 주로 활용한다. 최근에는 오버레이 네트워크 모델 사용 시 불필요한 브로드캐스트 트래픽이 물리 네트워크를 점유하는 것을 개선하기 위해서 가상 스위치가 ARP proxy 역할을 하도록 하는
네트워크 기능 가상화
기본적인 네트워크 연결성 외에 방화벽이나 로드 밸런서와 같은 부가적인 네트워크 기능은 클라우드 서비스를 하는 데 필수적인 요소다. 뉴트론은 다양한 네트워크 기능을 확장할 수 있는 서비스 플러그인 구조를 제공하며, 대표적인 네트워크 기능인 로드 밸런서 플러그인의 경우 ML2 플러그인과 마찬가지로 다양한 구현을 드라이버 방식으로 수용할 수 있게 되어있다.
현재 구현되어 있는 로드 밸런서 드라이버는 크게 하드웨어 기반과 소프트웨어 기반으로 나눠 볼 수 있는데, 하드웨어 기반의 드라이버는 기존 하드웨어 장비의 설정을 뉴트론 LBaaS API로 가능하게 한 것이다. 소프트웨어 기반의 드라이버는 전용 에이전트를 통해 HAproxy 프로세스를 띄우고 설정하는 방식과 Octavia 처럼 오픈스택 가상 머신을 로드 밸런서로 활용하는 방식이 있다. 네트워크 기능의 경우 일반적인 목적의 가상 머신과 달리 HAproxy와 같은 특정 프로세스를 실행하는 것이 목적이므로 컨테이너 기반으로 구현하는 것도 좋은 방법일 수 있을 것이다.