본문 바로가기
  • 노션에서 삽질한 내용을 정리하는 블로그
자기발전소/# Manually Install OpenStack

Openstack Neutron on Centos (Rocky) 1 [Controller Node]

by iamlucia 2020. 8. 22.

 

Neutron: Network Service (네트워크 서비스) 


1. 오픈스택  네트워킹 즉, Neutron은 다른 오픈스택 서비스에 의해 관리되는 인터페이스 장치를 생성해주거나 이 장치를 네트워크에 붙여주는 역할을 한다.

2. Plug-ins는 다양한 네트워크 장치 및 소프트웨어를 수용하기 위해 실행되며, 이를 통해 오픈스택 구조와 배포에 유연성을 제공한다.

3. Neutron은 컴퓨트 서비스와 상호작용하며, 네트워크 및 인스턴스를 위한 연결성을 제공한다. 

4. Neutron은 다음과 같은 구성요소를 가진다: 

  • neutron-server 
    API 요청을 받아서 해당 행위에 맞는 오픈스택 네트워킹 plug-in으로의 라우팅한다. 
  • Openstack Networking plug-ins & agents :
    포트를 plug하거나 unplug하기, 네트워크 또는 서브넷 생성, IP주소 제공 등의 역할을 한다. 이 구성요소들은 그 벤더와 기술에 따라 다양하다. 일반적인 agent에는 L3, DHCP,플러그인 agent가 있다.
  • Messaging queue :
    대부분 오픈스택 네트워킹 설치 시 사용되는데, 이는 neutron-server과 다양한 agent 간의 정보를 라우팅하는 기능을 한다. 또한 특정 plug-in의 네트워킹 상태를 저장하는 데이터베이스로서의 역할을 하기도 한다. 

- 출처: 오픈스택 공식문서 -
https://docs.openstack.org/neutron/rocky/install/common/get-started-networking.html

 

 


 

<< ⭕ 본 Neutron서비스 설치 내용은 컨트롤러 노드에서 진행 >>

 


🔨 데이터 베이스 생성 및 접근 권한 설정 

 

🟢 Mysql 에서 neutron 데이터 베이스를 생성한 다음, neutron계정에 데이터베이스 접속 권한 부여 :

 

#  mysql -u root -p 
[root 비밀번호 입력]하여 mariadb 접속
-------------------------------
MariaDB [(none)]> CREATE DATABASE neutron;


MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '[neutron db 비밀번호]'; 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '[neutron db 비밀번호]'; 

 

 

🟢 admin credential 스크립트 실행 :

 

# source key_adminrc

 

 

🟢 Network 서비스 Credential 생성 1  - neutron 계정 생성 후 프로젝트 및 role에 추가 :

 

# openstack user create --domain default --password-prompt neutron
# openstack role add --project service --user neutron admin

 

 

🟢 Network 서비스 Credential 생성 2  - neutron 서비스 생성 : 

 

# openstack service create --name neutron --description "OpenStack Networking" network

 

 

🟢 Network API 서비스 endpoint 생성 : 

 

# openstack endpoint create --region RegionOne  network public http://[컨트롤러 노드 관리용 ip]:9696
# openstack endpoint create --region RegionOne  network internal http://[컨트롤러 노드 관리용 ip]:9696
# openstack endpoint create --region RegionOne  network admin http://[컨트롤러 노드 관리용 ip]:9696

 

 


🔨  Networking 구성 (Option 2: Self-service networks)

🙋‍♀️ Self-service networks ? 
셀프 서비스 네트워크는 프로바이더 네트워크(Option1)에 L3(라우팅) 서비스가 더 포함되어 있다. L3 서비스는 VXLAN과 같은 오버레이 세그멘테이션 방식을 가능하게 해준다. 그리고 NAT를 사용하여 가상 네트워크를 물리 네트워크로 라우팅해줄 수 있다. 부가적으로 이 옵션에서는 LBaaS와 FWaaS 같은 좀 더 발전된 서비스를 가능하게 해준다. 셀프 서비스 네트워크 옵션에서는 물론 L2-plug-in이 구성되어있다면, VLAN 네트워크 기능도 가능하다.  

 

 

🟢 네트워크 서비스 구성 요소 설치 : 

 

# yum install openstack-neutron openstack-neutron-ml2  openstack-neutron-linuxbridge ebtables

 

 

🟢 neutron.conf 파일 수정 :  서버 구성요소 설정

 

# vi /etc/neutron/neutron.conf
-----------------------------------

더보기

[database]
# ...
connection = mysql+pymysql://neutron:[neutron db 비밀번호]@[컨트롤러 노드 관리용 ip]/neutron

[DEFAULT]

core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:[rabbimq 오픈스택 비밀번호]@[컨트롤러 노드 관리용 ip]
auth_strategy = keystone
notify_nova_on_port_status_changes = true 
notify_nova_on_port_data_changes = true

[keystone_authtoken]
# ... www_authenticate_uri = http://[컨트롤러 노드 관리용 ip]:5000 
auth_url = http://[컨트롤러 노드 관리용 ip]:5000 
memcached_servers = [컨트롤러 노드 관리용 ip]:11211 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
project_name = service 
username = neutron 
password = [neutron 계정 비밀번호]

[nova] 
# ... 
auth_url = http://[컨트롤러 노드 관리용 ip]:5000 
auth_type = password 
project_domain_name = default 
user_domain_name = default 
region_name = RegionOne 
project_name = service 
username = nova 
password 
= [nova 계정 비밀번호]

[oslo_concurrency] 
# ... 
lock_path = /var/lib/neutron/tmp

 

 

🟢 ml2_conf.ini 파일 수정 : ML2 Plug-in 구성

 

# vi /etc/neutron/plugins/ml2/ml2_conf.ini
----------------------------------

더보기

[ml2]
# ...
type_drivers =
flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security

[ml2_type_flat] // 프로바이더 가상 네트워크를 flat 네트워크로 설정
flat_networks = provider

[ml2_type_vxlan] // vxlan 네트워크 식별 범위 설정
vni_ranges = 1:1000

[securitygroup] //보안그룹 규칙의 효율성을 증가시키기 위해 ipset 활성화 
enable_ipset = true

 

 

🟢 linuxbridge_agent.ini 파일 수정 :  Linux bridge agent 구성

 

# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
-----------------------------------

 

더보기

[linux_bridge] 
physical_interface_mappings = provider:[외부 인터넷 연결용으로 사용할 이더넷명; 예: eth0] 

[vxlan]
 
enable_vxlan = true 
local_ip = [컨트롤러의 관리용 노드 IP]
l2_population = true

[securitygroup]
 
# ... 
enable_security_group = true 
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

외부 연결용 이더넷 사용 예시

 

🟢 CHECK: 리눅스 운영체제 커널이 네트워크 브리지 필터를 지원하는지 확인

 

리눅스 운영체제 커널이 네트워크 브리지 필터를 지원하는지 확인하기 위해 다음의 내용의 값을 1로 설정해야 한다.

그렇지 않으면 bridge 패킷이 net filter 으로 가지 않고 바로 스위칭 된다. 

 

# vi /etc/sysctl.conf
// net.bridge.bridge-nf-call-iptables 와 ip6tables, arptables 모두 1로 설정
# modprobe br_netfilter
# lsmod | grep br_netfilter
br_netfilter      22256     0
bridge                151336   1     br_netfilter 
# sysctl -p
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

 

 

🟢 l3_agent.ini 파일 수정: L3 Agent 구성

 

# vi /etc/neutron/l3_agent.ini 
------------------------------
[DEFAULT]
# ...
interface_driver = linuxbridge

 

 

🟢 dhcp_agent.ini 파일 수정: DHCP Agent 구성

 

# vi /etc/neutron/dhcp_agent.ini 
------------------------------
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

 

 

🟢 metadata_agent.ini 파일 수정: metadata Agent는 인스턴스에 대한 인증과 같은 구성 정보를 제공한다. 

 

# vi /etc/neutron/metadata_agent.ini
------------------------------------
[DEFAULT]
nova_metadata_host=[컨트롤러 노드 관리용 ip]
metadata_proxy_shared_secret = [metadata proxy에 대한 비밀키 값]

 

 

🟢 nova.conf 파일 수정: Neutron은 컴퓨트 서비스와 상호작용하며, 네트워크 및 인스턴스를 위한 연결성을 제공한다. 

 

# vi /etc/nova/nova.conf 
------------------------------

더보기

[neutron] 
# ...url=http://[컨트롤러 노드 관리용 ip]:9696
auth_url=http://[컨트롤러 노드 관리용 ip]:5000
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=[neutron 계정 비밀번호]
service_metadata_proxy=true
metadata_proxy_shared_secret = [metadata proxy에 대한 비밀키 값]

 


🔨 설치 마무리 

🟢 /etc/neutron/plugin.ini 에서 /etc/neutron/plugins/ml2/ml2_conf.ini 파일로의 링크 생성

 

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini    /etc/neutron/plugin.ini

 

 

🟢 Neutron 관련 데이터 베이스에 테이블 추가(populate) :

 

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

 

 

🟢 nova.conf 파일 수정했으니 api 서비스 다시 실행하여 반영시키기: 

 

# systemctl restart openstack-nova-api.service

 

 

🟢 neutron 관련 서비스 활성화 및 실행 :  상태 확인 필요 

 

# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service
# systemctl status neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service