상세 컨텐츠

본문 제목

OpenStack Zed 수동 구축 - 9. Load Balancer 서비스 (Octavia) 설치

Openstack

by drogva 2026. 4. 16. 22:18

본문

OpenStack Zed 수동 구축 - 9. Load Balancer 서비스 (Octavia) 설치 (1)

이번 포스팅에서는 로드밸런서 기능을 제공하는 Octavia 서비스를 설치하기 전, 데이터베이스 생성 및 API 엔드포인트 등록 등 사전 작업을 진행합니다.

1. 데이터베이스(MariaDB) 생성

Octavia가 상태 정보를 저장할 전용 DB를 생성합니다.

SQL
 
# 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;

2. 서비스 계정 및 엔드포인트 생성

Keystone에 Octavia 유저를 등록하고 API 주소를 알려줍니다.

Bash
 
# 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

3. Octavia 전용 자격 증명 파일(openrc) 생성

Octavia 명령어를 편하게 날리기 위해 환경 변수 파일을 만듭니다.

Bash
 
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

4. Amphora 이미지 및 Flavor 준비

🛠️ Octavia Amphora 이미지 준비 및 등록 과정 설명

1. Amphora 이미지 다운로드(zed 용)

Bash
 
wget https://swift.services.a.regiocloud.tech/swift/v1/AUTH_b182637428444b9aa302bb8d5a5a418c/openstack-octavia-amphora-image/octavia-amphora-haproxy-zed.qcow2
  • 설명: OpenStack Zed 버전에 최적화된 Amphora 베이스 이미지를 외부 저장소(Swift)에서 내려받는 단계입니다.
  • Amphora란?: 로드밸런서(HAProxy)가 실제로 구동될 전용 경량 가상 머신(VM) 이미지입니다.

2. 이미지 포맷 변환 (qcow2 → raw)

Bash
 
qemu-img convert octavia-amphora-haproxy-zed.qcow2 octavia-amphora-haproxy-2024.1.img
  • 설명: 범용 가상 디스크 포맷인 qcow2를 가공되지 않은 raw 포맷(.img)으로 변환합니다.
  • 이유: raw 포맷은 qcow2보다 구조가 단순하여 I/O 성능이 빠르고, 스토리지 백엔드(Ceph 등)를 사용할 때 스냅샷이나 복제 속도 면에서 유리하기 때문에 실무에서 선호합니다.

3. OpenStack Glance에 이미지 등록 및 Flavor 생

Bash
 
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
  • --community: 프로젝트 내 모든 사용자가 이 이미지를 볼 수 있도록 커뮤니티 가시성을 부여합니다.
  • --tag amphora (가장 중요!): Octavia 서비스가 로드밸런서를 생성할 때, 수많은 이미지 중 어떤 것을 사용할지 판단하는 기준이 이 태그입니다. 이게 없으면 Octavia는 이미지를 찾지 못해 에러가 납니다.
  • --disk-format raw: 위에서 변환한 대로 포맷을 지정합니다.
  • --min-disk 2 / --min-ram 1024: 이미지가 실행되기 위한 최소 자원(2GB Disk, 1GB RAM)을 정의합니다. (아까 만든 Flavor와 맞아야 합니다.)
  • --property hw_disk_bus=scsi / hw_scsi_model=virtio-scsi: 입출력(I/O) 성능 최적화를 위해 Virtio-SCSI 컨트롤러를 사용하도록 지정합니다. 이는 고성능 로드밸런싱을 위해 필수적인 설정입니다.
  • --property os_distro / os_version: 이미지의 운영체제 정보를 메타데이터로 남깁니다.

4. 패키지 설치 (CentOS Stream 9 / RHEL 계열)

Ubuntu 가이드와 달리 RedHat 계열에서는 dnf를 사용하여 필요한 패키지를 설치합니다.

Bash
 
# 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

5. 인증서(Certificates) 생성 및 배치

Octavia 컨트롤러와 Amphora VM 간의 보안 통신을 위한 인증서를 생성합니다.

Bash
 
# 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

 

 

6. 관리용 보안 그룹(Security Group) 생성

Amphora VM이 컨트롤러와 통신하고 헬스 체크를 주고받기 위한 규칙입니다.

Bash
 
# 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 핵심 설정 가이드 (octavia.conf)

Octavia는 다른 서비스들과 달리 인증서와 매니지먼트 네트워크 설정이 매우 까다롭습니다. 아래 각 섹션별 설정 의미를 확인하여 수정하세요.

1. 기본 통신 및 DB 설정

기본적인 메시지 큐와 DB 연결을 정의합니다.

Ini, TOML
 
[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

2. Keystone 인증 설정 (API & Service)

Octavia가 권한을 확인하고 다른 서비스(Nova, Neutron 등)에 요청을 보내기 위한 인증 정보입니다.

Ini, TOML
 
[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

3. 인증서 및 보안 통신 (중요!)

컨트롤러와 Amphora VM이 서로를 믿고 통신하기 위한 암호화 설정입니다.

Ini, TOML
 
[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

4. 헬스 매니저 (Health Manager)

Amphora VM의 상태(Heartbeat)를 체크하는 설정입니다. 승호님 환경에 맞춰 컨트롤러 노드의 IP를 기입합니다.

Ini, TOML
 
[health_manager]
bind_port = 5555
# 컨트롤러 노드에서 하트비트를 수신할 IP
bind_ip = 172.30.1.146

5. 컨트롤러 워커 (Controller Worker) - 실무 핵심

Octavia가 VM을 찍어낼 때 참조할 리소스 ID들을 정의하는 섹션입니다. 가장 실수가 많은 구간입니다.

Ini, TOML
 

 

[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 설치 마무리: DB 동기화 및 서비스 가동

모든 설정 파일(octavia.conf) 작성이 완료되었다면, 이제 데이터베이스를 초기화하고 서비스를 활성화해야 합니다.

1. Octavia 데이터베이스 초기화 (Populate DB)

Octavia가 로드밸런서, 리스너, 풀(Pool) 등의 정보를 저장할 수 있도록 DB 테이블을 생성합니다.

Bash
 
# Octavia DB 관리 명령어를 통해 최신 스키마(head)로 업그레이드
octavia-db-manage --config-file /etc/octavia/octavia.conf upgrade head
  • 주의: 이 명령어를 실행하기 전에 반드시 mysql에서 octavia 사용자와 데이터베이스가 생성되어 있어야 하며, octavia.conf의 [database] 섹션 정보가 정확해야 합니다.

2. 서비스 재시작 및 상시 가동 설정 (Finalize)

설정값을 적용하기 위해 Octavia의 4가지 핵심 프로세스를 재시작하고, 부팅 시 자동 실행되도록 설정합니다.

Bash
 
# 서비스 재시작
systemctl restart octavia-api octavia-health-manager octavia-housekeeping octavia-worker

# 부팅 시 자동 시작 설정 (선택 사항이지만 추천)
systemctl enable octavia-api octavia-health-manager octavia-housekeeping octavia-worker

3. 서비스 상태 확인 (Troubleshooting)

서비스들이 정상적으로 올라왔는지 확인하는 습관이 중요합니다.

Bash
 
# 4개 서비스가 모두 active (running) 상태인지 확인
systemctl status octavia-api octavia-health-manager octavia-housekeeping octavia-work

 

관련글 더보기