이번 포스팅에서는 로드밸런서 기능을 제공하는 Octavia 서비스를 설치하기 전, 데이터베이스 생성 및 API 엔드포인트 등록 등 사전 작업을 진행합니다.
Octavia가 상태 정보를 저장할 전용 DB를 생성합니다.
# DB 접속
mysql
# DB 생성 및 권한 부여
CREATE DATABASE octavia;
GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'localhost' IDENTIFIED BY 'OCTAVIA_DBPASS';
GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'%' IDENTIFIED BY 'OCTAVIA_DBPASS';
FLUSH PRIVILEGES;
EXIT;
Keystone에 Octavia 유저를 등록하고 API 주소를 알려줍니다.
# admin 권한 로드
source userinfo
# 1. Octavia 유저 생성
openstack user create --domain default --password-prompt octavia
# 2. admin 역할(Role) 추가
openstack role add --project service --user octavia admin
# 3. 서비스 엔터티 생성
openstack service create --name octavia --description "OpenStack Octavia" load-balancer
# 4. API 엔드포인트 생성 (Public, Internal, Admin)
openstack endpoint create --region RegionOne load-balancer public http://controller:9876
openstack endpoint create --region RegionOne load-balancer internal http://controller:9876
openstack endpoint create --region RegionOne load-balancer admin http://controller:9876
Octavia 명령어를 편하게 날리기 위해 환경 변수 파일을 만듭니다.
cat << EOF >> $HOME/octavia-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=service
export OS_USERNAME=octavia
export OS_PASSWORD=OCTAVIA_PASS
export OS_AUTH_URL=http://controller:5000
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_VOLUME_API_VERSION=3
EOF
# 설정 반영
source $HOME/octavia-openrc
wget https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-octavia-amphora-image/octavia-amphora-haproxy-zed.qcow2
qemu-img convert octavia-amphora-haproxy-zed.qcow2 octavia-amphora-haproxy-2024.1.img
openstack image create \
--community \
--tag amphora \
--disk-format raw \
--file octavia-amphora-haproxy-2024.1.img \
--min-disk 2 \
--min-ram 1024 \
--property hw_disk_bus=scsi \
--property hw_scsi_model=virtio-scsi \
--property os_distro=ubuntu \
--property os_version=22.04 \
"amphora-x64-haproxy"
# 2. 전용 Flavor 생성 (ID 200번 사용)
openstack flavor create --id 200 --vcpus 1 --ram 1024 --disk 2 "amphora" --private

Ubuntu 가이드와 달리 RedHat 계열에서는 dnf를 사용하여 필요한 패키지를 설치합니다.
# EPEL 및 Octavia 관련 패키지 설치
dnf --enablerepo=centos-openstack-zed,epel,crb -y install \
openstack-octavia-api openstack-octavia-health-manager \
openstack-octavia-housekeeping openstack-octavia-worker \
python3-octavia python3-octaviaclient
Octavia 컨트롤러와 Amphora VM 간의 보안 통신을 위한 인증서를 생성합니다.
# Octavia 소스 코드에서 인증서 생성 스크립트 가져오기
git clone https://opendev.org/openstack/octavia.git
cd octavia/bin/
source create_dual_intermediate_CA.sh
# 인증서 디렉토리 생성 및 권한 설정
sudo mkdir -p /etc/octavia/certs/private
sudo chmod 755 /etc/octavia -R
# 생성된 인증서 복사 (서버/클라이언트용)
sudo cp -p etc/octavia/certs/server_ca.cert.pem /etc/octavia/certs
sudo cp -p etc/octavia/certs/server_ca-chain.cert.pem /etc/octavia/certs
sudo cp -p etc/octavia/certs/server_ca.key.pem /etc/octavia/certs/private
sudo cp -p etc/octavia/certs/client_ca.cert.pem /etc/octavia/certs
sudo cp -p etc/octavia/certs/client.cert-and-key.pem /etc/octavia/certs/private
Amphora VM이 컨트롤러와 통신하고 헬스 체크를 주고받기 위한 규칙입니다.
# lb-mgmt-sec-grp: SSH 접속 및 관리 API(9443) 허용
openstack security group create lb-mgmt-sec-grp
openstack security group rule create --protocol icmp lb-mgmt-sec-grp
openstack security group rule create --protocol tcp --dst-port 22 lb-mgmt-sec-grp
openstack security group rule create --protocol tcp --dst-port 9443 lb-mgmt-sec-grp
# lb-health-mgr-sec-grp: 헬스 매니저와 통신(UDP 5555) 허용
openstack security group create lb-health-mgr-sec-grp
openstack security group rule create --protocol udp --dst-port 5555 lb-health-mgr-sec-grp
Octavia는 다른 서비스들과 달리 인증서와 매니지먼트 네트워크 설정이 매우 까다롭습니다. 아래 각 섹션별 설정 의미를 확인하여 수정하세요.
기본적인 메시지 큐와 DB 연결을 정의합니다.
[DEFAULT]
# RabbitMQ 연결 설정
transport_url = rabbit://openstack:RABBIT_PASS@controller
[database]
# Octavia 전용 DB 연결
connection = mysql+pymysql://octavia:OCTAVIA_DBPASS@controller/octavia
[oslo_messaging]
# Octavia 프로비저닝을 위한 토픽 설정
topic = octavia_prov
Octavia가 권한을 확인하고 다른 서비스(Nova, Neutron 등)에 요청을 보내기 위한 인증 정보입니다.
[api_settings]
# Octavia API 서비스 포트 (기본 9876)
bind_host = 0.0.0.0
bind_port = 9876
[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 = octavia
password = OCTAVIA_PASS
[service_auth]
# 다른 서비스(Nova/Neutron) 호출 시 사용하는 인증 정보
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = octavia
password = OCTAVIA_PASS
컨트롤러와 Amphora VM이 서로를 믿고 통신하기 위한 암호화 설정입니다.
[certificates]
# 인증서 생성 시 사용한 Passphrase (스크립트 기본값 사용 시 아래와 같음)
server_certs_key_passphrase = insecure-key-do-not-use-this-key
ca_private_key_passphrase = not-secure-passphrase
# 생성하여 배치한 CA 키와 인증서 경로
ca_private_key = /etc/octavia/certs/private/server_ca.key.pem
ca_certificate = /etc/octavia/certs/server_ca.cert.pem
[haproxy_amphora]
# Amphora 내부에 들어갈 클라이언트 인증서 설정
server_ca = /etc/octavia/certs/server_ca-chain.cert.pem
client_cert = /etc/octavia/certs/private/client.cert-and-key.pem
Amphora VM의 상태(Heartbeat)를 체크하는 설정입니다. 승호님 환경에 맞춰 컨트롤러 노드의 IP를 기입합니다.
[health_manager]
bind_port = 5555
# 컨트롤러 노드에서 하트비트를 수신할 IP
bind_ip = 172.30.1.146
Octavia가 VM을 찍어낼 때 참조할 리소스 ID들을 정의하는 섹션입니다. 가장 실수가 많은 구간입니다.
[controller_worker]
# 1. service 프로젝트의 ID (openstack project show service로 확인)
amp_image_owner_id = <service_project_id> #service 프로젝트의 ID
# 2. 이미지 등록 시 사용한 태그 이름
amp_image_tag = amphora
# 3. Amphora 접속용 SSH 키 (우리가 만든 mykey)
amp_ssh_key_name = mykey
# 4. 관리용 보안 그룹 ID (lb-mgmt-sec-grp의 UUID)
amp_secgroup_list = <lb-mgmt-sec-grp_id> #방금 전 생성한 lb-mgmt-sec-grp 의 ID
# 5. 관리용 네트워크 ID (컨트롤러와 통신 가능한 LB-MGMT 망 ID)
amp_boot_network_list = <lb-mgmt-net_id> #controller 노드에서 접근 가능한 network 일전에 생성한 public network 의 ID
# 6. Amphora용 사양 (ID 200번)
amp_flavor_id = 200
# 드라이버 설정 (표준값)
network_driver = allowed_address_pairs_driver
compute_driver = compute_nova_driver
amphora_driver = amphora_haproxy_rest_driver
client_ca = /etc/octavia/certs/client_ca.cert.pem
모든 설정 파일(octavia.conf) 작성이 완료되었다면, 이제 데이터베이스를 초기화하고 서비스를 활성화해야 합니다.
Octavia가 로드밸런서, 리스너, 풀(Pool) 등의 정보를 저장할 수 있도록 DB 테이블을 생성합니다.
# Octavia DB 관리 명령어를 통해 최신 스키마(head)로 업그레이드
octavia-db-manage --config-file /etc/octavia/octavia.conf upgrade head
설정값을 적용하기 위해 Octavia의 4가지 핵심 프로세스를 재시작하고, 부팅 시 자동 실행되도록 설정합니다.
# 서비스 재시작
systemctl restart octavia-api octavia-health-manager octavia-housekeeping octavia-worker
# 부팅 시 자동 시작 설정 (선택 사항이지만 추천)
systemctl enable octavia-api octavia-health-manager octavia-housekeeping octavia-worker
서비스들이 정상적으로 올라왔는지 확인하는 습관이 중요합니다.
# 4개 서비스가 모두 active (running) 상태인지 확인
systemctl status octavia-api octavia-health-manager octavia-housekeeping octavia-work

| OpenStack Zed 수동 구축 - 11. kuryr-kubernetes(1) (0) | 2026.04.19 |
|---|---|
| OpenStack Zed 수동 구축 - 10. Load Balancer 서비스 (Octavia) 사용해보기 (0) | 2026.04.16 |
| OpenStack Zed 수동구축-7.Networking service – neutron installation(1)-OVN (0) | 2026.04.12 |
| OpenStack Zed 수동구축-6.Compute service – nova installation (0) | 2026.04.12 |
| OpenStack Zed 수동구축-5. Placement service – placement installation (0) | 2026.04.11 |