Openstack 프로젝트는 클라우드 환경에 대한 모든 타입을 지원하는 오픈소스 클라우드 컴퓨팅 플랫폼이다. 이 프로젝트는 간단한 구현, 대규모 확장, 다양한 기능에 대해 목표로 움직인다. 전 세계 클라우드 전문가들이 이 프로젝트에 기여한다.
Openstack은 서로 보완하는 다양한 서비스를 통하여 Infrastructure-as-a-Service (IaaS) 솔루션을 제공한다. Application Programming Interface (API)를 이용하여 각 서비스 통합을 쉽게 구성한다. 그리고 Openstack의 일반 가상화 기술과의 차이점은 무료로 제공하는 공개 소스(open source)라는 점 말고도 물리적 자원의 성능을 최대한 활용하면서 동시에 클라이언트의 니즈에 맞춰 부하 분산(Load balancing)을 할 수 있다는 점이다.
그래서 많은 기업들이 2013년을 기점(Openstack Summit at Portland in the U.S.)으로 Openstack 도입에 관심을 보였지만, 실제로 기술 도입을 망설이는 이유는 아래와 같다.
Openstack 전문인력이 부족하다.
6개월마다 새로운 버전이 나오는데 적응하기 힘들다.
안정성과 사용성 보완보다는 새로운 기능 확대 중심으로만 개선된다.
그럼에도 불구하고 LG CNS, 다음카카오 등 국내 IT 대기업에서 멀티 클라우드로의 도입 그리고 인텔, AMD, 델, IBM, 야후도 Openstack 프로젝트에 참여하고 있으며 유일한 경쟁업체로 지목됐던 VMware조차도 자사의 API에 Openstack을 적용할 정도라면 Openstack의 영향력 확대는 국내외로 막강하다. 전통적인 워크로드는 서버와 클라이언트 기반이다. 모바일 디바이스 보편화로 네트워크 트래픽은 해를 거듭할수록 폭증하고 있다. 서비스 프로바이더 입장에서 보면 트래픽은 폭증하는데 웹서버로 이를 감당하려면 확장하는(Scale out) 형태로 계속 늘어나야 한다.
레드햇의 경우 이를 위한 '레드햇 엔터프라이즈 리눅스 Openstack 플랫폼(RHELOSP)'이라는 이름으로 제품화했다. 소프트웨어 정의 데이터센터 구축을 위해서라면 반드시 거론되는 솔루션이기도 하다. 레드햇의 제품들은 항상 상위 버전 커뮤니티에서 자유 프로젝트에 통합된 다음에 제품화가 이뤄진다. 레드햇 리눅스, 오픈쉬프트 등도 모두 동일한 과정을 거친다.
RHELOSP는 레드햇 리눅스 위에 얹은 Openstack 플랫폼이다.
"레드햇이 가장 중요하게 여기는 부분은 '안정성과 보안성'이라며 "오픈소스라 자칫 간과할 수 있는 부분이지만 레드햇은 이를 갖고 있다. 최근 불거진 SSL 배쉬 버그를 레드햇이 가장 빨리 대응한 것도 같은 맥락인 것"이라고 국내 보안전문가가 말했다.
마지막으로 "Openstack을 도입하는 이유는 비용절감의 측면이 가장 크지만 기업 스스로 Openstack을 이해하려는 자세로 접근하는 것이 가장 중요하다"라고 전했다.
'클라우드'가 등장하고 필요성이 대두된 것은 이 같은 이유에서다. 가상화만으로는 이를 감당할 수 없다. 마음대로 서버를 늘렸다가 줄이거나 할 수 있는 것도 아니기 때문이다. 반대로 클라우드는 필요시 마음대로 서버를 늘리고 줄일 수 있다. 그렇다고 당장 클라우드로 바꾸기에도 쉽지 않다. 아키텍처 자체가 달라서다.
서비스를 예로 들어보자. 트위터가 최근 모든 트윗을 검색할 수 있도록 인덱스 작업을 완료했다고 발표했다. 일주일 간의 트윗은 데이터센터의 SSD로, 오래된 트윗일수록 SATA 등 다른 영역에 분산 보관한다.
Openstack 사이트의 다큐먼트 메뉴의 Red Hat Enterprise Linux 7 및 CentOS 7을 위한 설치 가이드에서 리눅스 경험이 있는 Openstack의 새로운 사용자에게 적합한 기능 예제 아키텍처를 사용하여 주요 Openstack 서비스들을 단계별로 배포하는 것을 가져왔다:
Openstack 서비스의 기본 설치, 구성, 운용, 문제 해결에 익숙해진 후 제품에서 사용할 아키텍처를 사용하여 배포할 수 있는 다음 단계를 고려해야 한다.
성능과 중복 요구사항을 충족하도록 필요한 코어와 부가 서비스를 결정하고 구현함.
방화벽, 암호화, 서비스 정책 등의 방법을 사용하여 보안을 강화시킴.
자동 배포와 Production 환경 관리를 위해 Ansible, Chef, Puppet, Salt와 같은 배포 툴을 사용함.
특히, 다음 섹션에서는 Application에 Openstack과 같은 프라이빗(Private) 클라우드를 구축하는 복잡한 작업을 자동화하기 위해 설정 관리에 대한 아이디어 및 설정 관리 툴로 Anisible을 통해 다수의 클라우드 환경의 자원을 일괄관리하고 그 과정 중에서의 보안수준을 확보하려고 한다.
예제 아키텍처에서는 기본 virtual machine 또는 인스턴스를 작동할 수 있는 최소 두 노드 (호스트)가 필요하다. 추가로 블록 스토리지와 오브젝트 스토리지를 구성하기 위해선 추가 노드가 필요하다. 다음과 같이 예제 아키텍처는 최소한의 Production 아키텍처와는 다르다:
네트워킹 에이전트는 최소 하나 이상의 네트워크 노드가 아닌 컨트롤러 노드 상에 상주함.
셀프서비스 네트워크에 대한 오버레이(터널) 트래픽은 전용 네트워크 대신 관리 네트워크를 이용하여 통신함.
Production 아키텍처에 대한 자세한 정보는 Architecture Design Guide, OpenStack Operations Guide, OpenStack Networking Guide를 확인한다.
예제 아키텍처에서는 다음 네트워크를 사용한다고 가정한다:
관리: 10.0.0.0/24 대역, 게이트웨이 10.0.0.1 해당 네트워크는 패키지 설치, 보안 업데이트, DNS(도메인 네임 서비스 서버) 및 NTP(네트워크 시간 동기화 프로토콜 서버) 등의 관리 목적을 위해 모든 노드에 인터넷 액세스를 제공하는 게이트웨이를 필요로 한다.
게이트웨이 203.0.113.1을 사용하여 203.0.113.0/24 대역인 프로바이더 네트워크를 관리한다. 해당 네트워크는 OpenStack 환경에서 인터넷 액세스를 제공하기 위한 게이트웨이를 필요로 한다.
해당 범위 및 게이트웨이를 특정 네트워크 인프라에서 동작하도록 하기 위해 수정 가능하다. 네트워크 인터페이스 이름은 배포판에 따라 다양하다. 전통적으로 인터페이스들은 “eth”에 순차적인 번호를 붙여 사용한다.(CentOS 7.X부터는 enp0s) 모든 배포판을 수용하기 위해, 본 가이드에서는 단순하게 첫 번째 인터페이스를 가장 낮은 번호로, 그리고 두 번째 인터페이스를 가장 높은 번호로 지정한다.
예제 아키텍처에서 제공하는 구성과 동일하게 사용하고자 하는 경우가 아니라면 해당 단계에서 대상 환경에 맞도록 네트워크를 수정해야 한다. 또한 각 노드는 IP 주소뿐만 아니라 다른 노드들을 이름으로 변환해야 한다. 예를 들면,
controller
이름은 컨트롤러 노드의 관리 인터페이스에 해당하는 IP 주소인
10.0.0.11
로 변환이 이루어져야 한다.
많이 공개된 Openstack 네트워크 구성도를 보면 크게 아래와 같이 3가지 네트워크로 구성된다.
Management Network : 관리용 네트워크. 각 컴포넌트(Nova, Neutron 등)가 서로 API를 호출하는 데 사용됨.
Tunnel Network : vm instance 간 네트워크를 구축하는 데 사용되는 네트워크입니다. GRE, VXLAN 등의 기술이 사용됨. Overlay Network라고도 부름.
External Network : vm instance 가 인터넷과 통신하기 위한 네트워크.
Host 머신에 Openstack을 설치하기 위한 인터넷 연결으로는 별도의 네트워크를 연결하거나, Management Network를 인터넷에 연결되도록 구성한다.
구성도 1. 을 보면 Openstack 설치 가이드에서는 Management Network와 Provider Network 이렇게 두 가지의 네트워크로만 구성하고 있다. Provider Network는 무엇이고 Tunnel / External Network는 어디로 간 것일까? 이것은 설치 가이드에 나오는 Provider / Self-Service Network에 대해 먼저 이해하고 각각의 네트워크를 어떤 용도로 사용하는지 파악하면 알 수 있다.
설치 가이드 문서의 Neutron 설정 부분에서 네트워킹 서비스를 설정하기 위해서 2가지 옵션 중 한 가지를 선택해야 한다.
Provider Network : Openstack을 서비스하는 사람이 구축한 네트워크가 vm instance에 할당되는 네트워크다. 서비스하는 사람이 ‘제공’ 하는 네트워크라는 의미에서 Provider Network라고 한다. 이 네트워크는 인터넷에 연결이 되어있는 네트워크다. (그렇다고 공인 IP 주소를 반드시 가진다는 것은 아니다. 왜냐하면 외부의 실제 IP 대역에서는 호스트 사이트의 사설 IP 주소-이것을 CISCO 네트워크 용어로 인사이드 글로벌 IP라고 함. 역주-이기 때문이다.)
Self-Service Network : Openstack을 사용하는 사용자(Tenant)가 직접 자신만의 vm instance를 위한 네트워크를 구축할 수 있는 네트워크다. 이 네트워크는 provider network를 기반으로 GRE, VXLAN 등의 (VPN과 유사한) 터널링을 통해 구축된다.
이 두 가지 옵션과 위에서 설명한 3가지 네트워크 종류와의 연관성을 정리하면 다음과 같다.
Provider Network = External Network
Self-Service Network = Tunnel Network + External Network
이제 Openstack을 설치하기 위해, Virtualbox로 네트워크를 구성해보도록 하자.
Internet: virtualbox의 NAT 인터페이스, Openstack 설치용 네트워크, IP : Controller / Compute 가 동일하게 10.0.2.15
Provider Network: virtualbox의 bridge 인터페이스, 공유기와 연결된 인터넷을 사용할 수 있는 네트워크, Controller IP : 할당하지 않음, Compute IP : 할당하지 않음, IP 대역 : 172.32.0.0/24
Management Network: virtualbox의 host-only network, host에서 virtualbox의 vm에 접속할 수 있는 네트워크, Controller IP : 192.168.56.101/24, Compute IP : 192.168.56.102/24
Neutron 설정은 Mitaka 설치 가이드의 Self-Service Network 부분대로 진행하였지만, 기록을 위해 주요 설정 부분은 표기하겠다.
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge] physical_interface_mappings = provider:eth1 [vxlan] enable_vxlan = True local_ip = 192.168.56.101 l2_population = True
[linux_bridge] physical_interface_mappings = provider:eth1 [vxlan] enable_vxlan = True local_ip = 192.168.56.101 l2_population = True
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge] physical_interface_mappings = provider:eth1 [vxlan] enable_vxlan = True local_ip = 192.168.56.102 l2_population = True
Openstack 네트워크 환경 구성 시, 일단 CLI 모드에서 Flavor 및 Image 생성부터 인스턴스 시작 및 네트워크 구성을 하기보다는 대시보드(프로젝트명 horizon)에서 일괄 작업을 하는 것이 편리하다. 그리고 Security group 생성 시에 외부에서 내부의 인스턴스(가상 머신)로의 SSH 원격 접속을 하기 위한 설정 및 Key pair를 구성하는 것은 CLI에서 하는 것이 대시보드에서 하지 못하는 기능을 구현할 수 있다.
출처
1) 디지털 투데이 (DigitalToday)(http://www.digitaltoday.co.kr), '오픈스택, 기업들에게 어떤 의미인가'
http://www.ittoday.co.kr/news/articleView.html?idxno=54784
2) OpenStack Installation Tutorial for Red Hat Enterprise Linux and CentOS
https://docs.openstack.org/ko_KR/
3) 작은 병아리의 꿈, Openstack Network 구축 과정 이해 – LinuxBridge