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