Neutron Installation
참고 : https://it00.tistory.com/19?category=808035
네트워킹 서비스 개요
OpenStack Networking(Neutron)을 사용하면 다른 OpenStack 서비스에서 관리하는 인터페이스 장치를 생성하고 네트워크에 연결할 수 있습니다.
플러그인을 구현하면 다양한 네트워킹 장비 및 소프트웨어를 수용할 수 있습니다.
구성 요소
neutron-server
API를 수신하고 OpenStack Networking 플러그인으로 라우팅합니다.
OpenStack Networking plug-ins and agents
포트 추가/삭제, 네트워크 또는 서브넷을 만들고 IP 주소를 제공합니다.
플러그인 및 에이전트는 특정 클라우드에서 사용되는 공급 업체 및 기술에 따라 다릅니다.
OpenStack Networking
Cisco virtual and physicla switches
NEC OpenFLow products
Open vSwitch
Linux bridging
VMware NSX product
공통 에이전트는 L3, DHCP, plug-in agent 입니다.
Messaging Queue
neutron-server와 다양한 에이전트간에 정보를 라우팅하는데 사용합니다.
또한 특정 플러그인에 대한 네트워킹 상태를 저장하는 데이터베이스 역할을 합니다.
네트워킹(Neutron) 개념
OpenStack Networking(Neutron)은 OpenStack 환경에서 VNI(가상 네트워킹 인프라) 및 PNI(물리적 네트워킹 인프라)의 액세스 계층 측면에 대한 모든 네트워킹 패싱을 관리합니다.
OpenStack Networking을 사용하면 프로젝트에서 방화벽 및 VPN 등을 만들 수 있습니다.
네트워킹 설정에는 하나 이상의 외부 네트워크가 있습니다.
외부 네트워크는 단순히 가상으로 정의된 네트워크가 아닌 OpenStack 외부에서 접근할 수 있는 물리적 외부 네트워크입니다.
외부 네트워크의 IP 주소는 외부의 모든 사람이 물리적으로 접근할 수 있습니다.
외부 네트워크 외에도 하나 이상의 내부 네트워크가 존재합니다.
이러한 소프트웨어 정의 네트워크(내부 네트워크)는 VM에 직접 연결됩니다.
같은 내부 네트워크의 VM 또는 라우터에 연결된 서브넷의 VM만 해당 네트워크에 연결된 VM에 직접 접근할 수 있습니다.
외부 네트워크에서 내부 네트워크에 연결된 VM에 액세스하거나 그 반대의 경우 네트워크 간 라우터가 필요합니다.
각 라우터에는 외부 네트워크에 연결된 게이트웨이 하나와 내부 네트워크에 연결된 인터페이스가 하나 이상 있습니다.
물리적 라우터와 마찬가지로 라우터에 연결된 다른 서브넷의 시스템에 접근할 수 있으며, 시스템은 라우터의 게이트웨이를 통해 외부 네트워크에 접근할 수 있습니다.
외부 네트워크의 IP 주소를 내부 네트워크나 VM의 포트에 연결할 수 있습니다.
이렇게 하면 외부 네트워크의 entity가 VM에 접근할 수 있습니다.
네트워킹은 보안 그룹을 지원합니다.
관리자는 Security Group을 사용하여 방화벽 규칙을 그룹으로 정의할 수 있습니다.
VM은 하나 이상의 Security Group에 속할 수 있으며, Neutron은 이러한 Security Group의 규칙을 적용하여 해당 VM의 포트, 포트 범위 또는 트래픽 유형을 차단하거나 허용합니다.
네트워킹에서 사용하는 플러그인
코어 플러그인, 보안 그룹 플러그인, FWaaS(Firewall-as-a-Service)
설치 및 구성(Controller Node)
전제 조건
OpenStack Networking(Neutron) 서비스를 구성하기 전에 데이터베이스, 서비스 자격 증명 및 API 엔드 포인트를 생성해야 합니다.
데이터베이스 작성
root 사용자로 데이터베이스 서버 연결
neutron 데이터베이스 생성
neutron 데이터베이스에 대한 접근 권한을 부여하고 NEUTRON_DBPASS를 적절한 암호로 변경
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'NEUTRON_DBPASS';
관리자 자격 증명을 등록하여 관리자 전용 CLI 명령에 액세스
서비스 자격 증명 생성
neutron 유저 생성
openstack user create --domain default --password-prompt neutron
neutron 유저에 admin role 추가
openstack role add --project service --user neutron admin
이 명령은 출력이 없습니다.
neutron 서비스 엔터티 생성
openstack service create --name neutron --description "OpenStack Networking" network
네트워킹 서비스 API 앤드 포인트 생성
root@controller$ openstack endpoint create --region RegionOne \
network public http://controller:9696
root@controller$ openstack endpoint create --region RegionOne \
network internal http://controller:9696
root@controller$ openstack endpoint create --region RegionOne \
network admin http://controller:9696
네트워킹 옵션 구성
네트워킹 서비스를 배포할 때 2가지 옵션이 존재합니다.
옵션 1은 외부 네트워크에 인스턴스 연결만을 지원하는 가장 간단한 아키텍처를 배포합니다.
셀프 서비스(사설) 네트워크, 라우터 또는 Floating IP 주소가 없습니다.
옵션 2는 셀프 서비스 네트워크에 인스턴스 연결을 지원하는 L3 서비스로 옵션 1을 보강합니다.
사용자는 셀프 서비스 및 provider 네트워크 사이의 연결을 제공하는 라우터를 포함하여 셀프 서비스 네트워크를 관리할 수 있습니다.
Floating IP는 인터넷과 같은 외부 네트워크의 셀프 서비스 네트워크를 사용하여 인스턴스에 대해 외부 네트워크와의 연결을 제공합니다.
일반적으로 오버레이 네트워크를 사용하는데 이때 VXLAN을 사용합니다.
셀프 서비스 네트워크 구성
구성 요소 설치
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
서버 구성 요소 구성
/etc/neutron/neutron.conf
수정
[database] 섹션에 데이터베이스 액세스 구성
NEUTRON_DBPASS
는 데이터베이스에 대해 선택한 암호로 바꿉니다 .
[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[DEFAULT] 섹션에 ml2 플러그인, 라우터 서비스 및 겹치는 IP 주소를 사용하도록 설정
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
[DEFAULT] 섹션에서 Rabbit MQ을 구성
RABBIT_PASS는 RabbitMQ의 openstack 계정에 대한 암호로 변경
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
[DEFAULT]와 [keystone_authtoken]에 Identity 서비스 접근 구성
NEUTRON_PASS는 Identity service에서 neutron 사용자에 대한 암호로 변경
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
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 = NEUTRON_PASS
[DEFAULT] 및 [nova] 섹션에서 네트워크 토폴로지 변경 사항을 컴퓨팅에 알리도록 네트워킹을 구성
NOVA_PASS는 nova 사용자 암호로 변경
[DEFAULT]
# ...
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[nova]
# ...
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 = NOVA_PASS
[oslo_concurrency] 섹션에서 잠금 경로를 구성
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
ML2 플러그인 구성
ML2 플러그인은 Linux 브리지 메커니즘을 사용하여 인스턴스 용 레이어 2 (브리징 및 스위칭) 가상 네트워킹 인프라를 구축합니다.
/etc/neutron/plugins/ml2/ml2_conf.ini 수정
[ml2] 섹션에서 flat, vlan, vxlan 네트워크 활성화
[ml2]
# ...
type_drivers = flat,vlan,vxlan
[ml2] 섹션에서 VXLAN self-service networks 활성화
[ml2]
# ...
tenant_network_types = vxlan
[ml2] 섹션에서 Linux bridge와 L2 population mechanism 활성화
ML2 플러그인을 구성한 후 type_drivers 옵션의 값을 제거하면 데이터베이스 불일치가 발생할 수 있습니다.
Linux bridge agent는 오직 VXLAN overlay network만 지원합니다.
[ml2]
# ...
mechanism_drivers = linuxbridge,l2population
[ml2] 섹션에서 port security extension driver 활성화
[ml2]
# ...
extension_drivers = port_security
[ml2_type_flat] 섹션에서 provider 가상 네트워크를 flat네트워크로 구성
[ml2_type_flat]
# ...
flat_networks = provider
[ml2_type_vxlan] 섹션에서 셀프 서비스 네트워크의 VXLAN 네트워크 식별자 범위를 구성
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000
[security group] 섹션에서 ipset을 활성화하여 Security group 규칙의 효율성을 높임
[securitygroup]
# ...
enable_ipset = true
Linux bridge agent 구성
리눅스 브리지 에이전트는 인스턴스를 위한 L2(브릿지 및 스위칭) 가상 네트워킹 인프라를 구축하고 보안 그룹을 처리합니다.
/etc/neutron/plugins/ml2/linuxbridge_agent.ini 수정
[linux_bridge] 섹션에서 provider 가상 네트워크를 provider 물리적 네트워크 인터페이스에 매핑
PROVIDER_INTERFACE_NAME은 기본 provider 물리 네트워크 인터페이스로 수정
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan] 섹션에서 VXLAN 오버레이 네트워크를 사용하도록 설정하고 오버레이 네트워크를 처리하는 물리적 네트워크 인터페이스의 IP 주소를 구성하고 L2 population를 사용하도록 설정
OVERLAY_INTERFACE_IP_ADDRESS를 오버레이 네트워크를 처리하는 기본 물리적 네트워크 인터페이스의 IP 주소로 변경
예제 아키텍처는 관리 인터페이스를 사용하여 트래픽을 다른 노드로 터널링합니다. 따라서 OVERLAY_INTERFACE_IP_ADDRESS를 컨트롤러 노드의 관리 IP 주소로 교체
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[security group] 섹션에서 Security group을 사용하도록 설정하고 Linux bridge iptables 방화벽 드라이버를 구성
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
다음 명령을 통해 bridge 모듈 로딩
/usr/sbin/modprobe br_netfilter
다음 sysctl 값이 모두 1로 설정되어 있는지 확인하여 Linux 운영 체제 커널이 네트워크 브리지 필터를 지원하는지 확인
root@controller$ sysctl -a | grep net.bridge.bridge-nf-call-ip6tables
root@controller$ sysctl -a | grep net.bridge.bridge-nf-call-iptables
L3 Agent 구성
L3 에이전트는 self-service 가상 네트워크에 라우팅과 NAT 서비스를 제공합니다.
/etc/neutron/l3_agent.ini 수정
[DEFAULT] 섹션에서 Linux 브리지 인터페이스 드라이버를 구성
[DEFAULT]
# ...
interface_driver = linuxbridge
DHCP Agent 구성
DHCP 에이전트는 가상 네트워크에 DHCP 서비스를 제공합니다.
/etc/neutron/dhcp_agent.ini 수정
[DEFAULT] 섹션에서 Linux 브리지 인터페이스 드라이버, DNSmasq DHCP 드라이버를 구성하고 provider 네트워크의 인스턴스가 네트워크를 통해 메타데이터에 액세스할 수 있도록 격리된 메타데이터를 사용하도록 설정
[DEFAULT]
# ...
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
Metadata Agent 구성
Metadata 에이전트는 자격 증명과 같은 구성 정보를 인스턴스에 제공합니다.
/etc/neutron/metadata_agent.ini 수정
[DEFAULT] 섹션에서 메타 데이터 호스트를 구성하고 데이터 프록시 암호 공유
METADATA_SECRET을 메타 데이터 프록시에 대한 적절한 암호로 변경
[DEFAULT]
# ...
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
네트워킹 서비스를 사용하기 위한 Compute Service 구성
해당 과정을 수행하기 위해서는 Nova가 필수로 설치되어 있어야 합니다.
/etc/nova/nova.conf 파일 수정
[neutron] 섹션에서 액세스 매개 변수를 구성하고 메타데이터 프록시를 사용하도록 설정한 다음 암호를 구성
NEUTRON_PASS는 neutron 사용자의 암호
METADAT_SECRET은 metadata proxy의 암호
[neutron]
# ...
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
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
설치 완료
네트워킹 서비스 초기화 스크립트인 /etc/neutron/plugin.ini
에 ML2 플러그인 구성 파일을 가리키는 심볼릭 링크가 필요
/etc/neutron/plugins/ml2/ml2_conf.ini
파일에 대한 심볼링 링크 설정
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
데이터베이스를 채움
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
네트워킹 서비스를 시작하고 시스템이 부팅될 때 같이 시작되도록 구성
root@controller$ systemctl enable neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
root@controller$ systemctl start neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
root@controller$ systemctl enable neutron-l3-agent.service
root@controller$ systemctl start neutron-l3-agent.service
설치 및 구성(Compute Node)
Compute Node는 인스턴스에 대한 연결 및 보안 그룹을 처리합니다.
구성 요소 설치
yum install openstack-neutron-linuxbridge ebtables ipset
공통 구성 요소 설치
네트워킹 공통 구성 요소 구성에는 인증 메커니즘, 메시지 대기열 및 플러그인이 포함됩니다.
/etc/neutron/neutron.conf
수정
[database] 섹션에서 compute node가 데이터베이스에 직접 액세스하지 않으므로 연결 옵션에 대해 설정
[DEFAULT] 섹션에서 RabbitMQ 메시지 큐 접근 구성
RABBIT_PASS는 RabbitMQ에서 openstack 계정 비밀번호
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
[DEFAULT]와 [keystone_authtoken] 섹션에서 Identity service 접근 구성
NEUTRON_PASS는 Identity 서비스에서 neutron 사용자의 비밀번호
[DEFAULT]
# ...
auth_strategy = keystone
[keystone_authtoken]
# ...
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 = NEUTRON_PASS
[oslo_concurrency] 섹션에서 lock path 구성
[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp
네트워킹 옵션 구성
네트워킹 옵션 2인 Self-service networks 구성
Linux Bridge Agent 구성
Linux bridge agent는 인스턴스를 위한 L2(bridging and switching) 가상 네트워킹 인프라를 구축하고 보안 그룹을 처리합니다.
/etc/neutron/plugins/ml2/linuxbridge_agent.ini 수정
[linux_bridge] 섹션에서 provider 가상 네트워크를 제공자 provider 네트워크 인터페이스에 매핑
PROVIDER_INTERFACE_NAME을 기본 provider 물리적 네트워크 인터페이스의 이름으로 변경
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan] 섹션에서 VXLAN 오버레이 네트워크를 사용하도록 설정하고 오버레이 네트워크를 처리하는 물리적 네트워크 인터페이스의 IP 주소를 구성하고 L2 population를 사용하도록 설정
OVERLAY_INTERFACE_IP_ADDRESS를 오버레이 네트워크를 처리하는 기본 물리적 네트워크 인터페이스의 IP 주소로 변경
예제 아키텍처는 관리 인터페이스를 사용하여 트래픽을 다른 노드로 터널링합니다. 따라서 OVERLAY_INTERFACE_IP_ADDRESS를 컨트롤러 노드의 관리 IP 주소로 교체
[vxlan]
enable_vxlan = true
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = true
[security group] 섹션에서 Security group을 사용하도록 설정하고 Linux bridge iptables 방화벽 드라이버를 구성
[securitygroup]
# ...
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
/usr/sbin/modprobe br_netfilter 명령을 통해 bridge 모듈 로딩
/usr/sbin/modprobe br_netfilter
다음 sysctl 값이 모두 1로 설정되어 있는지 확인하여 Linux 운영 체제 커널이 네트워크 브리지 필터를 지원하는지 확인
root@controller$ sysctl -a | grep net.bridge.bridge-nf-call-ip6tables
root@controller$ sysctl -a | grep net.bridge.bridge-nf-call-iptables
네트워킹 서비스를 사용하기 위한 Compute Service 구성
/etc/nova/nova.conf 파일 수정
[neutron] 섹션에서 액세스 매개 변수를 구성
NEUTRON_PASS는 Identity 서비스에서 neutron 사용자의 비밀번호
[neutron]
# ...
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
설치 완료
Compute service 재시작
systemctl restart openstack-nova-compute.service
linuxbridge agent를 시작하고 시스템이 부팅될 때 시작되도록 구성
root@controller$ systemctl enable neutron-linuxbridge-agent.service
root@controller$ systemctl start neutron-linuxbridge-agent.service