IT

[openstack] 3.5 네트워킹 서비스 설치(neutron) - centos7 오픈스택 설치 및 구축 프로젝트 (rocky 버전) 본문

프로젝트/openstack

[openstack] 3.5 네트워킹 서비스 설치(neutron) - centos7 오픈스택 설치 및 구축 프로젝트 (rocky 버전)

abcee 2019. 3. 29. 05:32

3. 구성 과정

3.5 네트워킹 서비스 설치

3.5.1 개념

○ vxlan은 가상화 서버의 vm들이 직접 arp table을 보유하고 vSwitch에서 이러한 table을 관리함

○ vxlan은 ip, mac을 encapsulation해서 네트워크를 넘나들 수 있도록 network overlay 기술을 적용함

3.5.2 Controller Node

○ 전제 조건

• DB 설정

- root계정으로 DB 연결

# mysql -u root -p

- neutron 데이터베이스 생성

MariaDB [(none)] CREATE DATABASE neutron;

- neutron 데이터베이스 접근 권한 부여

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'It1';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'It1';

• admin 만 사용할 수 있는 명령을 쓰기 위해 admin 인증

$ . admin-openrc

• Neutron Service credentials

- neutron 유저 생성

$ openstack user create --domain default --password-prompt neutron

- neutron 유저가 service 프로젝트에 대한 admin 권한을 부여 받도록 역할 할당

$ openstack role add --project service --user neutron admin

- neutron라는 이름의 network 타입 service를 서비스 카탈로그에 등록

$ openstack service create --name neutron \
--description "OpenStack Networking" network

• Networking service API 엔드포인트 생성

- 외부 통신이 가능한 네트워크 인터페이스를 통해 network 서비스를 사용할 수 있도록 public endpoint를 서비스 카탈로그에 추가

$ openstack endpoint create --region RegionOne \
network public http://controller:9696

- 내부 네트워크 인터페이스를 통해 network 서비스를 사용할 수 있도록 internal endpoint를 서비스 카탈로그에 추가

$ openstack endpoint create --region RegionOne \
network internal http://controller:9696

- 관리용 네트워크 인터페이스를 통해 network 서비스를 사용할 수 있도록 admin endpoint를 서비스 카탈로그에 추가

$ openstack endpoint create --region RegionOne \
network admin http://controller:9696

○ 네트워킹 옵션 구성

• provider 네트워크에 인스턴스를 연결하는 것만 지원하는 옵션 1과 private 네트워크를 구축하는 것도 가능한 옵션 2가 있음

• 옵션 2 동일 구성

- 패키지 설치

○ openstack-neutron, openstack-neutron-ml2, openstack-neutron-linuxbridge, ebtables 패키지 설치

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

- 서버 구성 요소 설정

○ /etc/neutron/neutron.conf

# vi /etc/neutron/neutron.conf

○ /etc/neutron/neutron.conf

[DEFAULT]
# ml2 플러그인 활성화, 라우터 활성화, overlapping ip 활성화
core_plugin = ml2
service_plugins = router

# overlapping ip 활성화
allow_overlapping_ips = true

# rabbitmq 엑세스 설정
transport_url = rabbit://openstack:It1@controller

# 인증 방법 keystone 으로 설정
auth_strategy = keystone

# nova에 네트워크 토폴로지 변경을 알리도록 설정
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[database]
# 726
# 데이터베이스 액세스 설정
connection = mysql+pymysql://neutron:It1@controller/neutron

[keystone_authtoken]
# 851
# Indendity Service 액세스 구성
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = It1

[nova]
# 1101
# Indentity Service 액세스 구성
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = It1

[oslo_concurrency]
# 1222
# lock_path 설정
lock_path = /var/lib/neutron/tmp

- ML2 설정

○ Linux 브리지 메커니즘을 사용하여 인스턴스에 대한 계층 2 (브리징 및 스위칭) 가상 네트워킹 인프라를 구축

○ /etc/neutron/plugins/ml2/ml2_conf.ini

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

○ /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
# 128
# flat, vlan, vxlan 활성화
type_drivers = flat,vlan,vxlan

# vxlan 의 tenant 네트워크 활성화
tenant_network_types = vxlan

# linuxbridge와 l2population 활성화
mechanism_drivers = linuxbridge,l2population

# 포트확장 드라이버 사용 설정
extension_drivers = port_security

[ml2_type_flat]
# 183
# provider를 flat 네트워크로 구성
flat_networks = provider

# vxlan 범위 설정
vni_ranges = 1:1000

[securitygroup]
# 257
# 보안 그룹 규칙 효율성 향상 설정
enable_ipset = true

- Linux 브릿지 에이전트 구성

○ 인스턴스에 대한 계층 2 (브리징 및 스위칭) 가상 네트워킹 인프라를 구축하고 보안 그룹을 처리

○ /etc/neutron/plugins/ml2/linuxbridge_agent.ini

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

○ /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
#146
# 실제 인터페이스를 provider로 매핑
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

[vxlan]
#201
# overlay 네트워크를 활성화 하고 controller의 관리자용 ip를 overlay 인터페이스 ip로 설정, l2_population 설정
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true

[securitygroup]
# 182
# 보안 그룹 사용 설정 및 iptables 방화벽 구성
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

○ /usr/sbin/modprobe br_netfilter 명령을 통해 bridge 모듈 로딩

# /usr/sbin/modprobe br_netfilter

○ sysctl -a | grep net.bridge.bridge-nf-call-ip6tables 명령을 통해 모듈 상태 1인지(nonbypass) 확인

# sysctl -a | grep net.bridge.bridge-nf-call-ip6tables

○ sysctl -a | grep net.bridge.bridge-nf-call-iptables 명령을 통해 모듈 상태 1인지(nonbypass) 확인

# sysctl -a | grep net.bridge.bridge-nf-call-iptables

- 3계층 에이전트 구성

○ 셀프 서비스 가상 네트워크에 라우팅 및 NAT 서비스를 제공함

○ /etc/neutron/l3_agent.ini 파일에서 linuxbridge 인터페이스로 드라이버 구성

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

- DHCP 에이전트 구성

○ 가상 네트워크에 DHCP 서비스를 제공

- /etc/neutron/dhcp_agent.ini 파일에서 [default] 섹션 수정 : linuxbridge 인터페이스로 구성, dhcp 드라이버 구성, 메타데이터 격리를 활성화하여 provider 네트워크의 인스턴스가 네트워크를 통해 메타데이터에 엑세스 할수 있도록 구성

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

○ 메타 데이터 에이전트 구성

• 자격 증명과 같은 구성 정보를 인스턴스에 제공

• /etc/neutron/metadata_agent.ini 파일에서 [default] 섹션 구성 : 메타 데이터의 호스트 및 암호 설정

$ vi /etc/neutron/metadata_agent.ini
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET

○ 네트워킹 서비스를 사용하도록 nova service 구성

• /etc/nova/nova.conf 파일에서 [neutron] 섹션 수정 : Identity Service 엑세스 설정 및 메타데이터 프록시 활성화 및 비밀번호 설정

$ vi /etc/nova/nova.conf
[neutron]
# 7663
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = It1
service_metadata_proxy = true
metadata_proxy_shared_secret = It1

○ 마무리

• 네트워킹 서비스 초기화 스크립트(/etc/neutron/plugin.ini) 가 없으면 ML2 플러그인 구성파일 로부터 심볼링 링크 형성

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

• neutron 데이터베이스 초기화

# 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

• compute API 서비스 재 시작

# systemctl restart openstack-nova-api.service

• neutron.server, neutron-linuxbridge-agent, neutron-dhcp-agent, neutron-metadata-agent 서비스가 부팅 시 시작되도록 등록하고 서비스를 시작한다.

# systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service

# systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service

• 옵션2의 경우 3계층 서비스를 위해 neutron-l3-agent 서비스를 등록하고 서비스를 시작한다.

# systemctl enable neutron-l3-agent.service
# systemctl start neutron-l3-agent.service

3.5.3 Compute Node

○ 패키지 설치

# yum install -y openstack-neutron-linuxbridge ebtables ipset

○ 공통 구성

• /etc/neutron/neutron.conf

# vi /etc/neutron/neutron.conf

• [/etc/neutron/neutron.conf]

[database]
# compute 노드는 데이터베이스에 직접 접근하지 않으므로 주석처리

[DEFAULT]
# rabbitMQ 엑세스 설정
transport_url = rabbit://openstack:It1@controller

# 인증으로 keystone 사용 설정
auth_strategy = keystone

[keystone_authtoken]
# 844
# Identity Service 액세스 설정
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = It1

[oslo_concurrency]
# 1205
# lock_path 구성
lock_path = /var/lib/neutron/tmp

○ 네트워킹 옵션 구성

• 옵션 2 동일 구성

- Linux 브릿지 에이전트 구성

○ 인스턴스에 대한 계층 2 (브리징 및 스위칭) 가상 네트워킹 인프라를 구축하고 보안 그룹을 처리

○ /etc/neutron/plugins/ml2/linuxbridge_agent.ini

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

○ /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
#146
# 실제 인터페이스를 provider로 매핑
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

[vxlan]
#201
# overlay 네트워크를 활성화하고 controller의 관리자용 ip를 overlay 인터페이스 ip로 설정, l2_population 설정
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true

[securitygroup]
# 182
# 보안 그룹 사용 설정 및 iptables 방화벽 구성
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

○ /usr/sbin/modprobe br_netfilter 명령을 통해 bridge 모듈 로딩

# /usr/sbin/modprobe br_netfilter

○ sysctl -a | grep net.bridge.bridge-nf-call-ip6tables 명령을 통해 모듈 상태 1인지(nonbypass) 확인

# sysctl -a | grep net.bridge.bridge-nf-call-ip6tables

○ sysctl -a | grep net.bridge.bridge-nf-call-iptables 명령을 통해 모듈 상태 1인지(nonbypass) 확인

# sysctl -a | grep net.bridge.bridge-nf-call-iptables

○ 네트워킹 서비스를 사용하도록 nova service 구성

• /etc/nova/nova.conf 파일에서 Identity Service 액세스 구성

# vi /etc/nova/nova.conf

[neutron]

[neutron]
# 7657
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS

○ 마무리

• 변경사항을 적용하도록 openstack-nova-compute 서비스 재시작

# systemctl restart openstack-nova-compute.service

• neutron-linuxbridge-agent 서비스가 부팅 시 시작되도록 등록하고 서비스를 시작한다.

# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service

3.5.4 검증

○ admin 인증

/*
admin 권한으로 CLI 명령을 쓰기 위해 admin 인증
*/
$ . admin-openrc

○ network 확장 리스트 확인

$ openstack extension list --network

○ agent list 확인

$ openstack network agent list
Comments