Skip to document
pieroot log
Markdown Preview

OpenStack 수동 설치 6 — Neutron 네트워크 서비스 설치

Frontmatter

이 문서는 OpenStack 환경에서 Provider 네트워크 방식을 사용해 Neutron을 설치·구성하고, 에이전트 상태 확인 및 첫 인스턴스 부팅까지 검증하는 절차를 상세히 안내한다.

OpenStack 수동 설치 6 — Neutron 네트워크 서비스 설치
Nova까지 설치했다면 인스턴스에 네트워크와 IP를 제공하는 Neutron을 구성한다. 이번 글은 실습 커리큘럼에 맞춰 Provider 네트워크 방식(Option 1) 을 기준으로 한다. 먼저 controller와 compute1의 OVS Agent·DHCP·Metadata Agent를 정상 상태로 만든 뒤, CirrOS 인스턴스를 Provider 네트워크에 직접 연결해 첫 부팅까지 검증한다.

이 글에서 다루는 내용

  • Neutron Server, Open vSwitch Agent, DHCP Agent, Metadata Agent의 역할
  • Neutron DB, 서비스 사용자, 네트워크 엔드포인트
  • flat Provider 네트워크와 br-provider 구성
  • Nova와 Neutron 연동
  • controller·compute1 에이전트 검증과 첫 인스턴스 부팅
🧪
전제 환경
  • OpenStack 2026.1 (Gazpacho)
  • Keystone, Glance, Placement, Nova 설치 완료
  • controller 192.168.56.101, compute1 192.168.56.111
  • 각 노드에 IP를 할당하지 않은 Provider NIC 준비
  • NEUTRON_DBPASS, NEUTRON_PASS, NOVA_PASS, RABBIT_PASS, METADATA_SECRET은 실제 값으로 교체

Provider 네트워크를 선택한 이유

Provider 네트워크는 인스턴스가 물리 네트워크에 직접 연결되는 최소 구성이다. VXLAN 터널과 L3 Agent를 생략할 수 있어 서비스 간 연결과 OVS 브리지 동작을 먼저 이해하기에 적합하다. 테넌트 격리·가상 라우터가 필요한 환경은 이후 Self-service 네트워크나 DVR/L3 HA 단계에서 확장한다.
mermaid
flowchart LR
    NS["neutron-server\ncontroller :9696"] --> DB[("MariaDB: neutron")]
    NS <-->|"RabbitMQ :5672"| OVS1["OVS Agent\ncontroller"]
    NS <-->|"RabbitMQ :5672"| OVS2["OVS Agent\ncompute1"]
    NS <-->|"RabbitMQ :5672"| DHCP["DHCP Agent\ncontroller"]
    NS <-->|"RabbitMQ :5672"| META["Metadata Agent\ncontroller"]
    OVS1 --> BR1["br-provider"]
    OVS2 --> BR2["br-provider"]
    BR1 --- PHY["Provider NIC / 물리 네트워크"]
    BR2 --- PHY

1. 데이터베이스 생성

bash
sudo mysql
sql
CREATE DATABASE neutron;
CREATE USER 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost';
CREATE USER 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%';
FLUSH PRIVILEGES;
EXIT;

2. 서비스 사용자와 엔드포인트

bash
source ~/admin-openrc
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron admin
notion image
bash
openstack service create --name neutron --description "OpenStack Networking" network

openstack endpoint create --region RegionOne network public http://192.168.56.101:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696
notion image
notion image
bash
openstack endpoint list --service neutron
notion image

3. controller 패키지 설치

bash
sudo apt install -y neutron-server neutron-plugin-ml2 \
  neutron-openvswitch-agent neutron-dhcp-agent neutron-metadata-agent

4. neutron.conf

plain text
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

[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

[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]
lock_path = /var/lib/neutron/tmp

5. ML2와 OVS Provider 브리지 구성

/etc/neutron/plugins/ml2/ml2_conf.ini를 Provider 전용으로 설정한다.
plain text
[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = openvswitch
extension_drivers = port_security

[ml2_type_flat]
flat_networks = provider
controller와 compute1의 /etc/neutron/plugins/ml2/openvswitch_agent.ini에는 동일한 물리 네트워크 매핑을 둔다.
plain text
[ovs]
bridge_mappings = provider:br-provider

[securitygroup]
enable_security_group = true
firewall_driver = openvswitch
각 노드에서 실제 Provider NIC을 OVS 브리지에 연결한다.
bash
sudo ovs-vsctl add-br br-provider
sudo ovs-vsctl add-port br-provider PROVIDER_INTERFACE
sudo ovs-vsctl show
notion image
⚠️
PROVIDER_INTERFACE는 실제 NIC 이름으로 교체한다. 이 NIC에는 호스트 IP, DHCP, 게이트웨이를 설정하지 않는다. OVS에 포트를 추가하기 전에 ip -br addr와 ip route로 Management NIC의 default route가 유지되는지 확인한다.

6. DHCP·Metadata와 Nova 연동

/etc/neutron/dhcp_agent.ini
plain text
[DEFAULT]
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
/etc/neutron/metadata_agent.ini
plain text
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
controller와 compute1의 /etc/nova/nova.conf에 다음을 추가한다.
plain text
[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

7. DB 동기화와 서비스 시작

controller에서 실행한다.
bash
sudo 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

sudo systemctl restart nova-api
sudo systemctl restart neutron-server neutron-openvswitch-agent \
  neutron-dhcp-agent neutron-metadata-agent
compute1에서는 OVS Agent와 Nova Compute를 재시작한다.
bash
sudo systemctl restart nova-compute neutron-openvswitch-agent

8. 에이전트와 첫 인스턴스 검증

controller에서 에이전트 상태를 먼저 확인한다.
bash
source ~/admin-openrc
openstack network agent list
notion image
controller·compute1의 OVS Agent와 controller의 DHCP·Metadata Agent, 총 4개가 UP 및 alive 상태여야 한다.
Provider 네트워크와 서브넷을 생성한다. 아래 CIDR·게이트웨이·allocation pool은 실제 Provider 네트워크 값으로 교체한다.
bash
openstack network create --share --external \
  --provider-network-type flat \
  --provider-physical-network provider provider-net

openstack subnet create --network provider-net \
  --subnet-range PROVIDER_CIDR \
  --gateway PROVIDER_GATEWAY \
  --allocation-pool start=POOL_START,end=POOL_END \
  --dns-nameserver DNS_SERVER provider-subnet
보안 그룹에 ICMP와 SSH를 허용한 뒤, 앞에서 등록한 CirrOS 이미지로 인스턴스를 부팅한다.
bash
openstack security group rule create --proto icmp default
openstack security group rule create --proto tcp --dst-port 22 default
openstack server create --flavor m1.tiny --image cirros \
  --network provider-net instance-1
openstack server list
ACTIVE 상태와 Provider 네트워크 IP가 확인되면 Keystone → Glance → Nova → Neutron 흐름이 연결된 것이다.

오류 확인 순서

증상
먼저 확인할 항목
OVS Agent가 down
RabbitMQ 연결, bridge_mappings, br-provider 존재 여부
네트워크 생성 실패
flat_networks = provider, 물리 네트워크 이름 일치 여부
인스턴스에 IP가 없음
DHCP Agent 상태, 서브넷 allocation pool, Provider NIC 연결
메타데이터 접근 실패
양쪽 METADATA_SECRET 일치 여부와 Metadata Agent 로그
외부 통신 불가
Provider NIC에 남은 IP·DHCP·default route와 스위치 VLAN 설정
bash
journalctl -u neutron-server -n 100 --no-pager
journalctl -u neutron-openvswitch-agent -n 100 --no-pager
sudo ovs-vsctl show

핵심 정리

  1. Provider 네트워크는 물리 네트워크와 OVS 브리지를 직접 연결하는 최소 구성이다.
  1. bridge_mappings의 물리 네트워크 이름과 --provider-physical-network 값은 반드시 같아야 한다.
  1. 완료 기준은 에이전트 4개가 UP인 것뿐 아니라, 인스턴스가 실제로 ACTIVE 상태로 부팅되는 것이다.

재발 방지 체크리스트

Provider NIC에는 IP와 default route가 없다.
양쪽 노드에 br-provider와 동일한 bridge_mappings가 있다.
OVS, DHCP, Metadata Agent가 모두 UP이다.
Provider 네트워크의 CIDR·게이트웨이·allocation pool이 실제 환경과 일치한다.
CirrOS 인스턴스가 ACTIVE 상태로 Provider IP를 받는다.

다음 단계

다음 글에서는 인스턴스에 영구 블록 스토리지를 제공하는 Cinder LVM + iSCSI 백엔드를 구성하고, 볼륨을 생성·attach·마운트까지 검증한다.

참고 자료