환경: Pike, CentOS 7
Octavia 수동 설치
1. 패키지 설치
yum -y install \
openstack-octavia-api.noarch \
openstack-octavia-common.noarch \
openstack-octavia-health-manager.noarch \
openstack-octavia-housekeeping.noarch \
openstack-octavia-worker.noarch \
openstack-octavia-diskimage-create.noarch
# Load Balancer CLI 확장
git clone https://github.com/openstack/python-octaviaclient.git -b stable/pike
pip install -r requirements.txt -e .
2. 데이터베이스 생성
mysql> CREATE DATABASE octavia;
mysql> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'localhost' IDENTIFIED BY 'OCTAVIA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'%' IDENTIFIED BY 'OCTAVIA_DBPASS';
mysql> FLUSH PRIVILEGES;
3. Keystone 인증 구성
openstack user create --domain default --password-prompt octavia
openstack role add --project service --user octavia admin
openstack service create load-balancer --name octavia
openstack endpoint create octavia public http://192.168.100.10:9876 --region RegionOne
openstack endpoint create octavia admin http://192.168.100.10:9876 --region RegionOne
openstack endpoint create octavia internal http://192.168.100.10:9876 --region RegionOne
4. 보안 그룹 생성
# Amphora VM 통신을 위한 보안 그룹
openstack security group create lb-mgmt-sec-grp --project <admin_project_id>
openstack security group create lb-mgmt-sec-grp --project <service_project_id>
# Health Manager 통신용 보안 그룹
openstack security group create lb-health-mgr-sec-grp --project <admin_project_id>
openstack security group create lb-health-mgr-sec-grp --project <service_project_id>
5. LB 관리 네트워크 생성
openstack network create lb-mgmt-net
openstack subnet create \
--subnet-range 192.168.0.0/24 \
--allocation-pool start=192.168.0.2,end=192.168.0.200 \
--network lb-mgmt-net lb-mgmt-subnet
6. CA 인증서 생성
source /opt/pike/octavia/bin/create_certificates.sh /etc/octavia/certs/ /opt/pike/octavia/etc/certificates/openssl.cnf
7. Health Manager 네트워크 포트 생성
neutron port-create --name octavia-health-manager-standalone-listen-port \
--security-group <lb-health-mgr-sec-grp> \
--device-owner Octavia:health-mgr \
--binding:host_id=<hostname> lb-mgmt-net \
--tenant-id <octavia_service>
ovs-vsctl --may-exist add-port br-int o-hm0 \
-- set Interface o-hm0 type=internal \
-- set Interface o-hm0 external-ids:iface-status=active \
-- set Interface o-hm0 external-ids:attached-mac=<MAC> \
-- set Interface o-hm0 external-ids:iface-id=<PORT_ID>
8. Health Manager IP 설정
# /etc/octavia/dhcp/dhclient.conf
request subnet-mask,broadcast-address,interface-mtu;
do-forward-updates false;
ip link set dev o-hm0 address <MAC>
dhclient -v o-hm0 -cf /etc/octavia/dhcp/dhclient.conf
9. SSH 키 생성
mkdir -p /etc/octavia/.ssh
ssh-keygen -b 2048 -t rsa -N "" -f /etc/octavia/.ssh/octavia_ssh_key
nova keypair-add --pub-key=/etc/octavia/.ssh/octavia_ssh_key.pub octavia_ssh_key --user <user_id>
10. Amphora 이미지 생성
octavia-diskimage-create.sh -i centos
openstack image create amphora-x64-haproxy \
--public \
--container-format=bare \
--disk-format qcow2 \
--file /opt/pike/octavia/diskimage-create/amphora-x64-haproxy.qcow2 \
--tag amphora
11. Octavia 설정 파일 수정
[DEFAULT]
transport_url = rabbit://stackrabbit:admin@172.18.128.109:5672/
api_handler = queue_producer
bind_host = 172.18.128.109
[api_settings]
bind_port = 9876
[database]
connection = mysql+pymysql://root:admin@127.0.0.1:3306/octavia
[health_manager]
bind_port = 5555
bind_ip = 192.168.0.7
controller_ip_port_list = 192.168.0.7:5555
heartbeat_key = insecure
[certificates]
ca_private_key_passphrase = foobar
ca_private_key = /etc/octavia/certs/private/cakey.pem
ca_certificate = /etc/octavia/certs/ca_01.pem
[haproxy_amphora]
server_ca = /etc/octavia/certs/ca_01.pem
client_cert = /etc/octavia/certs/client.pem
base_path = /var/lib/octavia
base_cert_dir = /var/lib/octavia/certs
connection_max_retries = 1500
connection_retry_interval = 1
rest_request_conn_timeout = 10
rest_request_read_timeout = 120
[controller_worker]
amp_boot_network_list = 6fd0afdc-c683-4157-8354-dcdd43011dad
amp_image_tag = amphora
amp_secgroup_list = d4d7a2bb-efc4-4a0f-bb6b-efcc6f9797d3
amp_flavor_id = 0b8517a7-0a9c-4d66-b9f1-60afd2e3061c
amp_image_owner_id = 542a9377317a4fe081c9bac54780eb75
amp_ssh_key_name = octavia_ssh_key
network_driver = allowed_address_pairs_driver
compute_driver = compute_nova_driver
amphora_driver = amphora_haproxy_rest_driver
workers = 2
amp_active_retries = 100
amp_active_wait_sec = 2
loadbalancer_topology = ACTIVE_STANDBY
[house_keeping]
load_balancer_expiry_age = 3600
amphora_expiry_age = 3600
[keystone_authtoken]
memcached_servers = 172.18.128.109:11211
project_domain_name = Default
project_name = service
user_domain_name = Default
password = admin
username = octavia
auth_url = http://172.18.128.109/identity
auth_type = password
12. 데이터베이스 마이그레이션
octavia-db-manage upgrade head
13. 서비스 시작
systemctl start octavia-api octavia-worker octavia-health-manager octavia-housekeeping
14. Horizon 대시보드 설정
git clone https://github.com/openstack/neutron-lbaas-dashboard.git -b stable/pike
pip install -r requirements.txt -e .
cp /opt/pike/neutron-lbaas-dashboard/neutron_lbaas_dashboard/enabled/_1481_project_ng_loadbalancersv2_panel.py /opt/pike/horizon/openstack_dashboard/enabled/
/opt/pike/horizon/manage.py collectstatic
/opt/pike/horizon/manage.py compress
systemctl restart apache2
15. Neutron 설정 수정
# /etc/neutron/neutron.conf
[DEFAULT]
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,lbaasv2
[octavia]
base_url = http://172.18.128.109/load-balancer
request_poll_timeout = 3000
# /etc/neutron/neutron_lbaas.conf
[service_providers]
service_provider = LOADBALANCERV2:Octavia:neutron_lbaas.drivers.octavia.driver.OctaviaDriver:default
# /etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini
[DEFAULT]
user_group = nobody
interface_driver = openvswitch
ovs_use_veth = False
[haproxy]
user_group = nobody
# Neutron 서비스 재시작
systemctl restart neutron-server
DevStack 배포
local.conf 파일 예시:
[[local|localrc]]
HOST_IP=172.18.128.109
RECLONE=no
DEST=/opt/pike
LOGFILE=$DEST/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=$DEST/logs
DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS="http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/sice-html5.git
ADMIN_PASSWORD=admin
DATABASE_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD
ENABLED_SERVICES+=,q-lbaasv2
ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas
enable_plugin octavia https://git.openstack.org/openstack/octavia
enable_plugin neutron-lbaas-dashboard https://github.com/openstack/neutron-lbaas-dashboard
disable_service n-net
enable_service q-svc q-agt q-dhcp q-l3 q-meta neutron
enable_service q-fwaas q-vpn
참고: 원문 블로그 게시물 (https://blog.csdn.net/jmilk/article/details/81279795)