컨트롤러 노드에서 진행
옥타비아 설치 이후 검증은 바빠서 못했습니다...
참고용도로만 사용해주세요.
$ mysql
> CREATE DATABASE octavia;
> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'localhost' IDENTIFIED BY 'a';
> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'%' IDENTIFIED BY 'a';
> exit
# 유저 생성 및 도메인 연결 및 admin 권한부여
$ openstack user create --domain default --password-prompt octavia # a 비밀번호
$ openstack role add --project service --user octavia admin
# 서비스 추가
$ openstack service create --name octavia --description "OpenStack Octavia" load-balancer
# API 엔드포인트 추가 (주의: 전부 managment IP인 10점대 영역으로 ip를 설정)
$ openstack endpoint create --region RegionOne load-balancer admin
$ openstack endpoint create --region RegionOne load-balancer internal
$ openstack endpoint create --region RegionOne load-balancer public
# octavia-openrc 파일 생성
$ vi /etc/keystone/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=a
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_VOLUME_API_VERSION=3
# 암포라 이미지 만들기
참고 : <https://www.server-world.info/en/note?os=Ubuntu_22.04&p=openstack_zed4&f=3>
$ snap install octavia-diskimage-retrofit --beta --devmode
$ cd /var/snap/octavia-diskimage-retrofit/common/tmp
$ wget <https://cloud-images.ubuntu.com/minimal/releases/focal/release/ubuntu-20.04-minimal-cloudimg-amd64.img>
$ octavia-diskimage-retrofit ubuntu-20.04-minimal-cloudimg-amd64.img ubuntu-amphora-haproxy-amd64.qcow2
octavia-diskimage-retrofit란?
"octavia-diskimage-retrofit"은 가상머신 디스크 이미지 변환 도구인 "diskimage-retrofit"을
사용하여 OpenStack Octavia 로드밸런서를 위해 디스크 이미지를 수정하는 것을 자동화하는 Python
스크립트입니다. 이 도구는 OpenStack 환경에서 Octavia의 새로운 버전을 배포하거나 이미지를
업그레이드 할 때 사용될 수 있습니다.
# octavia 계정으로 변경
$ . /etc/keystone/octavia-openrc
# 암포라 이미지 업로드
$ openstack image create \\
--disk-format qcow2 \\
--container-format bare \\
--tag amphora \\
--file ubuntu-amphora-haproxy-amd64.qcow2 \\
--private \\
--project service \\
amphora-x64-haproxy
# 암포라 Flaovr 생성
$ openstack flavor create \\
--id 200 \\
--vcpus 1 \\
--ram 1024 \\
--disk 5 \\
--private \\
--project service \\
amphora
# 패키지 설치
$ apt install octavia-api octavia-health-manager octavia-housekeeping \\
octavia-worker python3-octavia python3-octaviaclient
# LoadBalancer 인스턴스와 Octavia 서비스 간에 사용되는 인증서 생성
$ cd
$ git clone <https://opendev.org/openstack/octavia.git> -b stable/zed
$ 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
# 키페어 생성
$ ssh-keygen
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
# 보안 그룹 및 보안 규칙 생성
$ openstack security group create lb-mgmt-sec-grp
$ openstack security group rule create --protocol icmp --ingress 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 80 lb-mgmt-sec-grp
$ openstack security group rule create --protocol tcp --dst-port 443 lb-mgmt-sec-grp
$ openstack security group rule create --protocol tcp --dst-port 9443 lb-mgmt-sec-grp
$ openstack security group create lb-health-mgr-sec-grp
$ openstack security group rule create --protocol udp --dst-port 5555 lb-health-mgr-sec-grp
# dhclient용 dhclient.conf 파일 생성
$ sudo mkdir -m755 -p /etc/dhcp/octavia
$ sudo cp octavia/etc/dhcp/dhclient.conf /etc/dhcp/octavia
# Octavia 전용 네트워크 만들기
$ OCTAVIA_MGMT_SUBNET=10.0.6.0/24
$ OCTAVIA_MGMT_SUBNET_START=10.0.6.10
$ OCTAVIA_MGMT_SUBNET_END=10.0.6.254
$ OCTAVIA_MGMT_PORT_IP=10.0.6.2 # octavia.conf [health_manager]섹션의 bind_ip
$ openstack network create lb-mgmt-net
$ openstack subnet create --subnet-range $OCTAVIA_MGMT_SUBNET --allocation-pool \\
start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END \\
--network lb-mgmt-net lb-mgmt-subnet
$ SUBNET_ID=$(openstack subnet show lb-mgmt-subnet -f value -c id)
$ PORT_FIXED_IP="--fixed-ip subnet=$SUBNET_ID,ip-address=$OCTAVIA_MGMT_PORT_IP"
$ MGMT_PORT_ID=$(openstack port create --security-group \\
lb-health-mgr-sec-grp --device-owner Octavia:health-mgr \\
--host=$(hostname) -c id -f value --network lb-mgmt-net \\
$PORT_FIXED_IP octavia-health-manager-listen-port)
$ MGMT_PORT_MAC=$(openstack port show -c mac_address -f value $MGMT_PORT_ID)
$ sudo ip link add o-hm0 type veth peer name o-bhm0
$ NETID=$(openstack network show lb-mgmt-net -c id -f value)
$ BRNAME=brq$(echo $NETID|cut -c 1-11)
$ sudo brctl addif $BRNAME o-bhm0
$ sudo ip link set o-bhm0 up
$ sudo ip link set dev o-hm0 address $MGMT_PORT_MAC
$ sudo iptables -I INPUT -i o-hm0 -p udp --dport 5555 -j ACCEPT
$ sudo dhclient -v o-hm0 -cf /etc/dhcp/octavia
# host가 reboot 된 후에도 veth pair를 생성하기 위한 설정
veth pair는 가상 이더넷 인터페이스(virtual Ethernet interface)의 한 유형으로,물리적인 두 개의
네트워크 인터페이스처럼 동작하는 쌍을 이루는 가상 인터페이스입니다. veth pair는 두 개의 가상
인터페이스 중 하나를 호스트 운영 체제의 네트워크 스택과 연결하고, 다른 하나는 가상 머신,
컨테이너 또는 네트워크 네임스페이스와 연결하여 가상 네트워크를 구성하는 데 사용됩니다.
veth pair는 일반적으로 가상 머신이나 컨테이너와 호스트 운영 체제 간의 통신에 사용되며,
veth pair를 사용하여 가상 머신이나 컨테이너와 호스트 운영 체제 간에 패킷을 전달할 수 있습니다.
이러한 방식으로, veth pair를 사용하여 가상 머신이나 컨테이너를 호스트 운영 체제의 네트워크
인터페이스와 연결하면, 가상 머신이나 컨테이너가 물리적인 네트워크 인터페이스를 사용하는 것과
동일한 방식으로 네트워크에 연결될 수 있습니다.
$ vi /etc/systemd/network/o-hm0.network
[Match]
Name=o-hm0
[Network]
DHCP=yes
$ vi /etc/systemd/system/octavia-interface.service
[Unit]
Description=Octavia Interface Creator
Requires=neutron-linuxbridge-agent.service
After=neutron-linuxbridge-agent.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/opt/octavia-interface.sh start
ExecStop=/opt/octavia-interface.sh stop
[Install]
WantedBy=multi-user.target
$ vi /opt/octavia-interface.sh
#!/bin/bash
set -ex
MAC=$MGMT_PORT_MAC
BRNAME=$BRNAME
if [ "$1" == "start" ]; then
ip link add o-hm0 type veth peer name o-bhm0
brctl addif $BRNAME o-bhm0
ip link set o-bhm0 up
ip link set dev o-hm0 address $MAC
ip link set o-hm0 up
iptables -I INPUT -i o-hm0 -p udp --dport 5555 -j ACCEPT
elif [ "$1" == "stop" ]; then
ip link del o-hm0
else
brctl show $BRNAME
ip a s dev o-hm0
fi
# config 파일 설정
$ cp /etc/octavia/octavia.conf /etc/octavia/octavia.conf.org
$ grep -E '^[^#].' /etc/octavia/octavia.conf.org > /etc/octavia/octavia.conf
$ vi /etc/octavia/octavia.conf
[DEFAULT]
transport_url = rabbit://openstack:a@controller
[database]
connection = mysql+pymysql://octavia:a@controller/octavia
[oslo_messaging]
topic = octavia_prov
[api_settings]
bind_host = 172.0.0.4
bind_port = 9876
auth_strategy = keystone
api_base_uri =
[keystone_authtoken]
www_authenticate_uri =
auth_url =
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = octavia
password = a
[service_auth]
auth_url =
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = octavia
password = a
[certificates]
server_certs_key_passphrase = insecure-key-do-not-use-this-key
ca_private_key_passphrase = not-secure-passphrase
ca_private_key = /etc/octavia/certs/private/server_ca.key.pem
ca_certificate = /etc/octavia/certs/server_ca.cert.pem
[haproxy_amphora]
server_ca = /etc/octavia/certs/server_ca-chain.cert.pem
client_cert = /etc/octavia/certs/private/client.cert-and-key.pem
[health_manager]
bind_ip = 10.0.6.2 # OCTAVIA_MGMT_PORT_IP
bind_port = 5555
controller_ip_port_list = 10.0.6.2:5555
[controller_worker]
# amp_ssh_key_name = mykey
# amp_image_owner_id = # openstack image show amphora-x64-haproxy // owner id 확인
amp_image_tag = amphora # openstack image show amphora-x64-haproxy // tags 확인
amp_secgroup_list = , # openstack security group list
amp_boot_network_list = # openstack network list
amp_flavor_id = 200 # openstack flavor list
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
# 정책 설정(policy.yaml) 및 octavia.conf, policy.yaml 권한 설정
$ vi /etc/octavia/policy.yaml
"context_is_admin": "role:admin or role:load-balancer_admin"
"admin_or_owner": "is_admin:True or project_id:%(project_id)s"
"load-balancer:read": "rule:admin_or_owner"
"load-balancer:read-global": "is_admin:True"
"load-balancer:write": "rule:admin_or_owner"
"load-balancer:read-quota": "rule:admin_or_owner"
"load-balancer:read-quota-global": "is_admin:True"
"load-balancer:write-quota": "is_admin:True"
$ chmod 640 /etc/octavia/octavia.conf /etc/octavia/policy.yaml
$ chgrp octavia /etc/octavia/octavia.conf /etc/octavia/policy.yaml
# DB insert
$ octavia-db-manage --config-file /etc/octavia/octavia.conf upgrade head
# restart
$ systemctl restart octavia-api octavia-health-manager octavia-housekeeping octavia-worker
$ systemctl status octavia-api
$ systemctl status octavia-health-manager
$ systemctl status octavia-housekeeping
$ systemctl status octavia-worker
호라이즌에 Octavia UI 추가
$ apt install python3-octavia-dashboard
$ vi /etc/openstack-dashboard/local_settings.py
ENABLE_OCTAVIA_UI = True
$ service apache2 restart
'Openstack' 카테고리의 다른 글
오픈스택: magnum (0) | 2023.04.10 |
---|---|
오픈스택: heat (0) | 2023.04.10 |
9. 오픈스택: compute 추가 (0) | 2023.04.06 |
8. 오픈스택: cinder(블록 스토리지) 설치(2) (0) | 2023.04.06 |
7. 오픈스택: cinder(블록 스토리지) 설치(1) (0) | 2023.04.06 |
댓글