'Juno'에 해당되는 글 7건

  1. 2015.07.07 OpenStack M 릴리즈 네이밍을 반대합니다.
  2. 2015.06.29 OpenStack DVR - SlideShare
  3. 2015.06.29 OpenStack DVR – DNAT Traffic
  4. 2015.06.29 OpenStack DVR – SNAT Traffic
  5. 2015.06.19 OpenStack DVR Overview
  6. 2015.06.19 OpenStack DVR - East/West Traffic Flow
  7. 2015.06.19 OpenStack Juno Install using DevStack

OpenStack M 릴리즈 네이밍을 반대합니다.

OpenStack/Overview_OpenStack 2015.07.07 21:57

OpenStack M 릴리즈 네임을 반대합니다.


OpenStack은 디자인 서밋이 있는 국가의 도시/도로명을 따서 abc 순으로 네이밍합니다.


2015년 가을에 일본 동경에서 OpenStack 디자인 서밋이 개최되며 알파벳 순서상 'M'으로 시작되어야 합니다.


OpenStack에서는 이에 투표를 실시하였습니다.


그런데...



투표 결과는 다음과 같았습니다.



OpenStack의 'M' 릴리즈 명칭은 'Mita' 였습니다.


http://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_4983776e190c8dbc




그런데...


이상한 일이 일어났습니다.



법적인 이유로 이름을 바꾸려고 합니다.



투표한 결과를 뒤로 하고 'Meiji'로 명칭을 수정하였습니다.


Mita 와 Minato는 법적인 문제가 있다는 이유로 말입니다.


https://wiki.openstack.org/wiki/Release_Naming




왜 그럴까요?


왜 바꾸는 것 일까요?



OpenStack은 비영리 단체입니다.



OpenStack은 OpenSource를 기반으로 구성된 비영리 단체입니다.


그 어떤 정치적/역사적 문제가 개입되면 안됩니다.


일본에서 Meiji는 왕조일지 몰라도 우리에게 그 이름은 침략자이고 약탈자 였습니다.


그 어떠한 행위로도 용서할 수 없는 이름이었습니다.


당장 'Meiji' 명칭을 교체하여 주기 바랍니다.

'OpenStack > Overview_OpenStack' 카테고리의 다른 글

OpenStack 'Mitaka'  (0) 2015.07.15
OpenStack M naming 철회  (0) 2015.07.09
OpenStack M 릴리즈 네이밍을 반대합니다.  (0) 2015.07.07
OpenStack DVR Overview  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack DVR - SlideShare

OpenStack/Research_OpenStack 2015.06.29 15:04




http://www.slideshare.net/uni2u/open-stack-dvr-deep-dive


'OpenStack > Research_OpenStack' 카테고리의 다른 글

OpenStack with networking-sfc (devstack)  (6) 2016.03.23
OpenStack REST 확인  (0) 2015.10.19
OpenStack DVR - SlideShare  (0) 2015.06.29
OpenStack DVR – DNAT Traffic  (0) 2015.06.29
OpenStack DVR – SNAT Traffic  (0) 2015.06.29
OpenStack DVR - East/West Traffic Flow  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack DVR – DNAT Traffic

OpenStack/Research_OpenStack 2015.06.29 14:57
OpenStack DVR DNAT Traffic Flow


이번 포스팅에서는 Neutron의 주요 서비스 중 DNAT 서비스에 대하여 알아보고자 한다.

DNAT 는 Destination NAT의 약자로서 우리나라 말로 억지로 번역하자면 ‘수신측 주소 변환’ 정도가 되겠다.

어려운 말은 둘째로 치고 쉽게 설명하자면…

OpenStack에서는 Floating IP를 생각하면 되겠다.

Floating IP는 이미 잘 알고 있는 것 처럼 VM에 Public Network을 사용할 수 있도록 IP를 부여하는 것이다.

VM이 외부와 네트워킹을 할때에 공용 IP를 각각 할당받아서 사용하는 방법이다.

즉, 여러 VM이 각각 하나씩 공용 IP를 할당받아 사용하는 것이 되겠다.

 

OpenStack Topology – DNAT (Floating IP)



OpenStack의 Horizon을 통하여 Public Network 및 Virtual Network을 생성하고 DVR을 만들어 통신한다.

OPENSTACK DVR – DNAT

또한 각 VM은 Floating IP를 할당 받는다.

OPENSTACK – DNAT FLOATING IP

 

DVR 생성



DVR은 Private Network(net01, net02)에 생성된 VM(vm01, vm02)들이 외부 네트워크에 대한 IP를 각각 부여받아 외부 네트워크를 사용하는 경우에 Traffic 처리를 담당하게 된다.

COMPUTE NODE – DNAT NAMESPACE
위 그림에서 Compute Node에 Router Namespace 및 FIP Namespce가 생성된 것을 확인할 수 있다.
  • Router Namespace: qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501
  • FIP Namesapce: fip-62e976f8-2dc2-48af-950f-925d52b4e43b
여기에서 fip로 시작되는 것이 DNAT에 대한 Namespace, 즉 FloatingIP(FIP) Namespace이다.
Router Namespace인 qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501의 인터페이스를 살펴보면 다음과 같다.

COMPUTE NODE – ROUTER NAMESPACE

상기 그림에서 확인할 수 있는것 처럼 rfp-2fa96ed7-7이라는 인터페이스가 생성된다.
  • rfp-2fa96ed7-7: 129.254.171.228 (Floating IP), 6e:57:de:10:ab:c1
해당 인터페이스는 Floating IP를 부여받은 인터페이스 이다.
FIP Namespace인 fip-62e976f8-2dc2-48af-950f-925d52b4e43b의 인터페이스를 살펴보면 다음과 같다.


COMPUTE NODE – FIP NAMESPACE
상기 그림처럼 FIP Namespace에는 fpr-2fa96ed7-7 및 fg-8ff046eb-25 인터페이스가 생성된다.
  • fpr-2fa96ed7-7
    • rfp-2fa96ed7-7과 veth pair
  • fg-8ff046eb-25
    • external device 인터페이스
Router Namespace에 적용된 Rule을 살펴보면 다음과 같다.
COMPUTE NODE – ROUTER NAMESPACE RULE
private IP에 대한 lookup 테이블이 설정되며 해당 테이블에는 rfp 인터페이스(Router Namespace)에 대한 Rule이 설정된다.
FIP Namespace에 적용된 Rule을 살펴보면 다음과 같다.
COMPUTE NODE – FIP NAMESPACE RULE
External Device로 부터 발생하는 패킷에 대한 Rule이 적용되어 있다.

 

DNAT (Floating IP) Traffic Flow



상기 토폴로지에서 DVR은 External Network(public) 과 Private Network(net01: 10.0.0.0/24, net02: 20.0.0.0/24)를 연결하고 있다.
Private Network에 연결된 각 VM(vm01, vm02)은 모두 Floating IP를 할당 받았다.
이렇게 Floating IP를 할당 받은 경우 각 VM에서 외부 네트워크와 통신을 하는데 DNAT를 사용한다.

DNAT TRAFFIC
위 그림에서 파란색으로 표기된 Flow가 바로 DNAT Flow 이다.
이미 East/West 및 SNAT Flow에서 확인한 것 처럼 Flow 는 대략 예상할 수 있을 것이다.
예를 들어 vm02가 외부 네트워크와 통신을 시도하는 경우 다음과 같은 순서를 따르게 된다.
vm02에서 Google.com 으로 통신을 시도하는 경우 vm02는 이미 Floating IP를 가지고 있기 때문에 Router Namespace에서 해당하는 Rule을 매칭한다.
  • qrouter-2fa96ed7-795c-441c-80a8-23ad36af8501의 rfp-2fa96ed7-7 인터페이스
  • private IP에 대한 lookup 테이블: default via <IP> dev rfp-2fa96ed7-7
FIP Namespace는 Router Namespace의 rfp-xxx 인터페이스와 veth pair를 이루는 fpr-xxx 인터페이스가 있으므로 이에 대한 Rule을 확인한다.
  • 62e976f8-2dc2-48af-950f-925d52b4e43b의 fpr-2fa96ed7-7 인터페이스
이때 패킷의 src MAC은 rfp-2fa96ed7-7의 MAC으로 dest MAC은 fpr-2fa96ed7-7의 MAC으로 src IP는 vm02의 floating IP로 변환된다. (DNAT)
FIP Namespace는 External Device에 대한 인터페이스인  fg-8ff046eb-25를 통하여 외부 네트워크와 통신을 완성한다.
이때 src MAC은 fg-8ff046eb-25의 MAC으로 dest MAC은 default GW MAC으로 변환된다.


'OpenStack > Research_OpenStack' 카테고리의 다른 글

OpenStack with networking-sfc (devstack)  (6) 2016.03.23
OpenStack REST 확인  (0) 2015.10.19
OpenStack DVR - SlideShare  (0) 2015.06.29
OpenStack DVR – DNAT Traffic  (0) 2015.06.29
OpenStack DVR – SNAT Traffic  (0) 2015.06.29
OpenStack DVR - East/West Traffic Flow  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack DVR – SNAT Traffic

OpenStack/Research_OpenStack 2015.06.29 14:49
OpenStack DVR SNAT Traffic Flow


이번 포스팅에서는 Neutron의 주요 서비스 중 SNAT 서비스에 대하여 알아보고자 한다.

SNAT 는 Source NAT의 약자로서 우리나라 말로 억지로 번역하자면 ‘송신측 주소 변환’ 정도가 되겠다.

어려운 말은 둘째로 치고 쉽게 설명하자면…

SNAT와 반대되는 개념이 DNAT라고 하는 것인데 OpenStack에서는 Floating IP를 생각하면 되겠다.

Floating IP는 이미 잘 알고 있는 것 처럼 VM에 Public Network을 사용할 수 있도록 IP를 부여하는 것인데…

OpenStack에서는 이런 방법 말고도 다른 방법으로 VM이 외부 네트워크를 사용할 수 있다.

어떤 방법이냐고 하면…

VM이 외부와 네트워킹을 할때에 공용 IP 하나를 사용하는 방법이다.

즉, 여러 VM이 공용 IP 하나를 공유하여 사용하는 것이 되겠다.

이와 같이 공용 IP를 만들어 VM들이 공유하는 방법으로 외부와 네트워킹을 하는 것을 SNAT라고 한다.

# SNAT를 사용하면 VM은 외부로 접근이 가능하지만 외부에서 VM으로의 접근은 할 수 없다.

# SNAT는 OpenStack의 Network Node를 사용한다.


OpenStack Topology – SNAT



OpenStack의 Horizon을 통하여 Public Network 및 Virtual Network을 생성하고 DVR을 만들어 통신한다.

OpenStack DVR - SNAT Topology

External Network(public) 및 Private Network(net01, net02)를 생성한 뒤 External Network와 Private Network 사이에 DVR을 생성하면 Interface가 2개씩 생성된다.
왜 2개의 인터페이스가 생성될까?
이유는 하나는 Router Namespace에 대한 인터페이스이고 하나는 SNAT를 위한 인터페이스이다.
즉, External Network와 연결된 Private Network 사이의 DVR은 SNAT 만을 위한 인터페이스를 생성하며 이를 통하여 Private Network에 위치하는 VM이 External Network를 사용할 수 있다.

L3_agent.ini

# SNAT에 대한 설정은 Network Node의 l3_agent.ini에서 agent_mode=dvr_snat 로 설정한다.

 

DVR 생성



DVR은 Private Network(net01, net02)에 생성된 VM(vm01, vm02)들이 외부 네트워크를 사용하는 경우에 Traffic 처리를 담당하게 된다.

VM 사이의 트래픽 처리는 앞서 East/West Traffic에서 설명하였다.

NETWORK NODE – SNAT/ROUTER NAMESPACE

위 그림에서 네트워크 노드에 생성된 인터페이스를 확인하면 SNAT 및 Router Namespace가 생성된 것을 확인할 수 있다.
  • SNAT Namespace: snat-cc857096-450e-4c57-9ed1-38a90fb6a85e
  • Router Namespace: qrouter-cc857096-450e-4c57-9ed1-38a90fb6a85e
생성된 SNAT Namespace의 인터페이스 목록을 살펴보면 각 VM들에서 발생한 SNAT Traffic에 대한 인터페이스(sg-xxx, sg-yyy) 및 External Network Device에 대한 인터페이스(qg-xxxx)를 확인할 수 있다.
  • SNAT Interface: 토폴로지에서 확인한 2개의 인터페이스 중 SNAT를 위한 인터페이스
    • sg-748e9c85-fb: net01 네트워크를 사용하는 VM에 대한 SNAT 인터페이스(10.0.0.2/24, fa:16:3e:bd:29:ef)
    • sg-a79f8f6f-15: net02 네트워크를 사용하는 VM에 대한 SNAT 인터페이스(20.0.0.2/24, fa:16:3e:d5:54:d4)
    • qg-80252773-66: sg-xxx 인터페이스와 연결된 External Device 인터페이스로서 sg-xxx 로 부터 수신한 트래픽을 해당 인터페이스로 전달
VM이 위치하는 컴퓨트 노드의 Router Namespace를 살펴보면 다음과 같다.

COMPUTE NODE – ROUTER NAMESPACE

위 그림에서 확인할 수 있는 것 처럼 Compute Node의 Router Namespace에는 SNAT 및 East/West Traffic에 대한 Rule이 이미 설정되어 있음을 알 수 있다.
  • Router Namespace: qrouter-cc857096-450e-4c57-9ed1-38a90fb6a85e
    • Network Node의 Router Namespace와 동일
  • Rule
    • default via 10.0.0.2 dev qr-36ca57b4-23
    • default via 20.0.0.2 dev qr-9d513ed6-af
# 이를 통하여 동일한 Rule이 Network 및 Compute의 Router Namespace에 생성됨을 알 수 있다.

NETWORK NODE – ROUTER NAMESPACE

 

SNAT Traffic Flow



상기 토폴로지에서 DVR은 External Network(public) 과 Private Network(net01: 10.0.0.0/24, net02: 20.0.0.0/24)를 연결하고 있다.

이러한 경우 각 Private Network에 생성된 VM(vm01: 10.0.0.3, vm02: 20.0.0.3)들은 SNAT을 통하여 External Network와 통신할 수 있다.
SNAT을 위한 SNAT Namespace는 Network Node에 생성되며 Network Node의 br-ex 브릿지에 부여한 External IP를 VM들이 공유할 수 있도록 Source NAT 서비스를 제공한다.
즉, Private Network에 연결된 VM이 External IP 없이 External Network와 통신하기 위해서는 반드시 네트워크 노드를 사용하여야 하며 네트워크 노드에 부여된 External IP를 공유하여야 한다. (SNAT Traffic)

SNAT Traffic

위 그림으로 설명하자면…
vm02(20.0.0.3)가 External IP 없이 외부 네트워크와 통신을 하고자 한다.
vm02에서 ping google.com 을 하였을 경우를 가정해보자.
최초 vm02에서 발생한 패킷은 Compute Node의 Router Namespace에 도달하여 매칭 정보를 확인하게 된다.
Router Namespace에는 상기 토폴로지에서 확인할 수 있는 2개의 포트에 대한 Rule 정의가 되어 있다.
  • East/West 에 대한 Rule
  • SNAT에 대한 Rule
목적지인 google.com에 대한 Rule은 East/West Rule에서 찾을 수 없기 때문에 SNAT Rule과 매칭된다.
즉, Network Node의 SNAT Namespace로 연결하는 Rule이 매칭된다.
이때 SNAT 인터페이스에 대한 기본 경로가 src MAC(qr-9d513ed6-af의 MAC), dest MAC(sg-a79f8f6f-15의 MAC)에 설정된다.
이후 Compute Node 와 Network Node 사이의 Overlay Network 구간에서 src MAC은 Compute Node의 MAC으로 변환이 되어 VxLAN 또는 GRE 형식으로 이동한다.
Network Node에서 해당 패킷을 받으면 Overlay 구간의 src MAC을 제거하고 dest MAC(sg-a79f8f6f-15의 MAC)을 확인한 뒤 SNAT Namespace와 매핑한다.
SNAT Namespace에서는 External Network Device인 qg-80252773-66 인터페이스가 존재하기 때문에 src MAC은 qg-80252773-66의 MAC으로 dest MAC은 defaule GW MAC으로 src IP는 qg-80252773-66의 IP로 Source NAT 를 시행하고 통신한다.
이때 SNAT(Source NAT) 서비스가 실행되어 External Network와 통신하게 된다.


'OpenStack > Research_OpenStack' 카테고리의 다른 글

OpenStack with networking-sfc (devstack)  (6) 2016.03.23
OpenStack REST 확인  (0) 2015.10.19
OpenStack DVR - SlideShare  (0) 2015.06.29
OpenStack DVR – DNAT Traffic  (0) 2015.06.29
OpenStack DVR – SNAT Traffic  (0) 2015.06.29
OpenStack DVR - East/West Traffic Flow  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack DVR Overview

OpenStack/Overview_OpenStack 2015.06.19 17:15

What is OpenStack DVR?

DVR... 무슨 의미니?


OpenStack의 10번째 버전인 JUNO 가 Release된 지도 꽤 시간이 흘렀다.


얼마전 Kilo가 Release 되었는데 OpenStack의 Release 속도를 보면 기겁할 정도다.


OpenStack Juno 버전에서 소개된 DVR에 대해서 알아보고자 한다.



DVR (Distributed Virtual Router)



네트워크 노드에 집중되었던 가상 라우터를 가상 머신이 생성되는 컴퓨트 노드에 분산배치하여 네트워크 노드로의 트래픽 집중을 해결하고 네트워크 노드에 장애가 발생하는 경우 VM 간 또는 외부 통신을 일정부분 보완하는 내용이다.

요컨데, 네트워크 노드의 단일 장애점(SPOF: Single Point Of Failure) 및 트래픽 집중 문제를 해결하기 위한 기술이다.



DVR 관련 설치 및 설정


각 컴퓨트 노드에 가상 라우터가 분산배치 되어야 하기 때문에 네트워크 노드 및 컴퓨트 노드에 L3 Agent가 설치된다.

Juno 버전을 다운로드 받으면 자연스럽게 설치되는 내용이다.

DVR을 활성화 하기 위하여 설정을 하여야 하는데 크게 3부분으로 나뉜다.


  • L3 Plugin
    • Neutron의 기본 설정 파일
    • neutron.conf 에서 router_distributed 설정 값을 True
  • L3 Agent
    • l3_agent.ini 에서
    • 네트워크 노드인 경우: agent_mode 설정 값을 dvr_snat 으로 설정
    • 컴퓨트 노드인 경우: agent_mode 설정 값을 dvr로 설정
    • router_delete_namespace 설정 값을 True로 설정
  • L2 Agent
    • ml2_conf.ini 에서
    • enable_distributed_routing 설정 값을 True로 설정
    • l2_population 설정 값을 True로 설정
    • 테넌트 네트워크 유형을 VxLAN 또는 NVGRE로 설정



Namespace


DVR 환경은 Linux Namespace를 활용한다.

네트워크 및 컴퓨트 노드에 각각 설치된 L3 Agent에 의해 다양한 Namespace가 생성된다.


<OpenStack DVR Overview - Namespace>


임의의 테넌트에 대해 하나의 가상 라우터가 생성되는 경우 모든 네트워크 및 가상 머신이 생성되는 컴퓨트 노드에 가상 라우터에 대한 Router Namespace 가 생성된다.

아래 그림에서

  • Router Namespace: qrouter-3d14a2af-cf37-46d5-88a8-926aee62efea
  • 가상 인터페이스: qr-xxx


<OpenStack DVR Overview - Router Namespace>


이 Router Namespace 내부에 서브넷 간 라우팅을 위한 라우팅 테이블이 설정된다.


<OpenStack DVR Overview - ARP Table>


가상 네트워크에 VM이 생성되면 VM이 속한 컴퓨트 노드 및 네트워크 노드에 동일한 Router Namespace가 생성된다.

이러한 경우 동일한 테넌트의 서로 다른 서브넷 간의 연결은 네트워크 노드의 Router Namespace를 경유하지 않고 컴퓨트 노드의 Router Namespace를 통해 컴퓨트 노드 간 직접 통신을 한다. (east-west Routing)

DVR 환경에서는 하나의 가상 라우터에 대하여 SNAT Namespace가 네트워크 노드에 추가된다.

아래 그림에서

  • SNAT Namespace: snat-cc857096-450e-4c57-9ed1-38a90fb6a85e
  • 가상 인터페이스: sg-xxx (snat interface) / qg-xxx (External Device)


<OpenStack DVR Overview - SNAT Namespace>


SNAT Namespace는 VM이 공인 IP(즉, Floating IP)를 가지지 않는 경우 외부에 접속을 하기 위하여 소스 네트워크 주소 변환(SNAT: Source NAT)을 진행하며 이를 위한 네트워크 주소 변환 규칙이 정의되어 있다.

 DVR 환경에서 VM이 Floating IP를 갖는 경우 VM이 생성된 컴퓨트 노드에 목적지 주소 변환(DNAT: Destination NAT)을 위한 FIP Namespace가 생성된다.

아래 그림에서

  • FIP Namespace: fip-62e976f8-2dc2-48af-950f-925d52b4e43b
  • DVR_fip-namespace.png


FIP(Floating IP) Namespace는 컴퓨트 노드에 VM이 Floating IP를 갖는 경우 생성되는데 가상 포트를 통하여 Router Namespace와 연결된다.

즉, VM에 할당된 Floating IP에 대한 모든 트래픽을 Router Namespace로 전달하는 테이블을 가지고 있다.

Floating IP에 해당하는 DNAT 기능은 FIP Namespace가 아닌 Router Namespace에서 담당한다.

특징적으로 DVR 환경에서 생성한 가상 라우터는 하나의 서브넷에 대하여 2개의 포트가 생성된다.


<OpenStack DVR Overview - Topology>


하나는 서브넷의 게이트웨이 포트인 qr-xxx 로서 Router Namespace에서의 라우팅을 위한 포트하고 다른 하나는 sg-xxx 로서 SNAT Namespace에서 할당하는 포트이다.



앞으로 설명


앞으로 DVR 환경에서의 동작 방식을 다음과 같은 순서로 포스팅 할 것이다.




'OpenStack > Overview_OpenStack' 카테고리의 다른 글

OpenStack 'Mitaka'  (0) 2015.07.15
OpenStack M naming 철회  (0) 2015.07.09
OpenStack M 릴리즈 네이밍을 반대합니다.  (0) 2015.07.07
OpenStack DVR Overview  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack DVR - East/West Traffic Flow

OpenStack/Research_OpenStack 2015.06.19 16:30

OpenStack DVR - East/West Traffic


OpenStack의 Neutron은 VM간의 통신을 위한 서비스를 제공한다.


이번 포스팅에서는 VM간의 통신 중 East/West Traffic을 살펴보고자 한다.


East/West Traffic은 데이터 센터에서 같은 Tenant에 속하는 2개 이상의 Segment (즉, 서로다른 서브넷 네트워크)에 존재하는 VM 사이의 통신에서 발생한다.


좀 더 쉽게 이야기 하자면


OpenStack을 통하여 서로다른 서브넷 네트워크를 2개 이상 생성하고 각 서브넷마다 VM이 동작한다고 할 경우 DVR은 서로 다른 서브넷 네트워크를 연결하는 역할을 담당한다.


이 경우에 DVR로 연결된 서로 다른 서브넷 네트워크에 존재하는 VM 사이에 Traffic은 모두 DVR에서 관리한다. (East/West Traffic)



OpenStack Topology - East/West case



OpenStack의 Horizon을 통하여 서로 다른 서브넷을 생성하고 각 서브넷 마다 VM을 할당한 뒤 DVR을 만들어 통신한다.


<OpenStack DVR - East/West Traffic Topology>


이때 생성되는 Router는 모두 DVR 이다. (Neutron.conf 등에 이미 설정하였다.)



DVR 생성


DVR은 VM이 생성되는 Compute Node에 생성되어 Traffic 처리를 담당하게 된다.


<OpenStack DVR - Compute Node 1>


<OpenStack DVR - Compute Node 2>


상기 그림과 같이 VM이 생성된 Compute Node(node01/node02)의 DVR을 확인하면 모두 동일함을 확인할 수 있다.

즉, OpenStack에서 Router를 생성하면 DVR이 생성되는 Compute Node에서는 Router Namespace를 활용하여 interface를 생성한다. (해당 interface에 대한 MAC/IP등의 정보를 서로 공유하여 동일하게 생성)


<OpenStack DVR Namespace - Compute Node 1>


<OpenStack DVR Namespace - Compute Node 2>


상기 그림에서 qrouter-3d14a2af-cf37-46d5-88a8-926aee62efea는 node01/node02에 동일하게 생성되었으며 인터페이스에 설정된 IP/MAC 등도 동일하다. (qr-xxxx 확인)

또한 이렇게 생성된 DVR Namespace는 서브넷 간의 통신을 위한 Table이 설정되어 있다.


<OpenStack DVR ARP Table - Compute Node 1>

Compute Node 01의 Table은

  • DHCP: 100.0.0.3
  • Compute Node 01에 생성된 VM: 100.0.0.2 / 100.0.20.2
  • Compute Node 02에 생성된 VM: 100.0.10.2


<OpenStack DVR ARP Table - Compute Node 2>

Compute Node 02의 Table은

  • DHCP: 100.0.10.3 / 100.0.0.3
  • Compute Node 01에 생성된 VM: 100.0.0.2 / 100.0.20.2
  • Compute Node 02에 생성된 VM: 100.0.10.2


결과적으로 DVR이 생성된다는 것은 관련된 노드에 Namespace를 생성하고 Table이 구성된다는 것으로 생각할 수 있다.



East/West Traffic Flow



상기 Topology에서 vm03(100.0.20.2)은 Compute Node 02(node02)에 vm01(100.0.0.2), vm02(100.0.10.2)는 Compute Node 01(node01)에 생성되어 있다.

또한 DVR은 서로 다른 서브넷인 net01, net02, net03 을 걸쳐서 생성되어 있다.

이 경우 vm03에서 다른 VM(vm01, vm02)로 발생하는 Traffic은 DVR을 통하여 전달된다. (East/West Traffic)


<OpenStack DVR - East/West Traffic Flow>


위 그림으로 설명을 하자면...

vm03에서 vm02로 발생하는 Traffic은 vm03이 생성된 Compute Node의 Router Namespace(qrouter-3d14a2af-cf37-46d5-88a8-926aee62efea)에 도달하게 된다.

vm03이 존재하는 Compute Node의 Router에서는 도착한 패킷에 대하여 Table에 매칭되는 것이 있는지 확인하게 되는데 해당 Table에는 모든 VM들에 대한 Table이 이미 구성되어 있기 때문에 매칭 룰을 확인하게 된다.

즉, src (vm03) 및 dest (vm02)에 대한 매칭 rule이 존재하기 때문에 이를 참조한다. (qr-61134c0d-4d, fa:16:3e:12:37:77)

매칭 룰에 의하여 vm02의 Router Namespace의 interface에 대한 MAC이 설정된다. (qr-61134c0d-4d에 대한 vm02 Router Namespace의 MAC은 fa:16:3e:cb:59:c9, Compute Node 02 - DVR Namespace 참조)

매칭 룰에 의해 src의 MAC이 변경되면 그 이후 Overlay Network(VXLAN/GRE) 구간을 거치게 되는데 이 때의 src MAC은 Compute Node 02의 MAC 이다.

해당 패킷이 vm02가 존재하는 Compute Node 01에 도달하면 Overlay 구간의 src MAC을 벗겨내고 vm02와의 통신이 완료된다.

'OpenStack > Research_OpenStack' 카테고리의 다른 글

OpenStack with networking-sfc (devstack)  (6) 2016.03.23
OpenStack REST 확인  (0) 2015.10.19
OpenStack DVR - SlideShare  (0) 2015.06.29
OpenStack DVR – DNAT Traffic  (0) 2015.06.29
OpenStack DVR – SNAT Traffic  (0) 2015.06.29
OpenStack DVR - East/West Traffic Flow  (0) 2015.06.19
tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0

OpenStack Juno Install using DevStack

OpenStack/Install_OpenStack 2015.06.19 15:17

OpenStack Juno 버전 설치 - DevStack DVR 설정


이번 포스팅에서는 VirtualBox 기반으로 DevStack을 활용하려고 한다.



VirtualBox



VirtualBox를 통하여 3개의 VM을 생성한다.

VM은 각각 All-in-one Node, Network Node, Compute Node로 설치될 것이다.

VirtualBox VM 생성에 사용할 이미지는 ubuntu 14.04 Server 버전을 사용하였다.

네트워크는 호스트 전용 2개를 만들었으며 하나는 Management 다른 하나는 Tunnel 전용 포트로 사용할 것이다.



All-in-one Node

Controller Node 및 Compute Node가 하나의 VM에서 동작한다.

NIC는 다음과 같이 설정하였다.

  • eth0: 인터넷과 연결되는 IP로 NAT 설정
  • eth1: Management 포트, 호스트 전용
  • eth2: Tunnel 포트, 호스트 전용


Compute Node

NIC는 다음과 같이 설정하였다.


  • eth0: 인터넷과 연결되는 IP로 NAT 설정
  • eth1: Management 포트, 호스트 전용
  • eth2: Tunnel 포트, 호스트 전용


Network Node


NIC는 다음과 같이 설정하였다.


  • eth0: 인터넷과 연결되는 IP로 NAT 설정
  • eth1: Management 포트, 호스트 전용
  • eth2: Tunnel 포트, 호스트 전용



DevStack



모든 노드는 다음과 같이 업데이트 및 업그레이드를 시행하고 필요한 프로그램을 설치한다.



sudo apt-get update

sudo apt-get upgrade

sudo apt-get dist-upgrade

sudo apt-get install -y git vim


모든 노드에 DevStack Juno 버전을 설치한다.


git clone -b stable/juno https://github.com/openstack-dev/devstack.git



All-in-one Node


cd devstack

vim local.conf


[[local|localrc]]

DEST=/opt/openstack

DATA_DIR=$DEST/data

LOGFILE=$DATA_DIR/logs/stack.log

SCREEN_LOGDIR=$DATA_DIR/logs

VERBOSE=False


MYSQL_PASSWORD=openstack

RABBIT_PASSWORD=openstack

SERVICE_TOKEN=openstack

SERVICE_PASSWORD=openstack

ADMIN_PASSWORD=openstack


disable_service n-net

enable_service neutron

enable_service q-svc

enable_service q-meta

enable_service q-agt

enable_service q-dhcp

enable_service q-l3


# TODO: Set this host's IP

HOST_IP=<All-in-one Node Management IP>


[[post-config|$NEUTRON_CONF]]

[DEFAULT]

router_distributed=True


[[post-config|/$Q_PLUGIN_CONF_FILE]]

[ml2]

type_drivers=flat,vlan,vxlan

tenant_network_types=vxlan

mechanism_drivers=openvswitch,l2population


[ml2_type_vxlan]

vni_ranges=1000:1999


[ovs]

local_ip=$HOST_IP


[agent]

tunnel_types=vxlan

l2_population=True

enable_distributed_routing=True


[[post-config|$Q_L3_CONF_FILE]]

[DEFAULT]

agent_mode=dvr

router_delete_namespaces=True


[[post-config|$Q_DHCP_CONF_FILE]]

[DEFAULT]

dhcp_delete_namespaces=True


./stack.ch 



Compute Node


cd devstack

vim local.conf


[[local|localrc]]

DEST=/opt/openstack

DATA_DIR=$DEST/data

LOGFILE=$DATA_DIR/logs/stack.log

SCREEN_LOGDIR=$DATA_DIR/logs

VERBOSE=False


MYSQL_PASSWORD=openstack

RABBIT_PASSWORD=openstack

SERVICE_TOKEN=openstack

SERVICE_PASSWORD=openstack

ADMIN_PASSWORD=openstack


ENABLED_SERVICES=n-cpu,neutron,n-novnc,q-agt,q-l3,q-meta


# TODO: Set this host's IP

HOST_IP=<Compute Node Management IP>


# TODO: Set the controller's IP

SERVICE_HOST=<All-in-one Node Management IP>

MYSQL_HOST=$SERVICE_HOST

RABBIT_HOST=$SERVICE_HOST

Q_HOST=$SERVICE_HOST

GLANCE_HOSTPORT=$SERVICE_HOST:9292


VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP

VNCSERVER_LISTEN=0.0.0.0


[[post-config|/$Q_PLUGIN_CONF_FILE]]

[ovs]

local_ip=$HOST_IP


[agent]

tunnel_types=vxlan

l2_population=True

enable_distributed_routing=True


[[post-config|$Q_L3_CONF_FILE]]

[DEFAULT]

agent_mode=dvr

router_delete_namespaces=True


./stack.ch 



Network Node


cd devstack

vim local.conf


[[local|localrc]]

DEST=/opt/openstack

DATA_DIR=$DEST/data

LOGFILE=$DATA_DIR/logs/stack.log

SCREEN_LOGDIR=$DATA_DIR/logs

VERBOSE=False


MYSQL_PASSWORD=openstack

RABBIT_PASSWORD=openstack

SERVICE_TOKEN=openstack

SERVICE_PASSWORD=openstack

ADMIN_PASSWORD=openstack


ENABLED_SERVICES=neutron,q-agt,q-l3,q-meta


# TODO: Set this host's IP

HOST_IP=<Network Node Management IP>


# TODO: Set the controller's IP

SERVICE_HOST=<All-in-one Node Management IP>

MYSQL_HOST=$SERVICE_HOST

RABBIT_HOST=$SERVICE_HOST

GLANCE_HOSTPORT=$SERVICE_HOST:9292


[[post-config|/$Q_PLUGIN_CONF_FILE]]

[ovs]

local_ip=$HOST_IP


[agent]

tunnel_types=vxlan

l2_population=True

enable_distributed_routing=True


[[post-config|$Q_L3_CONF_FILE]]

[DEFAULT]

agent_mode=dvr_snat

router_delete_namespaces=True 


./stack.ch 


tags : DVR, Juno, OpenStack
Trackbacks 0 : Comments 0