클라우드/OpenStack
OpenStack Manual Installation - Neutron
쓱은감자
2022. 8. 19. 18:12
Neutron Installation
네트워킹 서비스 개요
- 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
- OpenStack Networking
- 공통 에이전트는 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 사용자로 데이터베이스 서버 연결
mysql -u root -p
- neutron 데이터베이스 생성
CREATE DATABASE neutron;
- neutron 데이터베이스에 대한 접근 권한을 부여하고 NEUTRON_DBPASS를 적절한 암호로 변경
- root 사용자로 데이터베이스 서버 연결
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 명령에 액세스
. admin-openrc
- 서비스 자격 증명 생성
- 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
- neutron 유저 생성
- 네트워킹 서비스 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] 섹션에 데이터베이스 액세스 구성
[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] 섹션에서 provider 가상 네트워크를 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] 섹션에서 메타 데이터 호스트를 구성하고 데이터 프록시 암호 공유
[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] 섹션에서 액세스 매개 변수를 구성하고 메타데이터 프록시를 사용하도록 설정한 다음 암호를 구성
[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
- 네트워킹 서비스를 시작하고 시스템이 부팅될 때 같이 시작되도록 구성
- 옵션 1과 옵션 2 공통
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
- 옵션 2의 경우 L3 서비스도 활성화
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] 섹션에서 provider 가상 네트워크를 제공자 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
반응형