Markdown Preview
OpenStack 수동 설치 6 — Neutron 네트워크 서비스 설치
Frontmatter
이 문서는 OpenStack 환경에서 Provider 네트워크 방식을 사용해 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, compute1192.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 단계에서 확장한다.
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 --- PHY1. 데이터베이스 생성
sudo mysqlCREATE 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. 서비스 사용자와 엔드포인트
source ~/admin-openrc
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron adminopenstack 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:9696openstack endpoint list --service neutron3. controller 패키지 설치
sudo apt install -y neutron-server neutron-plugin-ml2 \
neutron-openvswitch-agent neutron-dhcp-agent neutron-metadata-agent4. neutron.conf
[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/tmp5. ML2와 OVS Provider 브리지 구성
/etc/neutron/plugins/ml2/ml2_conf.ini를 Provider 전용으로 설정한다.[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = openvswitch
extension_drivers = port_security
[ml2_type_flat]
flat_networks = providercontroller와 compute1의
/etc/neutron/plugins/ml2/openvswitch_agent.ini에는 동일한 물리 네트워크 매핑을 둔다.[ovs]
bridge_mappings = provider:br-provider
[securitygroup]
enable_security_group = true
firewall_driver = openvswitch각 노드에서 실제 Provider NIC을 OVS 브리지에 연결한다.
sudo ovs-vsctl add-br br-provider
sudo ovs-vsctl add-port br-provider PROVIDER_INTERFACE
sudo ovs-vsctl showPROVIDER_INTERFACE는 실제 NIC 이름으로 교체한다. 이 NIC에는 호스트 IP, DHCP, 게이트웨이를 설정하지 않는다. OVS에 포트를 추가하기 전에 ip -br addr와 ip route로 Management NIC의 default route가 유지되는지 확인한다.6. DHCP·Metadata와 Nova 연동
/etc/neutron/dhcp_agent.ini[DEFAULT]
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true/etc/neutron/metadata_agent.ini[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRETcontroller와 compute1의
/etc/nova/nova.conf에 다음을 추가한다.[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_SECRET7. DB 동기화와 서비스 시작
controller에서 실행한다.
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-agentcompute1에서는 OVS Agent와 Nova Compute를 재시작한다.
sudo systemctl restart nova-compute neutron-openvswitch-agent8. 에이전트와 첫 인스턴스 검증
controller에서 에이전트 상태를 먼저 확인한다.
source ~/admin-openrc
openstack network agent listcontroller·compute1의 OVS Agent와 controller의 DHCP·Metadata Agent, 총 4개가
UP 및 alive 상태여야 한다.Provider 네트워크와 서브넷을 생성한다. 아래 CIDR·게이트웨이·allocation pool은 실제 Provider 네트워크 값으로 교체한다.
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 이미지로 인스턴스를 부팅한다.
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 listACTIVE 상태와 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 설정 |
journalctl -u neutron-server -n 100 --no-pager
journalctl -u neutron-openvswitch-agent -n 100 --no-pager
sudo ovs-vsctl show핵심 정리
- Provider 네트워크는 물리 네트워크와 OVS 브리지를 직접 연결하는 최소 구성이다.
bridge_mappings의 물리 네트워크 이름과--provider-physical-network값은 반드시 같아야 한다.
- 완료 기준은 에이전트 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·마운트까지 검증한다.