MS 백승주 에반젤리스트님의 블로그에서 퍼왔습니다.
http://blogs.technet.com/b/koalra/archive/2012/04/09/windows-server-multi-tenant.aspx
Windows Server 다음 버전에서 많이 언급되는 멀티 테넌트(Multi-Tenant)란?
오늘부터는 시간이 허락할 때마다, 찬찬히 하나씩 기술을 살펴보려고 합니다. 런치 이후, 약간 여유를 찾았고, 실제 IT 엔지니어 분들께서, 쉽게 한글화된 이야기를 찾고 계시는 듯 합니다.
오늘 먼저 살펴볼 내용은 다음과 같습니다.
Windows Server “8” 버전의 문서를 살펴보시다보면, 많이 언급되는 다소 생소한 용어가 있습니다. 바로 “멀티 테넌트”라는 단어입니다. 우리 말로 번역하면, 다수의 입주자(?)와 같은 이상한 단어가 되기에, 미디어에서도 그대로 멀티 테넌트라는 단어를 옮겨 사용하고 있습니다. 갑자기 왜 멀티 테넌트라는 단어가 여기저기서 보이기 시작하는 것일까요? 오늘은 오랜만에 블로그를 통해 멀티 테넌트라는 단어에 대해서 살펴보려고 합니다. 사실 이 단어에 대한 명확한 이해가 있어야지, Windows Server 다음 버전의 Hyper-V나 IIS 등, 여러 조직을 통합해서 운영할 수 있는 기술에 익숙해질 수 있습니다. 지난 3월 27일, 사설 클라우드 런치 행사내 Windows Server “8” Hyper-V 세션에서 사용한 슬라이드 한장을 가져와 보죠.
3개의 조직이 하나의 데이터센터에 통합되는 경우에 대한 예제였습니다. 여기서부터 멀티 테넌트에 대한 이해가 시작될 수 있습니다. 테넌트(Tenant, 입주자)는 말 그대로 한 조직의 인프라를 의미하는 것이고, 멀티(Multi)라는 단어가 붙었기에, 다수, 다시 말해, 여러 개의 라는 의미가 덧붙여졌습니다.
만약 여러 조직이 하나의 인프라에 통합된다면, 발생할 수 있는 이슈들은 여러가지가 있겠죠.
- IP 주소에 대한 충돌 : 많은 조직이 NAT(Network Address Translation)기반의 사설 IP 주소를 사용합니다. 10.X.X.X 172.16.X.X 192.168.X.X등이 여기에 해당되겠죠. 우리가 잘 아는 IPv4 주소 체계에선 내부용 IP 주소 영역을 남겨놓았고(구지 그 IP 주소대를 사용하지 않아도 되지만..), 이 IP 주소 영역이 조직간 겹치지 말라는 보장이 없습니다.
- 보안 및 규정에 대한 이슈 : 지금까지의 통합 방법론에서 가장 손쉽게 생각하는 부분이 바로 서버 가상화를 통한 통합이었습니다. 이 경우, 네트워크에 대한 부분은 서버 기술에서는 크게 고민하지 않거나, 추가적인 네트워크 기술의 가미, 또는 실제 네트워크 장비에 대한 VLAN 구성등을 해주었습니다. 너무 당연하죠? 네트워크 영역이 확실히 분리되어져 있지 않은 경우, 한 조직내에서 네트워크 모니터링 프로그램을 통해, 타 조직의 패킷을 볼 수 있을 확률도 있습니다. 이런 이유로 추가적인 암호화기술들(IPSEC)을 생각해야 했습니다. 결국 격리에 대한 부분을 통합 서비스를 제공하는 입장에서는 생각해야 합니다.
Windows Server 다음 버전을 기획하는 마이크로소프트 입장에서는 이러한 고객의 이야기를 많이 들었다고 합니다. 또한 Windows Azure를 운영하면서 느꼈던, 그러면서도 추가적인 기술을 가미하면서, 테넌트(고객이겠죠?)간 확실한 분리 기술을 Windows Server 플랫폼에 필요하다고 느꼈다는 의미입니다. (차후 Windows Server “8”의 등장 배경 포스팅에서 한번 더 다루겠습니다.)
차기 Windows Server에는 다수의 멀티 테넌트 기술이 탑재되어져 있습니다. Hyper-V의 네트워크 가상화나 격리 보안 기술, 그리고 IIS의 호스트 헤더 HTTPS 등 기존에 물리적인 서버를 분리해야만 가질 수 있었던 조직간 분리 기술을 플랫폼 기술이 기본적으로 가지고 있고, 이를 통해 물리적으로는 하나의 서버이지만, 논리적으로는 확실하게 분리된 멀티 테넌트 환경을 제공하는 것이죠. 공유된 리소스라는 단어가 필수적인 클라우드 환경에서는 더더욱 기본적인 부분이고요. 클라우드는 잘 아시는 것처럼, 공유된 리소스를 필요에 따라 더 받아 사용하거나, 필요가 없을 경우, 빠르게 반납할 수 있어야 합니다.
종종 미디어에서 다수 입주 주택(아파트가 대표적이겠죠?)내 여러 이슈들이 보여집니다. 방음 및 사생활 확보, 일조권등.. 결국 일상 생활과 마찬가지로, 인프라 환경에서도 상호간 지켜줘야 할 부분에 대해서는 이제 확실히 지킬 수 있는 무기가 필요해졌고, 이를 위해 Windows Server는 여러 기술을 탑재해놓았습니다. 이를 멀티 테넌트에 대한 지원이라고 이야기합니다.
Windows Server 2012 Hyper-V, 보다 완벽한 멀티 테넌트를 위해,
PVLAN(Private VLAN), ACL, 고급 보안 기술까지
지난 4월 8일에 포스팅한 Windows Server 다음 버전에서 많이 언급되는 멀티 테넌트(Multi-Tenant)란?의 기술적인 이야기입니다.
요사이 가상화의 트렌드가 조금 더 세부적으로 요구되고 있는 실정입니다. 지금까지의 가상화가 운영 체제 레벨의 가상화를 요구하였습니다만, 하드웨어 스펙이 올라가고, 더 많은 시나리오에서 가상화를 활용하기 때문입니다. 운영 체제만을 분리하여, 물리적인 머신에 분리 탑재할 경우, 가장 먼저 나오는 질문중 하나가 바로 보안에 대한 부분입니다.
“A 가상 머신과 B 가상 머신이 완벽하게 분리되어져 있나요?”
이 질문은 보안에 대한 질문입니다. A 머신에서 네트워크 모니터를 열고, B 머신의 네트워크 패킷을 볼 수 있는 건 아닌지? A 머신에서 보안 사고가 발생하면, B 머신에 영향을 주는 것은 아닌지?
해당 분야의 걱정을 없애기 위해서, 지금까지 활용했던 시나리오는 가상 머신에 부여된 네트워크 카드(NIC)을 분리하는 것이었습니다. 이러한 이유로 가상화 서비스를 제공하는 물리적인 머신에 다수의 NIC을 설치하여, 가상 머신 별로 부여하는 것이죠. 또한 NIC에 대한 네트워크 설정, 대표적으로 VLAN을 부여하는 방법도 여기에 해당됩니다.
VLAN을 활용하는 네트워크 설정은 VLAN 최대 갯수의 제한도 제한이지만, 다양한 설정이 복잡하게 반영될수록, 실수의 확률도 높아지게 됩니다. 네트워크 팀과 운영 체제 팀이 분리되어져 있을 경우, 문제 발생시, 이를 찾아내는 과정도 복잡해질 수 있습니다.
이러한 연유로 트렌드가 서서히 움직이는 것이 바로 가상화 레벨에서도 네트워크 기술을 가져가는 분위기가 일어나고 있습니다. 이에 맞춰 Windows Server 2012 Hyper-V에도 네트워크 레벨 기술이 기본적으로 탑재되고 있습니다.
- 가상 머신간 PVLAN(Private VLAN)을 부여
- 가상 머신에 대한 Layer 2,3에 대한 입출입 제어
- ARP ND/DHCP 가드와 같은 기본 보안 기술 탑재
- IP Rewrite, GRE를 통한 네트워크 가상화(Network Virtualization)
오늘은 이중 하나의 포스팅에서 살펴볼 수 있는 상위 3가지를 살펴보려고 합니다.
VLAN이라는 이름은 Virtual LAN의 약자입니다. LAN은 하나의 네트워크인데, VLAN을 통해 그 하나의 네트워크를 가상으로 나눠주는 것입니다. VLAN 번호를 부여하여, 같은 VLAN 번호의 스위치 포트에 연결된 머신끼리만 교신을 시켜주는 것입니다. 이 VLAN보다 조금 더 세밀한 설정을 부여하는 형태가 바로 PVLAN입니다. VLAN ID를 Primary VLAN ID, Secondary VLAN ID로 두개를 부여하여, 더 많은 VLAN을 부여할 수 있게 합니다.
이 PVLAN에는 3가지 모드가 있습니다. 위의 그림에도 보여지는 바와 같이 ISOLATED, COMMUNITY, PROMISCUOUS 모드입니다.
- ISOLATE : Layer 2에서도 상호간 교신이 안되는 모드입니다. 같은 PVLAN ID를 가지더라도 상호 교신이 불가능합니다.
- COMMUNITY : 같은 COMMUNITY ID간에는 교신이 가능한 모드입니다.
- PROMISCUOUS : Primary VLAN ID가 일치한 경우엔 상호 교신이 가능합니다.
위의 그림을 참고하시면 이해가 빠르실 것으로 보입니다. 마지막에 적혀있는 Trunk Mode의 의미는 해당 PVLAN 정보가 하나의 물리적인 Hyper-V 호스트에서만 활용할 수 있는 것이 아니라, 여러 Hyper-V 호스트 머신간 정보가 공유되는 모드라고 보실 수 있죠. 바로 Switch VLAN의 Trunk Mode와 유사합니다.
PVLAN 설정은 PowerShell을 통해서 하실 수 있습니다. 기본적인 VLAN 정보는 Get-VMNetworkAdapterVlan이며, 설정은 Set-VMNetworkAdapterVlan입니다.
중간 항목에 있는 Isolated 부분이 Community, Promiscous로 대체 가능하며, Promiscuous를 선택했을 경우엔, Primary VLAN ID만 같으면 되는 모드이기에, Secondary VLAN ID는 목록 형태가 되어야 합니다.
더이상 PVLAN을 활용하지 않을 경우엔 -Untagged를 활용합니다.
가상 머신의 네트워크 입출입을 Layer 2(MAC), 3(IP Address)에서 제어 가능한 방법은 바로 NIC에 대한 ACL(Access Control List)입니다. 바로 특정 VM에서 특정 MAC, IP 주소로 네트워크 패킷이 전달되는 것을 제어하는 방법입니다.
Add-VMNetworkAdapterAcl을 활용하면 됩니다. RemoteIPAddress가 IP 주소로 제어하는 것이며, MAC 주소에 대해서는 RemoteMACAddress를 사용합니다. 들어오고 나가는 패킷에 대한 제어는 Direction 속성(Both, Inbound, Outbound), 어떻게 할지에 대해서는 Action 속성(Allow, Deny, Meter)가 있습니다.
부여한 ACL에 대해서는 Remove-VMNetworkAdapterACL을 사용합니다.
오늘 소개할 마지막 기능은 바로 2가지 보안 기능입니다. 바로 DHCP 가드(DHCP Guard)와 라우터 가드(Router Guard)입니다.
DHCP Guard는 VM 레벨에서 허가받지 않은 DHCP 서버를 운영하지 못하게 할 수 있습니다. 바로 VM 레벨에서 DHCP 요청에 대해서 응답하지 못하게 하는 것입니다. DHCP 가드 사용을 체크할 경우, 해당 VM에서는 DHCP IP 요청에 대해서 응답할 수 없습니다. 라우터 가드의 경우엔 ARP 스푸핑(Spoofing)을 하기 위해, 전달되는 ARP 업데이트 브로드캐스트를 VM 레벨로 전달할 수 없게 하는 것입니다. 이에 대한 설정은 GUI 레벨과 PowerShell 레벨을 모두 제공합니다.
$feature.SettingData.EnableDhcpGuard = $true를 한 후, 이를 Add-VMSwitchExtensionPortFeature Cmdlet을 이용하면 됩니다.
보다 자세한 예제는 TechNet 사이트에서, Set-VMNetworkAdapterVLAN, Add-VMNetworkAdapterACL, Add-VMSwitchExtensionPortFeature 를 살펴보세요~!
PowerShell 레벨의 명령어가 많기에, 조금 복잡해 보일 수 있지만, Layer 2,3에 대한 제어를 가상화 레벨에서 직접할 수 있게 된 것은 매우 환영할만한 일입니다. 가상화를 운영하는 입장에서는 네트워크 윗단의 부분만이 아닌, 실제 머신을 제어하듯이 네트워크까지 제어하는 방향으로 가고 있고, 이에 Hyper-V 역시, 이러한 요구 사항을 적절히 기술로 구현해 놓았습니다.
다음 시간엔 네트워크 가상화에 대한 부분을 살펴보겠습니다.