OpenStack Class2014.12.15 22:00

안녕하세요~!!

지난시간까지는 컨트롤러 노드에 필요한 서비스들을 설치했었습니다. 어떤 서비스가 설치되었는지 기억이 나시나요? 인증서비스인 Keystone, 이미지 서비스인 Glance, 컴퓨트 서비스 Nova, 네트워킹 서비스 Neutron, 데쉬보드 서비스 Horizon, 블록스토리지 서비스 Cinder, 오브젝트 스토리지 서비스 Swift, 오케스트레이션 서비스 Heat, 텔레미터 서비스 Ceilometer를 설치했었습니다. 대부분의 서비스들이 Keystone에 서비스와 앤드포인트 URL을 등록하고 데이터베이스를 생성한 후 테이블을 생성했습니다. 그리고, 서비스를 설치한 후 환경설정을 했습니다. 

오늘은 네트워크 서비스의 핵심인 네트워크 노드를 설치해 볼까 합니다. 그럼, 지금부터 시작해 볼까요~~~

SDN을 위한 네트워크 노드를 설치해 보자

네트워크 노드는 Neutron을 이용해서 SDN(Software Defined Network)을 해야 할 경우에 필요합니다. 기존 레거시 네트워크(nova-network)를 이용할 경우에는 필요하지 않습니다. 앞서 Neutron 기본 플러그인 ML2을 사용해서 GRE 방식에 OpenvSwitch 메커니즘 드라이버를 사용하기로 했습니다. 그럼 지금부터 네트워크 노드에 필요한 서비스들을 하나씩 설치하겠습니다.

 

네트워크 인터페이스 설정

네트워크 노드는 모니터링 및 관리를 위한 IP, 컴퓨트 노드의 인스턴스들과 통신할 내부 IP, 인스턴스들이 외부 인터넷을 할 수 있도록 연결하기 위한 외부 IP로 이루어 집니다. 그래서 필요한 이더넷 카드는 총 3장입니다. 그럼 지금부터 네트워킹을 위한 IP 설정을 하겠습니다.

 

1.     eth0은 모니터링 및 관리용 IP, eth1은 내부용 IP, eth2는 외부용 manual IP로 설정합니다.

$ sudo vi /etc/network/interfaces

# The loopback network interface

auto lo

iface lo inet loopback

 

# The primary network interface

auto eth0

iface eth0 inet static

           address 10.10.15.21

           netmask 255.255.255.0

           gateway 10.10.15.1

        dns-servers 8.8.8.8

 

auto eth1

iface eth1 inet static

           address 10.10.10.21

           netmask 255.255.255.0

 

# The external network interface
auto eth2
iface eth2 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down

 

2.     /etc/hosts 파일에는 네트워크 노드, 컨트롤러 노드, 컴퓨트 노드의 관리용 IP를 등록합니다.

$ sudo vi /etc/hosts

# network

10.10.15.21       network

 

# controller

10.10.15.11       controller

 

# compute1

10.10.15.31       compute1

 

3.     네트워크 인터페이스 설정이 완료되면 우분투 서버에 적용할 수 있게 다음과 같이 네트워크 서비스를 재시작합니다.

$ sudo service networking stop && sudo service networking start


*** 지난번 블로그에 포스팅한 내용을 보셨나요? Ubuntu Server 14.04 LTS 버전에서 오픈스택을 설치하시는 분이시라면 당연히 위와 같이 설정을 해 주어야 합니다. 그런데, 14.04 LTS 버전에서 네트워크 설정시 문제가 발생한다고 하였습니다. 저는 그래서, Ubuntu 12.04 LTS 버전에서 설치를 했었습니다. 해결 방법은 아래 블로그에 포스팅해 드렸으니 참조하시길 바랍니다.


 [Ubuntu] Ubuntu 14.04와 13.10에 대한 Networking 서비스 차이


NTP 설치

컨트롤러 노드에 NTP(Network Time Protocol) 서버를 설치했다면 네트워크 노드와 컴퓨트 노드에는 클라이언트를 설치합니다.

 

1.     Ntp를 설치합니다.

$ sudo apt-get install ntp

 

2.     Ntpudate를 이용해서 컨트롤러 노드의 NTP 서버와 시간을 동기화합니다.

$ sudo ntpdate -u 10.10.15.11
28 May 10:35:31 ntpdate[2737]: step time server 10.10.15.11 offset -134035.065856 sec


3.     동기화된 시간은 다음과 같은 명령어로 하드웨어 시간인 BIOS 시간과 다시 동기화합니다.

$ sudo hwclock -w

 

데이터베이스 설치

컨트롤러 노드에서 이미 Mysql 서버를 설치했으므로 네트워크 노드와 컴퓨트 노드에서는 Python Mysql API만 설치하면 됩니다


1.   apt-get을 이용해서 Python Mysql API를 설치합니다.

$ sudo apt-get install python-mysqldb

 

Packages 설치

패키지는 컨트롤러 노드 뿐만 아니라 네트워크 노드, 컴퓨트 노드에도 반드시 설치해야 합니다. 만일 패키지 설치를 하지 않고 그냥 지나간다면 노드 간 버전이 맞지 않아 실행이 되지 않습니다. 패키지 설치 방법은 컨트롤러 노드와 동일합니다.

 

1.     apt-get을 이용해서 python-software-properties를 설치하고 레파지토리에 icehouse를 추가합니다.

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository cloud-archive:icehouse

** "오픈스택을 다루는 기술"에서는 IceHouse 버전으로 오픈스택을 설치했습니다. 그러나 얼마전에 Juno가 릴리즈되었죠~!! Juno를 설치하시고 싶으신 분들은 클라우드 아카이브를 설정하실때 아래와 같이 juno로 설정하시면 됩니다.

$ sudo add-apt-repository cloud-archive:juno  


2.     패키지가 설치되면 시스템 업데이트 및 업그레이드를 실행합니다.

$ sudo apt-get update

$ sudo apt-get dist-upgrade

 

3.     이때 네트워크 노드의 우분투 버전이 12.04라면 다음과 같이 백포트된 리눅스 커널을 설치해야 합니다. 리눅스 커널은 Neutron을 사용할 경우 설치하는 것이 좋고, Nova-network를 사용할 경우라면 설치하지 않아도 됩니다.

$ sudo apt-get install linux-image-generic-lts-saucy linux-headers-generic-lts-saucy

 

4.     패키지 설치와 시스템 업그레이드가 완료되면 시스템을 재부팅합니다.

$ sudo reboot

 


 

Neutron 네트워킹 설치

네트워크 노드는 컴퓨트 노드에 설치되는 모든 인스턴스의 IP를 관리하고 외부 인터넷과 연결될 수 있도록 관리합니다. 그럼 지금부터 Neutron을 설치하겠습니다.

 

1.     /etc/sysctl.conf 파일을 열어 다음과 같은 내용을 추가합니다. net.ipv4.ip_forward=1IP를 공유해서 포워딩이 가능하도록 설정하겠다는 뜻입니다. 또한 rp_filter는 패킷이 들어오는 인터페이스와 나가는 인터페이스가 같은지에 대한 검사 여부를 설정하는데 0으로 설정하면 검사를 하지 않겠다는 뜻입니다.

$ sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

 

2.     수정된 sysctl.conf 파일의 내용을 sysctl 명령을 이용해서 시스템에 적용합니다.

$ sudo sysctl –p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0

 

3.     ML2 플러그인과 OpenvSwitch, L3 에이전트, DHCP 에이전트를 설치합니다.

$ sudo apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent \n
openvswitch-datapath-dkms neutron-l3-agent neutron-dhcp-agent

 

4.     설치가 완료되면 /etc/neutron/neutron.conf 파일의 내용을 다음과 같이 수정합니다. 이때 들어가는 모든 IP는 컨트롤러 노드 IP나 도메인 주소를 입력합니다.

$ sudo vi /etc/neutron/neutron.conf [DEFAULT] ... auth_strategy = keystone ... rpc_backend = neutron.openstack.common.rpc.impl_kombu rabbit_host = 10.10.15.11 rabbit_password = rabbitpass ... core_plugin = ml2 service_plugins = router allow_overlapping_ips = True [keystone_authtoken] ... auth_uri = http://10.10.15.11:5000 auth_host =10.10.15.11 auth_protocol = http auth_port = 35357 admin_tenant_name = service admin_user = neutron admin_password = neutronpass

 

5.     /etc/neutron/l3_agent.ini 파일을 열어 다음과 같이 수정합니다. 우리는 OpenvSwitch을 메커니즘 드라이버로 사용할 것이기 때문에 인터페이스 드라이버는 OVSInterfaceDriver를 사용하겠다고 설정합니다.

$ sudo vi /etc/neutron/l3_agent.ini
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces = True

 

6.     /etc/neutron/dhcp_agent.ini 파일을 열어 다음과 같이 수정합니다.

$ sudo vi /etc/neutron/dhcp_agent.ini
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
use_namespaces = True

 

7.     /etc/neutron/metadata_agent.ini 파일에서 keystone으로 인증할 인증정보를 다음과 같이 수정합니다.

$ sudo vi /etc/neutron/metadata_agent.ini
[DEFAULT]
...
auth_url = http://10.10.15.11:5000/v2.0
auth_region = regionOne
admin_tenant_name = service
admin_user = neutron
admin_password = neutronpass
nova_metadata_ip = 10.10.15.11
metadata_proxy_shared_secret = metadatasecret

 

8.     /etc/neutron/plugins/ml2/ml2_conf.ini 파일에서 네트워크 타입과 메커니즘 드라이버 정보를 다음과 같이 입력합니다.

$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini [ml2] ... type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] ... tunnel_id_ranges = 1:1000 [ovs] ... local_ip = 10.0.10.21 #eth1에 해당하는 IP 입력 tunnel_type = gre enable_tunneling = True [securitygroup] ... firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True metadata_proxy_shared_secret = metadatasecret


9.     환경설정을 모두 마치면 openvswitch을 재시작합니다.

$ sudo service openvswitch-switch restart

 

10.  내부 인스턴스의 IP를 관리할 br-intOpenvswitch에 추가합니다.

$ sudo ovs-vsctl add-br br-int

 

11.  이번에는 외부 인터넷과 연결될 br-exopenvswitch에 추가합니다.

$ sudo ovs-vsctl add-br br-ex

 

12.  Openvswitchbr-ex를 추가했으면 br-ex에 물리 네트워크 카드를 연결해야 합니다. 네트워크 노드의 네트워크 IP를 설정할 때 인스턴스의 외부 인터넷 사용을 위해서 manual IP를 설정했었습니다. 그때 설정했던 manual IP의 네트워크 인터페이스를 다음과 같이 연결합니다.

$ sudo ovs-vsctl add-port br-ex eth2

 

13.  마지막으로 설치했던 neutron 서비스들을 재시작합니다.

$ sudo service neutron-dhcp-agent restart
neutron-dhcp-agent stop/waiting
neutron-dhcp-agent start/running, process 11797
$ sudo service neutron-plugin-openvswitch-agent restart
neutron-plugin-openvswitch-agent stop/waiting
neutron-plugin-openvswitch-agent start/running, process 11814
$ sudo service neutron-dhcp-agent restart
neutron-dhcp-agent stop/waiting
neutron-dhcp-agent start/running, process 11926
$ sudo service neutron-metadata-agent restart
neutron-metadata-agent stop/waiting
neutron-metadata-agent start/running, process 11949 

** "오픈스택을 다루는 기술"에서 이부분에 오류가 있었습니다. neutron-dhcp-agent 서비스 역시 다른 서비스와 마찬가지로 한번만 재 시작을 해 주어야 합니다. 그런데 두번을 재시작을 했습니다. 물론 두번 재시작한다고 해서 문제가 되지는 않습니다. 그리고, neutron-metadata-agent 서비스 역시 재시작을 해 주어야 합니다. 처음 써 본 책이라 생각보다 오류와 오타가 많았습니다. 넓은 마음으로 이해해 주시면 정말 감사하겠습니다.


이렇게서 네트워크 노드를 설치해 보았습니다. 다음 포스팅에서는 컴퓨트 노드를 설치해 보도록 하겠습니다.

그럼, 다음 시간에 다시 만나요~~~~ ^^

저작자 표시 비영리 변경 금지
신고
Posted by 나리 짱!!! naleejang
OpenStack Class2014.09.19 22:16

안녕하세요~!!


지난 시간까지는 오픈스택을 설치하기 위한 서버를 준비하고 서버에 우분투 리눅스도 설치해 보았습니다. 이번에는 오픈스택을 설치하기에 앞서 쉽게 우분투 서버에 접속하기 위한 방법을 알아보고 네트워크 테스트 베드는 어떻게 구성할지, 네트워크 IP는 어떻게 가져가면 될지를 먼저 그림으로 그려보도록 하겠습니댜. 


SSH Client 프로그램을 이용한 우분투 서버 접속

자주 사용하는 SSH Client 프로그램을 이용하여 접속하면 됩니다.

일단 버철박스 명령창에서 ifconfig를 이용하여 아래와 같이 IP 정보를 확인합니다.


확인된 IP와 설치시 입력했던 아이디와 패스워드를 이용하여 접속합니다. 이런건 검색엔진에 많이 검색되니 제가 굳이 따로 설명하지는 않겠습니다.


네트워크 테스트 베드 구성

오픈스택을 설치하기에 앞서 아래와 같은 네트워크 테스트 베드 구성이 필요합니다. 오픈스택을설치 할 때는 인스턴스(가상서버)에 직접 할당해 주는 Fixed IP 범위와 외부에서 인스턴스에 접속하기 위한 Floating IP 범위가 필요합니다. Fixed IP 범위는 대체적으로 10.0.0.0 대역을 주로 사용하며, Floating IP 범위는 공인 IP 대역이나 특정 지역(인트라넷으로 네트워크가 묶여 있는 곳)에서 접속 할 수 있는 인트라넷 IP 범위가 필요합니다. 그러나, 이런 IP 정보를 잘 모를 경우에는 아래 그림과 같이 IP 공유기를 이용하여 간단하게 네트워크 테스트 베드를 구성할 수 있습니다. 공유기에 따라서 약간의 차이는 있지만, DHCP IP 범위를 설정할 수 있으며, 가상 서버의 IP 또한 공유기에서 할당하는 IP로 직접 설정할 수 있습니다. 뿐만 아니라, Floating IP 범위 또한 자유롭게 지정할 수 있습니다.


우선, IP 공유기를 하나 준비합니다. 그리고 인터넷 전용선을 공유기의 WAN 포트에 연결하고 나머지 다른 포트에는 가지고 있는 컴퓨터를 연결합니다. 이렇게 하면 일단 간단하게 테스트 베드 구성이 완료가 된 것입니다. 나머지 환경설정은 공유기에 접속하여 설정하면 됩니다.

 


네트워크 구성도를 그려보자.

네트워크 테스트 베드가 구성이 되었다면 이번에는 오픈스택을 이용하여 생성할 인스턴스에 어떤 IP를 부여할 것인지, 그리고 Host OSIP는 어떻게 가져갈 것인지에 대한 네트워크 구성도를 먼저 그려봐야 합니다. 네트워크 구성도를 먼저 그려보지 않은 상태에서 오픈스택을 설치할 경우 어떤 IP를 호스트 노드에 설정할 것인지, 어떤 IP 범위를 Fixed IP로 설정할 것인지, 어떤 IP 범위를 Floating IP 범위로 설정할 것인지를 쉽게 알 수 없어 설치할 때 많은 고생을 할 수도 있습니다. 네트워크를 잘 알고 계시는 분들도 네트워크 구성을 할 때는 구성도를 먼저 그려보고 설정을 하니, 처음 해 보는 우리들은 반드시 네트워크 구성도를 그려보고 시작해야 됩니다.

일단 IP 공유기의 게이트웨이 IP192.168.1.1이고, 서브 넷 마스크는 255.255.255.0이라고 가정합시다. 버철박스를 설치한 윈도우 PCIP192.168.1.101이라고 설정하고 버철박스를 이용해 생성한 우분투 가상서버의 IP는 윈도우 PC와의 같은 IP 대역인 192.168.1.20을 사용할 것 입니다. Fixed IP Range는 주로 사용하는 IP 범위인 10.0.0.0/20을 사용하고 Floating IP RangeIP 공유기의 IP 범위 중 일부인 192.168.1.128/28을 사용합니다


Fixed IP가 무엇이고 Floating IP가 무엇인지 대체 /20은 뭐고 /28은 뭔지 잘 모르시겠다구요?? 그럼 아래 글을 읽고 오면 도움이 될 것 같습니다.


Cloud에서 알아야 할 네트워크 이야기 --> http://naleejang.tistory.com/61


지금까지는 오픈스택을 설치하기 위한 준비를 하였습니다. 

그냥 간단하게 설치하면 되는 줄 알았는데 정말 해야할 것 들이 많죠~!! 다음시간에는 실제로 오픈스택을 설치해 보도록 하겠습니다. 그럼, 다음시간에 다시 만나요~~!!! ^^

저작자 표시 비영리 변경 금지
신고
Posted by 나리 짱!!! naleejang
OpenStack2013.03.13 14:43

클라우드를 접하면서 자주 만나는 부분~ 그리고, 가장 어려웠던 부분이 바로 네트워크와 관련된 용어가 아닐까 싶다. 처음에는 그저 그런것도 있는가보다 하고 지났갔는데, 계속 그냥 지나가다 보니, 나중에는 왜 이런걸 사용하는 걸까? 하는 의문점이 들기 시작했다. 그래서 오늘은 네트워크 용어에 대해 잠시 알아보고 가려고 한다. 




그림으로 한번 그려봤는데 역시나 그림으로 그리면서도 이 그림이 맍는건지 의문이 가는 이유는 무엇일까? 에휴~


  • 라우터 (Router) 

- 라우터는 위의 그림에서처럼 인터넷과 같은 서로 다른 네트워크를 연결할 때 쓰이는 장비이다. 

- 한마디로 말해서 라우터란? 지능을 가진 경로 배정기 라고 할수 있다.

- 경로 배정기는 자신이 가야 할 길을 자동으로 찾아서 갈 수 있는 능력을 가진 장비를 뜻한다.

- 라우터는 두가지 일을 하는데 하나는 Path Determination(경로 결정)이고, 또 하나는 Switching(스위칭)이다.

- 경로결정은 데이터 패킷이 목적지까지 갈 수 있는 길을 검사하여 어느곳으로 가는것이 가장 적절할지를 결정하며

- 길이 결정되면 그쪽으로 데이터 패킷을 스위칭해 준다. 


  • 브릿지(Bridge) 

- 브릿지는 말 그대로 다리다. 콜리전 도메인을 나누어 서로 통신이 가능하도록 연결시켜 주는 장비이다. 

- 콜리전 도메인은 CSMA/CD 방식에 따라 한번에 한 PC만 데이터를 전송할 수 있는 방식을 말하는데 

- 이때 두 PC에서 데이터를 전송하려고 하는것을 콜리전이 발생했다 라고 한다.

- 이와 같은 문제를 해결하기 위해 나온 장비가 바로 브릿지이다. 

- 브릿지와 스위치는 같은 역할을 한다.

 

  • 스위치 (Switch)

- 브릿지와 같은 역할을 한다. 

- 그러나 스위치는 처리 방식이 하드웨어로 이루어져 있어 소프트웨어적인 처리를 하는 브릿지보다 빠르다.

- 브릿지는 같은 속도를 지원하지만, 스위치는 서로 다른 속도를 연결해 줄 수 있는 기능이 있다.

- 브릿지보다 많은 포트수를 제공한다. 브릿지는 2~3개, 스위치는 20~100 이상

- 스위치를 프레임 처리 방식은 cut-through, store-and-forward 방식 지원, 브릿지는 store-and-forward 방식만 지원


  • 허브 (Hub)

- 허브는 Multiport(멀티포트), Repeater(리피터) 라고 할 수 있다.

- 멀티포트는 포트가 많다는 뜻이며,

- 리피터는 들어온 데이터를 그대로 재전송한다는 뜻이다.

- 한마디로 말해 포트가 여러개 달린 장비로써, 한 포트로 들어온 데이터를 나머지 포트로 뿌려준다.


  • VLAN (Virtual LAN)

- 스위치에서 지원하는 기능이다.

- VLAN을 사용하면 한 대의 스위치를 마치 여러대의 분리된 스위치처럼 사용할 수 있다.

- 뿐만 아니라, 하나의 스위치에 연결된 장비들도 브로드캐스트 도메인이 서로 다를 수 있다.



오픈스택의 퀀텀 방식을 보면 라우터, VLAN, 브릿지 와 같은 용어들이 나온다. 스위치를 쓰지 않고 브릿지를 쓰는 이유를 소프트웨어적으로 처리해야 하기 때문에 하드웨어 방식의 스위치가 아닌 브릿지를 사용할 것임을 알 수 있다.


저작자 표시 비영리 변경 금지
신고
Posted by 나리 짱!!! naleejang