YJWANG

[OpenStack] Octavia 프로젝트 구축 (Load Balancer) 본문

60.Cloud/60.OpenStack

[OpenStack] Octavia 프로젝트 구축 (Load Balancer)

왕영주 2021. 7. 8. 15:49

Kolla-Ansible을 이용해서 OpenStack에 Octavia를 구축하고자합니다.

 

버전 정보

OpenStack - wallaby

 

참고자료

https://docs.openstack.org/kolla-ansible/latest/reference/networking/octavia.html

https://github.com/openstack/kolla-ansible/blob/master/doc/source/reference/networking/octavia.rst

 

기존의 구축된 OpenStack에 Octavia를 추가하는 것이 아닌 OpenStack 구축까지 한 번에 진행하는 것으로 추가와 일부분 다를 수 있습니다.

Kolla-Ansible을 활용하여 기본 OpenStack을 구축하는 부분은 관련 포스팅을 참고 부탁드립니다.
https://yjwang.tistory.com/112

 

Octavia 배포


 

globals.yaml 수정

# grep -Ev "^$|^#" /etc/kolla/globals.yml 
---
config_strategy: "COPY_ALWAYS"
kolla_base_distro: "ubuntu"
kolla_install_type: "binary"
openstack_release: "wallaby"

kolla_internal_vip_address: "10.99.99.25"
kolla_external_vip_address: "xxx.xxx.xxx.xxx"
network_interface: "ens2"
kolla_external_vip_interface: "ens4"
octavia_network_interface: "ens2"
network_address_family: "ipv4"
octavia_network_address_family: "{{ api_address_family }}"
neutron_external_interface: "ens3"
neutron_plugin_agent: "openvswitch"

openstack_logging_debug: "True"

enable_openstack_core: "yes"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"

enable_horizon_octavia: "{{ enable_octavia | bool }}"
enable_neutron_provider_networks: "yes"
enable_octavia: "yes"
octavia_auto_configure: yes
octavia_amp_flavor:
  name: "amphora"
  is_public: no
  vcpus: 1
  ram: 1024
  disk: 5

octavia_amp_network:
  name: lb-net
  provider_network_type: vxlan
  shared: true
  subnet:
    name: lb-subnet
    cidr: "{{ octavia_amp_network_cidr }}"
    #no_gateway_ip: no
    enable_dhcp: yes
    gateway_ip: "20.0.0.1"
    allocation_pool_start: "20.0.0.2"
    allocation_pool_end: "20.0.0.254"
octavia_amp_network_cidr: "20.0.0.0/24"

octavia_amp_image_tag: "amphora"
octavia_loadbalancer_topology: "SINGLE"

 

Octavia 인증서 생성

# kolla-ansible octavia-certificates

 

생성된 인증서 확인

# ls -l /etc/kolla/config/octavia/
total 20
-rw-r--r-- 1 root root 5284 Jul  6 16:19 client.cert-and-key.pem
-rw-r--r-- 1 root root 2045 Jul  6 16:19 client_ca.cert.pem
-rw-r--r-- 1 root root 2045 Jul  6 16:19 server_ca.cert.pem
-rw-r--r-- 1 root root 3326 Jul  6 16:19 server_ca.key.pem

 

배포 진행

# ./kolla-ansible -i <inventory-file> deploy

 

post-deploy 진행

admin-openrc.shoctavia-openrc.sh 파일을 생성합니다.

# ./kolla-ansible -i <inventory file> post-deploy

 

Amphora 이미지 생성

Amphora 이미지는 Octavia를 통해 Load Balacer를 생성 시 LB역할을 할 인스턴스를 생성하게 되는데 그때 Amphora 이미지를 이용하여 인스턴스가 생성됩니다.

 

필요 패키지 설치

# apt -y install debootstrap qemu-utils git kpartx

 

git 프로젝트 clone

# git clone https://opendev.org/openstack/octavia

 

diskimage-builder 모듈 설치 및 이미지 빌드

# pip install diskimage-builder
# cd octavia/diskimage-create
# ./diskimage-create.sh

 

위 과정이 끝나면 amphora 이미지 파일이 생성됩니다.

wallaby 버전 기준 octavia 계정을 통해 이미지를 업로드해야합니다.

# . /etc/kolla/octavia-openrc.sh

# openstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file amphora-x64-haproxy.qcow2 --property hw_architecture='x86_64' --property hw_rng_model=virtio

 

이미지 업로드가 완료되면 기본으로 생성된 external router의 external gateway 주소를 확인합니다.

# openstack router show demo-router -c external_gateway_info
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                 | Value                                                                                                                                                                                    |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| external_gateway_info | {"network_id": "fe058c5c-0554-48ee-b868-d4c8a7a1bd13", "external_fixed_ips": [{"subnet_id": "c5942aef-89d3-496a-9c17-d11593183edd", "ip_address": "10.99.99.190"}], "enable_snat": true} |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

이후 Amphora 인스턴스와 Octavia Container 들이 통신하기 위해 routing을 추가합니다.  (Ubuntu 기준)

모든 Controller Node에 추가해야 합니다. 만약 지정한 Octavia Interface가 routing없이 바로 통신 가능하다면 해당 작업은 필요 없습니다.

# cat << EOF >> /etc/netplan/octavia.yaml
network:
    version: 2
    renderer: networkd
    ethernets:
        br-ex:  
            routes:
            - to: 20.0.0.0/24
              via: 10.99.99.190
EOF

 

기본 라우터를 통헤 Amphora 인스턴스와 통신하기 위해 lb-subnet을 추가합니다.

# openstack router add subnet demo-router lb-subnet

 

이후 admin 유저에 octavia 권한을 추가하고 loadbalancer를 생성 후 테스트해봅니다.

# openstack role add --project "admin" --user "admin" load-balancer_admin
반응형