Linux의 가상 네트워크
NIC, 스위치, 네트워크 및 어플라이언스
오늘날의 컴퓨팅에서 부활이 진행되고 있다. 가상화는 수십 년 전에 만들어졌지만 상용 하드웨어의 사용을 통해 진정한 가치가 현재 실현되고 있다. 가상화는 효율성을 위해 서버 워크로드를 통합하지만 서버 환경의 다른 요소가 더 진화된 통합에 필요한 후보로 떠오르고 있다. 많은 사람들은 가상화를 CPU, 메모리 및 스토리지의 통합이라고 인식하지만 이것은 솔루션을 지나치게 단순화하는 것이다. 네트워크는 가상화의 주요 측면이며 가상화 세트의 퍼스트 클래스 요소를 나타낸다.
문제점에 대한 높은 수준의 탐색에서 시작하여 Linux®가 네트워크 가상화를 빌드하고 지원하는 다양한 방법에 대해 살펴보자.
기존 환경(그림 1 참조)에서는 실제 서버 세트가 필요한 애플리케이션 세트를 호스트한다. 서버 간 통신을 사용하기 위해 각 서버에는 외부 네트워크 인프라에 접속하는 네트워크 인터페이스 카드(NIC)가 하나 이상 포함되어 있다. NIC는 네트워크 소프트웨어 스택과 함께 네트워크 인프라를 통해 엔드포인트 간 통신을 사용 가능하게 한다. 그림 1과 같이 이 기능은 스위치로 표시되며 스위치는 참여하는 엔드포인트 간 효율적인 패킷 통신을 가능하게 한다.
그림 1. 기존 네트워크 인프라
서버 통합 뒤에 숨겨진 주요 혁신사항은 여러 운영 체제와 애플리케이션이 하드웨어를 공유할 수 있도록 하는 실제 하드웨어의 추상화이다(그림 2 참조). 이러한 혁신을 하이퍼바이저(또는 가상 시스템(VM) 모니터)라고 한다. 각각의 VM(운영 체제 및 애플리케이션 세트)은 기본 하드웨어의 일부가 존재하지 않거나 여러 VM에서 공유될 수 있는 경우에도 기본 하드웨어를 공유되지 않는 완전한 시스템으로 간주한다. 이러한 예가 가상 NIC(vNIC)이다. 하이퍼바이저는 각 VM에 대해 하나 이상의 vNIC를 작성할 수 있다. 이러한 NIC는 VM에게 실제 NIC로 표시될 수 있지만 실제로는 NIC의 인터페이스만 나타낸다. 또한 하이퍼바이저는 VM 엔드포인트 간 구성 가능한 통신을 사용할 수 있도록 하는 가상화된 스위치로 완전해지는 가상 네트워크의 동적 구성을 허용한다. 마지막으로 하이퍼바이저는 서버의 실제 NIC를 하이퍼바이저의 논리적 인프라에 접속하여 하이퍼바이저 내의 VM 간 효율적인 통신과 외부 네트워크에 대한 효율적인 통신을 허용하여 실제 네트워크 인프라에 대한 통신도 허용한다. 참고자료 섹션에서 오픈 소스 운영 체제의 풍부한 영역인 Linux에서의 하이퍼바이저에 대한 자세한 정보의 풍부한 링크를 찾을 수 있다.
가상화된 네트워크 인프라도 가상 어플라이언스와 같은 흥미로운 다른 혁신사항을 사용할 수 있도록 했다. 여기서는 가상 네트워크의 요소에 추가로 이에 대해 살펴본다.
가상화된 네트워크 인프라의 주요 발전사항 중 하나가 가상 스위치의 개발이다. 가상 스위치는 vNIC를 서버의 실제 NIC에 접속시키고 더 중요하게는 로컬 통신을 위해 서버에 있는 다른 vNIC에 vNIC를 결합한다. 이것이 흥미로운 이유는 가상 스위치 내에서 제한은 네트워크 속도와는 관계가 없고 메모리 대역폭과 관련되어 있어 로컬 VM 간 효율적인 통신을 가능하게 하고 네트워크 인프라의 오버헤드를 최소화하기 때문이다. 이러한 절감은 VM 간 트래픽이 서버 내에서 격리된 상태로 실제 네트워크가 서버 간 통신을 위해서만 사용됨으로 인해 발생한다.
하지만 Linux에서 이미 커널 내에 계층 2 스위치를 통합하기 때문에 일부 사용자는 가상 스위치가 왜 필요한지 물었다. 이에 대한 답변에는 여러 속성이 관련되지만 가장 중요한 속성 중 하나가 이러한 스위치 유형에 대한 새로운 분류에 의해 정의된다. 새 클래스는 분산 가상 스위치라고 부르며 기본 서버 아키텍처를 투명하게 만드는 방식으로 서버 사이를 연결할 수 있게 한다. 하나의 서버에 있는 가상 스위치는 또다른 서버에 있는 가상 스위치와 투명하게 결합할 수 있어(그림 3 참조) 서버(및 해당 가상 인터페이스) 간 VM 마이그레이션이 훨씬 더 단순해진다. 왜냐하면 이러한 VM이 또다른 서버의 분산 가상 스위치에 접속하여 가상 스위치 네트워크를 투명하게 결합할 수 있기 때문이다.
그림 3. 분산 가상 스위치
이 공간에서 가장 중요한 프로젝트 중 하나는 이 기사에서 다음에 다루는 Open vSwitch라는 것이다.
서버 내에서 논리적 트래픽을 격리하는 것과 관련된 한 가지 문제는 트래픽이 외부(예: 네트워크 분석기)에 표시되지 않는다는 것이다. 구현에서는 트래픽을 제어하고 모니터하기 위해 원격 액세스를 내보내는 데 사용되는 OpenFlow, NetFlow 및 sFlow와 같은 다양한 스키마를 통해 이 문제점을 해결했다.
분산 가상 스위치의 초기 구현은 독점 하이퍼바이저 세트에 대한 작동으로만 제한되어 있었다. 하지만 오늘날의 클라우드 환경에서는 여러 하이퍼바이저가 공존할 수 있는 이기종 환경을 지원하는 것이 이상적이다.
Open vSwitch는 Apache 2.0 라이센스 하에서 오픈 소스로 사용 가능한 다계층 가상 스위치이다. 2010년 5월부터 Open vSwitch는 버전 1.0.1을 사용할 수 있게 되었고 인상적인 기능을 지원한다. Open vSwitch는 KVM(Kernel-based VM), VirtualBox, Xen 및 XenServer를 포함한 뛰어난 오픈 소스 하이퍼바이저 솔루션을 지원한다. Open vSwitch는 현재 Linux 연결 모듈의 임시 대체이기도 하다.
Open vSwitch는 스위치 디먼과 플로우 기반 스위치를 관리하는 동반 커널 모듈로 구성된다. 스위치 관리에 필요한 다양한 기타 디먼 및 유틸리티도 존재한다(특히 OpenFlow의 관점에서). Open vSwitch 전체를 사용자 공간에서 실행할 수 있지만 그렇게 하면 성능이 저하된다.
VM 환경을 위한 프로덕션 품질 스위치를 제공하는 것 외에도 Open vSwitch에는 폐쇄적인 다른 독점 솔루션과 경쟁할 인상적인 기능 로드맵이 포함된다.
NIC 하드웨어의 가상화는 가상 스위치가 도입되기 한참 전에 다양한 형식으로 일정 기간 동안 존재했다. 이 섹션에서는 일부 구현과 네트워크 가상화의 속도를 개선하기 위해 사용할 수 있는 하드웨어 가속화 중 일부에 대해 살펴본다.
QEMU는 플랫폼 에뮬레이터이지만 NIC를 포함하여 다양한 하드웨어 디바이스를 위한 소프트웨어 에뮬레이션을 제공한다. 또한 QEMU는 IP 주소 할당을 위한 내부 DHCP(Dynamic Host Configuration Protocol) 서버를 제공한다. QEMU는 KVM과 함께 작업하여 플랫폼 에뮬레이션과 개별 디바이스 에뮬레이션을 제공하여 KVM 기반 가상화를 위한 플렛폼을 제공한다. 참고자료 섹션에서 QEMU에 대해 자세히 살펴볼 수 있다.
virtio
는 VM에서 하이퍼바이저로의 I/O 트래픽을 단순화하고 촉진하는 Linux용 입/출력(I/O) 반가상화 프레임워크이다. virtio
는 블록 디바이스, 일반 PCI(Peripheral Component Interconnect) 디바이스, 네트워크 디바이스 등을 가상화하기 위해 VM과 하이퍼바이저 사이의 I/O를 위한 표준화된 전송 메커니즘을 작성한다. 참고자료 섹션에서 virtio
의 내부 구조에 대해 자세히 살펴볼 수 있다. 가상화는 호스트 네트워크 스택에 대한 VM 게스트 네트워크 스택 액세스를 허용하기 위해 상당한 기간 동안 네트워크 스택에서 구현되었다. 스키마 중 두 가지는 TAP과 TUN이다. TAP은 이더넷 디바이스를 구현하여 이더넷 프레임 레벨에서 작동하는 가상 네트워크 커널 드라이버이다. TAP 드라이버는 게스트 이더넷 프레임과 통신하는 데 사용되는 이더넷 "탭(tap)"을 제공한다. TUN(또는 네트워크 "터널")은 기본 이더넷 디바이스가 TUN IP 패킷의 계층 2 프레임을 관리할 수 있기 때문에 네트워크 계층 디바이스를 시뮬레이션하고 IP 패킷의 상위 레벨에서 통신하여 약간의 최적화를 제공한다.
I/O 가상화는 하드웨어 레벨에서 가상화의 가속을 가능하게 하는 PCI-SIG(Special Interest Group)의 표준화된 스키마이다. 특히 SR-IOV(Single-root IOV)는 단일 PCIe(PCI Express) 카드가 다수의 사용자에게 복수의 PCIe 카드로 표시될 수 있도록 하는 인터페이스를 노출하여 독립적인 여러 드라이버가 서로에 대한 지식 없이 PCIe 카드에 접속할 수 있도록 한다. SR-IOV는 PCIe 공간의 실제 함수로 나타나고 카드 내에서 공유 함수로 표시되는 가상 함수를 다양한 사용자에게까지 확장하여 이를 달성한다.
SR-IOV가 네트워크 가상화에 제공하는 혜택은 성능이다. 실제 NIC의 공유를 구현하는 하이퍼바이저 대신 카드 자체가 멀티플렉싱을 구현하여 게스트 VM에서 카드로 직접 I/O를 전달할 수 있게 한다.
오늘날 Linux에는 KVM 하이퍼바이저에 도움이 되는 SR-IOV에 대한 지원이 포함된다. Xen에도 SR-IOV에 대한 지원이 포함되어 vNIC를 게스트 VM에 효율적으로 제공할 수 있다. SR-IOV에 대한 지원은 Open vSwitch를 위한 로드맵 위에 있다.
관련은 있지만 가상 LAN(VLAN)은 네트워크 가상화를 위한 실제 메소드이다. VLAN은 분산 네트워크에서 가상 네트워크를 작성할 수 있는 기능을 제공하므로 독립 네트워크에 있는 이질적인 호스트는 동일한 브로드캐스트 도메인의 일부인 것처럼 표시된다. VLAN은 IEEE(Institute of Electrical and Electronics Engineers) 802.1Q 표준별 특정 LAN에 대한 멤버십을 식별하기 위해 프레임에 VLAN 정보를 태그로 지정하여 이를 달성한다. 호스트는 VLAN 스위치와 함께 작업하여 실제 네트워크를 가상화한다. 하지만 VLAN이 분리된 네트워크에 대한 환상을 제공하더라도 VLAN은 동일한 네트워크를 공유하기 때문에 정체로 인해 발생하는 사용 가능한 대역폭 및 영향을 공유한다.
NIC 및 기타 디바이스를 언급하는 다수의 I/O 중심 가상화 가속화가 나타나기 시작했다. Intel® VT-d(Virtualization Technology for Directed I/O)에서는 신뢰성 및 보안 향상을 위해 I/O 자원을 격리하는 기능을 제공하며 여기에는 멀티 레벨 페이지 테이블을 사용한 직접 메모리 액세스 전송 재맵핑과 디바이스 연관 인터럽트 재맵핑이 포함되어 수정되지 않은 게스트와 가상화를 인식하는 게스트를 둘 다 지원한다. Intel VMDq(Virtual Machine Device Queues)도 큐를 임베드하고 하드웨어 내에서 인텔리전스를 정렬하여 하이퍼바이저의 CPU 사용량을 줄이고 전반적인 시스템 성능을 향상시킴으로써 가상화 설정에서 네트워크 트래픽 플로우를 가속화한다. Linux에는 이들에 대한 지원이 모두 포함되어 있다.
지금까지 이 기사에서는 NIC 디바이스 및 스위치의 가상화, 기존 구현 중 일부, 이러한 가상화가 하드웨어를 통해 가속화되는 방법 중 일부에 대해 살펴봤다. 이제는 일반 네트워크 서비스까지 범위를 확장해 보자.
가상화 영역에서 흥미로운 혁신사항 중 한 가지는 서버 통합으로부터 진화하는 환경이다. 애플리케이션을 하드웨어의 특수 버전에 전용하는 대신 서버의 일부가 분리되어 서버 내에서 서비스를 확장하는 VM을 강화한다. 이러한 VM은 특정 애플리케이션에 초점을 두고 가상화 설정을 위해 개발되었기 때문에 가상 어플라이언스라고 부른다.
가상 어플라이언스는 일반적으로 하이퍼바이저(또는 하이퍼바이저가 제공하는 일반 네트워크 인프라)에 연결되어 특정 서비스를 확장한다. 여기서 특이한 부분은 통합 서버에서 처리 용량 중 일부(예: 코어)와 I/O 대역폭이 가상 어플라이언스를 위해 동적으로 구성될 수 있다는 점이다. 이를 위해 단일 서버가 격리되지 않기 때문에 이러한 기능은 비용 효율을 더 높이므로 사용자는 서버에서 실행 중인 다른 애플리케이션의 요구에 따라 용량을 동적으로 변경할 수 있다. 또한 가상 어플라이언스는 VM 내에서 운영 체제에 결합되기 때문에 관리가 더 단순할 수 있다. VM은 전체적으로 사전 구성되어 있기 때문에 특별한 구성이 필요하지 않다. 이것은 가상 어플라이언스에 대한 상당한 혜택이며 오늘날 가상 어플라이언스가 성장하고 있는 이유이기도 하다.
가상 어플라이언스는 다수의 엔터프라이즈 애플리케이션을 개발해 왔으며 WAN 최적화, 라우터, 가상 사설 네트워크, 방화벽, 침입 방어/감지 시스템, 이메일 분류 및 관리 등을 포함한다. 네트워크 서비스 외부에는 스토리지, 보안, 애플리케이션 프레임워크 및 컨텐츠 관리를 위한 가상 어플라이언스가 있다.
관리할 수 있는 모든 것들이 실제로 만질 수 있는 것이었던 시절이 있었다. 하지만 오늘날과 같이 가상화가 증가하고 있는 환경에서는 실제 디바이스 및 서비스는 눈에 보이지 않도록 사라지고 있다. 실제 네트워크는 트래픽 격리 및 지역적으로 분산된 엔티티에서의 가상 네트워크 구성을 허용하기 위해 가상으로 세그먼트화되고 있다. 애플리케이션은 강력한 서버 내의 코어 사이에서 세그먼트화되는 가상 어플라이언스 속으로 사라져 관리자에게 더 많은 복잡성을 제공하지만 향상된 유연성과 관리성도 제공한다. 물론 Linux가 이를 이끌고 있다.
출처 : http://www.ibm.com/developerworks/kr/library/l-virtual-networking/index.html
'Legacy Skills > VM' 카테고리의 다른 글
OpenvSwitch (0) | 2014.06.19 |
---|---|
논리 아키텍쳐로 알아보는 OpenStack~!! (0) | 2014.06.19 |
Provisioning의 이해 - 프로비저닝, 프로비져닝 (0) | 2014.06.19 |
가상 디스크 씬 프로비저닝(TP) (0) | 2014.06.19 |
프로비저닝(Provisioning)이란 (2) | 2014.06.19 |
댓글