예전에 올리려고 정리해놨던 글인데, 블로그 활동을 잠시 쉬다가 오랜만에 포스팅한다. Cloud 카테고리에서 Network 영역을 지속해서 다루는 이유는, 네트워크가 가상화의 핵심 요소이며 Cloud를 이해하기 위한 기본적인 소양이기 때문이다.
네트워크 가상화
기존 network 인프라
기존의 레거시 인프라에서는 Application을 호스팅하기 위해 물리적인 서버와 네트워크 장비들이 필요했다. 서버들 간 통신을 가능하도록 하기 위해서 각 서버에는 외부 네트워크에 연결되는 NIC(Network Interface Card)가 포함되어 있어야 하며, NIC은 네트워크 인프라를 통해 endpoint 간 통신을 가능하도록 한다.
위 그림에서 볼 수 있듯이 스위치는 이러한 endpoint 간 효율적인 패킷 통신을 지원하기 위한 장비인 것이다.
가상화된 network 인프라
반면 VM(가상머신) 환경에서는 물리적 하드웨어를 가상화하여 여러 운영체제와 Application이 하드웨어를 공유할 수 있도록 한다. (하이퍼바이저가 이런 일을 수행하는데, 가상화와 하이퍼바이저에 대해서는 곧 새로운 글로 포스팅할 예정)
하이퍼바이저는 각 VM에 대해 하나 이상의 가상 NIC(vNIC)을 생성할 수 있다. vNIC은 NIC의 인터페이스를 구현하여 마치 VM의 물리적 NIC처럼 역할을 수행한다. 이렇게 하이퍼바이저는 가상 네트워크의 동적 구현을 허용하도록 하며, 가상 스위치(vSwitch)를 통해 VM 간 통신이 가능하도록 한다. 또한 하이퍼바이저는 서버의 물리적인 NIC을 하이퍼바이저의 가상화된 네트워크 인프라에 연결하여, 외부 네트워크와의 통신을 가능하도록 한다.
네트워크 가상화로 인해 Virtual Appliance 등 다른 많은 혁신이 가능해졌는데, Virtual Switch에 대해 조금 더 알아보자.
Virtual Switching
네트워크 가상화를 개발하는데 있어 주요 항목 중 하나는 가상 스위치의 개발이다. 가상 스위치는 vNIC을 물리적 NIC에 연결하고, local 통신을 위해 vNIC을 다른 서버의 vNIC들과 연결한다. 흥미로운 점은 가상 스위치 내에서의 속도 limit이 네트워크 속도에 구애받는 것이 아니라, 메모리 대역폭에 관련되어 있다는 점이다. 이는 네트워크 인프라의 오버헤드를 최소화시키며, Local VM들 간 호율적인 통신을 가능하도록 한다. (물리적인 네트워크는 물리적 서버 내에서 VM들 간 트래픽이 격리된 상태에서 서버 간의 통신에만 사용된다.)
하지만 리눅스는 이미 커널 내에 Layer2 스위치를 포함하고 있는데, 왜 가상 스위치가 필요할까? 여러 이유가 있지만, 가장 중요한 핵심 중 하나는 Distributed Virtual Switch(분산 가상 스위치)이다. 이 스위치 유형은 근본적인 서버 아키텍처를 투명하게 만드는 방식으로 서버 간 bridging을 가능하도록 한다.
위 그림에서 볼 수 있듯이, 한 서버 내의 가상 스위치는 다른 서버의 가상 스위치와 투명하게 결합할 수 있으며, 다른 서버의 분산 가상 스위치에 연결할 수 있다. 이는 서버 간의 VM 마이그레이션 혹은 Virtual Interface의 마이그레이션을 훨씬 간단하게 만들어준다.
참고로 서버 내에서 로컬 트래픽을 격리하게 되면, 트래픽을 외부(network analyzer 등)에서 볼 수 없다는 문제가 있다. 이 문제를 해결하기 위해 OpenFlow, NetFlow, sFlow와 같은 다양한 체계를 통해 원격으로 트래픽을 제어하고 모니터링할 수 있다.
Open vSwitch
Open vSwitch는 가상 스위치 분야에서 가장 중요한 프로젝트이다. 초기에 분산 가상 스위치의 구현체들은 closed되었고, 독립적인 하이퍼바이저 세트로만 운영되도록 제한되었다. 하지만 오늘날의 클라우드 환경에서는 여러 하이퍼바이저가 공존할 수 있는 이기종 환경을 지원하는 것이 일반적이다.
Open vSwitch는 Apache 2.0 라이선스에 따라 오픈 소스로 사용할 수 있는 multilayer 가상 스위치이며, Zen, KVM, VirtualBox 등 다양한 오픈소스 하이퍼바이저 솔루션을 지원한다.
Open vSwitch는 스위치 데몬과 flow-based 스위칭을 관리하는 companion 커널 모듈로 구성된다. NetFlow, sFlow, CLI 및 RSPAN과 같은 표준 관리 인터페이스를 지원할 뿐만 아니라, OpenFlow를 사용하여 프로그램 확장 및 제어를 수용할 수 있다. 또한 Open vSwitch는 OVSDB라는 관리 프로토콜을 사용한다.
관리하는 모든 것들을 실제로 물리적으로 만질 수 있는 시절이 있었다. 하지만 오늘날, 가상화 기술이 발전하는 세상에서 물리적인 장치와 서비스들은 점차 사라지고 있다. 물리적 네트워크 또한 트래픽을 격리하고, 지리적으로 다른 엔티티들 간 네트워크를 가상화시키기 위해 논리적으로 분할된다.
네트워크를 가상화 함으로써 클라우드 환경의 유연성과 확장성은 더욱 늘어나게 되며, 이는 생산성을 높이고 비용을 절감하는 효과를 가져온다. 또한 하드웨어가 간소화되고 원격으로 작업이 가능해지며, 이를 운영하는 엔터프라이즈 기업은 네트워크를 제어하고 모니터링하고 관리하는데 필요한 리소스를 줄일 수 있다.
Reference
https://developer.ibm.com/tutorials/l-virtual-networking/
https://www.bmc.com/blogs/virtual-network/
https://en.wikipedia.org/wiki/Open_vSwitch