Tagged: Virtualization

Virtual networking in Linux.

이 포스트의 내용은 다음의 영문내용을 번역한 것 입니다.

Virtual networking in Linux

Virtual networking in Linux

플랫폼 가상화의 폭발적인 성장과 함께, 기업 생태계의 다른 부분이 가상화되고 있다는 건 놀라운 일이 아니다. 아주 최근에 영역은 가상 네트워킹(virtual networking) 이다. 플랫폼 가상화의 초기 구현은 가상 NIC 생성지만 오늘날에는 네트워크의 큰 부분들이 가상화되어지고 있는데, 서버의 VM 간에 통신을 지원하거나 서버간의 분산된 스위치같은 것들이다. 가상 네트워킹의 배경이되는, NIC 및 스위치 가상화에 초점을 맞춰, 아이디어를 설명한다.

Computing today is undergoing something of a revival. 비록 가상화가 수십년전에 만들어졌지만, 실질적인 잠재력은 하드웨어 부품들을 통해서 이제야 현실화되어지고 있다.  가상화 통합은 서버를 효율적으로 부하를 처리하도록 하지만 서버 생태계의 다른 요소들이 좀 더 통합을 위한 후보들로 떠오르고 있다. CPU, Memory, Storage 통합과 같은 다양한 측면의 가상화가 있지만 이는 솔루션을 단순화시켜준다. 네트워크는 가상화의 열쇠이며 가상화 셋(set)에서 최고 등급의 요소이다.

Virtualizing networks

고차원의 문제를 설명하는 것으로 시작해보자. 그리고 나서 리눅스 빌드(build) 와 네트워크 가상화를 지원하는 다양한 방법에 대해서 알아본다.

전통적인 환경에서, 물리적인 서버 셋(set)은 필요한 애플리케이션 셋(set) 을 호스트 한다. 서버들간에 통신을 활성화 하기위해서, 각 서버는 외부 네트워킹 인프라와 연결된 하나 혹은 그 이상의 네트워크 인터페이스 카드(NIC) 를 가지고 있어야 한다. NIC는, 네트워킹 소프트웨어 스택을 따르는, 네트워크 인프라를 통해 끝 지점(endpoint) 사이에 통신을 가능하게 해준다. Figure 1 에서 , 이러한 기능들은 스위치에 의해서 구현되어진, 스위치에 연결된 끝 지점 사이에 효과적인 패킷 통신을 가능하다는 걸 보여준다.

Figure1. 전통적인 네트워킹 인프라
Figure1. 전통적인 네트워킹 인프라

서버 통합 이면의 핵심적인 혁신은 다양한 운영 시스템을 허용하는 물리적 하드웨어 추상화와 하드웨어를 공유하는 애플리케이션들이다. (Figure 2를 보라). 이러한 혁신을 하이퍼바이저(hypervisor) 혹은 가상 머신 모니터(virtual machine [VM] monitor) 라고 부른다. 각각의 VM(운영체제 시스템과 애플리케이션 셋)은 기초적인 하드웨어를 공유하지 않는 것처럼, 그것이 존재하지 않거나 다수의 VM 에 의해서 공유되어질지라도, 마치 완전한 머신으로 보인다. 대표적인 예가 가상 NIC(vNIC) 이다. 하이퍼바이저는 하나 혹은 그 이상의 vNIC 를 각 VM 에 생성한다. 이러한 NIC 들은 VM에 마치 물리적인 NIC 처럼 나타지만 실제로는 오직 NIC 인터페이스로 제공된다. 또, 하이퍼바이저는 가상 네트워크의 동적인 구조를 허용하는데, VM 끝지점 사이의 구성가능한 통신을 할 수있도록 스위치를 가상화하도록 해준다. 끝으로, 하이퍼바이저의 논리적 인프라에 서버의 물리적인 NIC 를 붙임으로써, 외부네트워크과 효율적인 통신이 잘되는 것처럼 하이퍼바이저 안에 VM 사이에 효율적인 통신을 허용하는것처럼,  물리적인 네트워킹 인프라와 통신하는것을 허용합니다.

Figure2. 가상화된 네트워킹 인프라
Figure2. 가상화된 네트워킹 인프라

가상회된 네트워크는 다른 흥미로운 혁신 또한 가능하도록하는데, 가상 기기(Virtual Appliance) 같은 것이다. 우리는 이러한 추가적인 가상 네트워크의 요소들을 살펴볼 것이다.


 Virtual switching

가상화된 네트워킹 인프라 개발의 핵심중에 하나는 가상 스위치 개발이다. 가상 스위치는 서버의 물리적인 NIC 에 vNIC 를 붙이고 더 중요하게는 지역적 통신을 위해서 서버안에 vNIC 와 다른 vNIC 를 묶어준다. 이것이 흥미로운 점은, 네트워크 스피드로 할 수 있는 것을 대신해, 메모리 대역폭, 로컬 VM 사이에 효율적인 통신을 허용하고 네트워크 인프라의 오버헤드를 최소화하는 가상 스위치를 갖는다는데 있다. 이것은 물리적인 네트워크는 서버사이에 통신만을 위해서 사용되어지고 내부 VM 트래픽을 서버사이에 통신 트래픽과 분리하는 결과를 갖게 한다.

하지만, 리눅스에서는 이미 커널내에 레이어-2 스위치가 내장되어 있지만 왜 가상 스위치가 필요한지 종종 묻곤 한다. 이에 대한 대답은 다양한 속성들을 포함하지만 가장 중요한 것중에 하나는 이러한 스위치 타입에 대한 새로운 주제에 의해서 정해진다. 그 새로운 주제를 분산된 가상 스위치(distributed virtual switch) 로 기본 서버 아키텍쳐를 투명하게 해주는 방법으로 서버간 브리징(cross-server bridge)을 할수 있게 해준다. 서버내의 가상 스위치는 다른 서버의 가상 스위치를 투명하게 연결 시킬 수 있고 (Figure 3 을 보라) 아주 간단하게 서버들과 그들의 가상 인터페이스 사이에 VM 의 이동을 만들어주기 때문에 다른 서버에 분산된 가상 스위치를 붙일 수 있고 투명하게 가상 스위치된 네트워크와 연결된다.

Figure3. 분산된 가상 스위치.
Figure3. 분산된 가상 스위치.

이 세계에서 가장 중요한 프로젝트중에 하나가 바로 다음에 설명할 Open vSwitch 이다.

서버내에 격리된 로컬 트래픽이 가지는 이슈중에 하나는 그러한 트래픽은 외부적으로 볼 수 없다는 것이다. (예를들면, 네트워크 분석가들에게) Implementations have addressed this problem through a variety of schemes, such as OpenFlow, NetFlow, and sFlow, which are used to export remote access to control and monitor traffic. (내용상, 이러한 문제, 그러니까 외부에서 트래픽을 분석할 수 없는 문제를 해결하기 위한 다양한 스킴들이 존재하는데 OpenFlow, NetFlwo, sFlow 들이 그런것이고 이들은 트래픽을 모니터하고 외부 접속을 제어할 수 있도록 해준다 것인듯 하다.)

Open vSwitch

초기의 분산된 가상 스위치들은 패쇄적이고 상용 하이퍼바이저 운영에는 제한적이였다. 하지만 오늘날과 같은 클라우드 환경에서, 이것은 다양한 하이퍼바이저가 공존하는 이기종 환경을 지원하는 이상적인 방법이다. (말이 이상하다..;; 원문: But in today’s cloud environments, it’s ideal to support a heterogeneous environment in which multiple hypervisors can coexist.)

Open vSwitch 는 아파치 2.0 라이센스하에 활용할 수 있는 다중레이어 가상 스위치이다. 2010년 5월즘, Open vSwitch 는 1.0.1 버전으로 활용할 수 있었고 인상적인 기능들을 지원했다. Open vSwitch는 , 커널 기반 VM(KVM), VirtualBox, Xen, 그리고 XenServer들과 같은 오픈 소스 하이퍼바이저 솔루션들의 가장 중요한 부분을 지원했다. 이것은 현재 리눅스 브릿지 모듈을 대체하고 있다.

Open vSwitch 는 스위치 데몬과 흐림기반 스위칭(flow-based switching) 제어를 위한 커널 모듈듈로 구성된다. 다양한 다른 데몬들과 유틸리티 또한 스위치 관리를 위해서 존재한다. 당신은 유저 공간에서 전체적으로 Open vSwitch 를 실행할 수 있지만, 성능 저하를 초래할 수 있다.

VM 환경에서 production-quality 를 추가하기 위해서, Open vSwitch 는 상용 솔루션과 다른 비슷한 것과 경쟁하기 위해서 굉장한 기능 개발 로드 맵을 포함한다.


 Network device virtualization

NIC 하드웨어 가상화는 가상 스위칭이 소개되기 이전부터 다양한 형태로, 때때로 존재해 왔다. 이 섹션은 네트워크 가상화의 속도를 개선하기위해 활용할 수 있는 몇몇의 하드웨어 가속으로 알려지는 것들을 살펴볼 것이다.

QEMU

비록 QEMU 가 플랫폼 에뮬레이터이지만, NIC를 포함한 다양한 하드웨어 장치에 대해 소프트웨어 에뮬레이션을 제공한다. 추가적으로, QEMU 는 IP 주소 할당을 위해서 동적 호스트 설정 프로토콜 서버를 제공한다. QEMU 는 KVM 기반 가상화에 대해 플랫폼을 제공하기 위해서 플랫폼 에뮬레이터와 개발 장치 에뮬레이터가 KVM과 함께 동작한다.

virtio

virtio는 VM 으로부터 하이퍼바이저에 I/O 트래픽을 신속히 처리하고 단순화하기 위한 리눅스의 Input/Output(I/O) 반 가상화(para-virtualization) 프레임워크이다. virtio 는 PCI 디바이스, 네트워크 디바이스, 기타등등 블록 디바이스를 가상화할 목적으로 VM과 하이퍼바이저 사이에 I/O에 대한 표준화된 전송 메커니즘을 생성한다.

TAP and TUN

가상화는 꽤 많은 시간동안 호스트 네트워킹 스택에 VM 게스트 네트워킹 스택 액세스를 허용하는 네트워크 스택을 구현해 왔다. 두개의 전략은 TAP 과 TUN 이다. TAP은 이데넷 디바이스를 구현한 가상 네트워크 커널 드라이버이며 이더넷 프레임 레벨에서 운영되어진다. TAP 드라이버는 게스트 이더넷 프레임이 전달 될 수 있는 이더넷 “tap” 을 제공한다. TUN(혹은 네트워크 터널링)은 네트워크 레이어 디바이스를 시뮬레이트하고 IP 패킷의 더 높은 수준의 통신, 최적화를 제공하고 기본적인 이더넷 디바이스가 TUN 의 IP 패킷의 레이어-2 프레이밍을 관리할 수 있도록하는 것등을 한다.

I/O virtualization

I/O 가상화는 하드웨어 수준에서 가상화 가속을 가능하게하는 PCI-Special Interest Group (SIG)의 표준화된 전략이다. 특히, 단일 루트 IOV (SR-IOV)는 단일 PCI Express (PCIe) 카드를 통한 인터페이스가 많은 사용자에게 마치 다중 PCIe 카드처럼 보일 수 있도록하고 다중 독립적인 드라이버가 별도의 지식이 없이 PCIe 카드를 붙이는 것을 허용하는 인터페이스를 나타낸다. SR-IOV 는 가상 기능들을, PCIe 공간의 물리적인 기능처럼 나타나지만 공유 기능으로 카드 내부에 표시되는,  다양한 사용자에게 확장하여 이러한 것을 수행한다.

SR-IOV 가 네트워크 가상화에 가져다 주는 이점은 성능이다. 하이퍼바이져가 물리적 NIC 공유를 구현하는 것보다도 카드 자체적으로 멀티플렉싱을 구현하고 게스트 VM 으로부터 직접적으로 카드에 직접적으로 I/O를 전달하는 것을 허용하는 것이 성능상 이점이 있다.

오늘날 리눅스는 KVM 하이퍼바이저의 이점인 SR-IOV 지원을 포함한다. Xen 또한 SR-IOV 를 지원을 포함하는데, vNIC 를 게스트 VM들에 제공하는 것을 효율적으로 허용한다. SR-IOV 에대한 지원은 Open vSwitch 의 로드 맵에 있다.

Virtual LANs

비록 상대적이긴 하지만, 가상 랜(VLAN)은 네트워크 가상화에 대한 물리적인 방법이다. 동일한 브로드 캐스트 도메인의 일부인 것처럼 (독립된 네트워크)에 서로 다른 호스트가 나타나도록 VLAN은 분산 네트워크를 통해 가상 네트워크를 생성 할 수있는 기능을 제공한다. VLANs 은 그들이 속한 특정한 LAN을 식별하기 위한 VLAN 정보를 가진 프레임을 태깅(tagging)함으로써 이러한것을 수행한다. 호스트는 물리적인 네트워크를 가상화하기 위해서 VLAN 스위치와 협업한다. 하지만, 비록 VLAN 인 분리 네트워크의 가상을 제공하지만, 그들은 같은 네트워크를 공유하고 따라서 같은 대역폭을 활용하고 혼잡으로 인한 충격도 공유한다.

Hardware acceleration

수 많은 I/O에 초점이되는 가상화 가속은 NIC 와 다른 디바이스를 연결하는식으로 나타나기 시작했다. 직접적인 I/O(VT-d)를 위한 Intel® 의 가상화 기술은 신뢰성과 보안성을 향상을 위한, 직접 메모리 접근 전송 재매핑을 포함하고 device-associated 인터럽트 리매핑, 미수정된 게스트들과 virtualization-aware 를 지원, I/O 리소스를 격리시키는 능력을 제공한다. 인텔 가상머신 디바이스 큐(VMDq) 는 내장된 큐에 의해서, 하드웨어 내애서 지능적으로 정렬하는,  가상화 세팅에서 네트워크 트래픽 흐름을 가속화해주는데 하이퍼바이져에 의한 CPU 사용을 적게해주며 전체 시스템 성능을 크게 개선해준다. 리눅스는 이 둘을 모두 지원한다.


Network virtual appliances

지금까지 NIC 디바이스와 스위치 가상화에 대해서 몇몇 존재하는 구현체들과 이러한 가상화들이 하드웨어를 통해서 가속화될 수 있는지에 대한 방법들에 대해서 설명했다. 이제 일반적인 네트워크 서비스들에 이러한 논의를 확장해보자.

가상화 분야에서 흥미로운 혁신중에 하나는 서버 통합으로 발생된 ecosystem 이다. 애플리케이션이 하드웨어 버전에 특화되기위해 노력하는 것보다, 서버 부분은 서버 내에서 서비스드를 확장하는 VM 들의 힘을 분리했다. 이러한 VM 들을 virtual appliances 라고 부르는데, 그들은 가상화 세팅에 대해서 개발하고 특화된 애플리케이션에 초점을 마춘다.

virtual appliance 는 일반적으로 특정한 서비스를 확장하는 하이퍼바이저에 연결되거나 하이퍼바이저가 제공하는 일반적인 네트워킹 인프라에 연결된다. 이것을 특별하게 만드는 것은 프로세싱 처리와 I/O 대역폭 부분은 virtual appliance 에서 동적으로 설정가능하다는 것이다. 이러한 기능은 좀 더 비용 효율적이고 서버내에서 동작중인 다른 애플리케이션의 요구에 기반하는 능력을 동적으로 변경할 수 있게 해준다. Virtual applicance 는 좀 더 관리를 단순화 해주는데, 애플리케이션이 운영 체제와 묶여있기 때문이다. 특별한 설정이 필요없고, VM 이 전체적으로 이미 설정되어져 있다. That’s a considerable benefit for virtual appliances and why they’re growing today.

Virtual appliances have been developed for many enterprise applications and include WAN optimization, routers, virtual private networks, firewalls, intrusion-protection/detection systems, e-mail classification and management, and more. Outside of network services, virtual appliances exist for storage, security, application frameworks, and content management.