본문으로 바로가기

OpenStack Manual Installation - Neutron

category 클라우드/OpenStack 2022. 8. 19. 18:12

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 엔드 포인트를 생성해야 합니다.
  1. 데이터베이스 작성
    • root 사용자로 데이터베이스 서버 연결
      • mysql -u root -p
    • neutron 데이터베이스 생성
      • CREATE DATABASE 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';
  1. 관리자 자격 증명을 등록하여 관리자 전용 CLI 명령에 액세스
    • . admin-openrc
  2. 서비스 자격 증명 생성
    • 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
  3. 네트워킹 서비스 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
  • 네트워킹 서비스를 시작하고 시스템이 부팅될 때 같이 시작되도록 구성
    • 옵션 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]
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