{"id":13605352,"url":"https://github.com/prastamaha/openstack-octavia","last_synced_at":"2026-02-20T17:33:55.289Z","repository":{"id":138022547,"uuid":"283436033","full_name":"prastamaha/openstack-octavia","owner":"prastamaha","description":"Deployment Openstack Octavia Using Kolla-Ansible on Centos 8","archived":false,"fork":false,"pushed_at":"2020-08-03T02:28:38.000Z","size":805,"stargazers_count":17,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-02T19:37:20.830Z","etag":null,"topics":["kolla-ansible","octavia","openstack","openstack-octavia","openstack-train"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prastamaha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-07-29T07:58:26.000Z","updated_at":"2024-07-26T00:54:52.000Z","dependencies_parsed_at":"2024-01-19T10:12:14.846Z","dependency_job_id":"40632186-a397-4851-983e-781e9c8b9603","html_url":"https://github.com/prastamaha/openstack-octavia","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prastamaha%2Fopenstack-octavia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prastamaha%2Fopenstack-octavia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prastamaha%2Fopenstack-octavia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prastamaha%2Fopenstack-octavia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prastamaha","download_url":"https://codeload.github.com/prastamaha/openstack-octavia/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223497746,"owners_count":17155199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kolla-ansible","octavia","openstack","openstack-octavia","openstack-train"],"created_at":"2024-08-01T19:00:57.703Z","updated_at":"2026-02-20T17:33:55.181Z","avatar_url":"https://github.com/prastamaha.png","language":"Shell","funding_links":[],"categories":["Shell"],"sub_categories":[],"readme":"# Research: Testing Octavia On CentOs 8 Using Kolla-Ansible\n\nOpenstack Core + Octavia Deployment __Train__\n\n## Prerequisites\n- 2 physical machine or Vm installed Centos 8\n- 2 interfaces on each vm (mgmt network and external network)\n- Internet access on both networks\n\n## Topology\n![topology](images/topology.png)\n\n## Installation Steps\n\n**Run All commands below only on Controller Node or Deployer Node**\n\n**Run commands with Regular users (non-root)**\n\n### 1. Install Dependencies\n\n```\nsudo dnf install python3-devel libffi-devel gcc openssl-devel nano git python3-libselinux\n```\n\n### 2. Create Virtual Environtment\n\n```\nsudo dnf install python3-virtualenv \n```\n\n```\ncd ~\nvirtualenv kolla-install\nsource kolla-install/bin/activate\n```\n\n### 3. Install Dependencies On Virtual Environtment\n\n```\npip install -U pip\npip install ansible==2.9.10\npip install kolla-ansible==9.2.0\n```\n\n### 4. Create __/etc/kolla/__ Directory\n\n```\nsudo mkdir -p /etc/kolla\nsudo chown $USER:$USER /etc/kolla\n```\n\n### 5. Copy globals.yml and passwords.yml to /etc/kolla directory\n\n```\ncp -r kolla-install/share/kolla-ansible/etc_examples/kolla/* /etc/kolla\n```\n\n### 6. Copy all-in-one and multinode inventory files to the current directory.\n\n```\ncp kolla-install/share/kolla-ansible/ansible/inventory/* .\n```\n\n### 7. Configure Ansible\n\n```\nsudo mkdir -p /etc/ansible\n```\n\n```\nsudo nano /etc/ansible/ansible.cfg\n\n[defaults]\nhost_key_checking=False\npipelining=True\nforks=100\n```\n\n### 8. Configure __/etc/hosts__ \n```\nsudo nano /etc/hosts\n\n127.0.0.1 localhost\n::1         localhost localhost.localdomain localhost6 localhost6.localdomain6\n\n10.10.110.10 controller\n10.10.110.20 compute\n```\nMake sure you can ping __controller__ and __compute__\n\n### 9. SSH Without Password\n```\nssh-keygen\nssh-copy-id -i ~/.ssh/id_rsa.pub $USER@compute\n```\n\n### 10. Configure Multinode Inventory\n\nMake changes to several sections as below\n\n```\nnano ~/multinode\n\n[control]\ncontroller\n\n[network]\ncontroller\n\n[compute]\ncompute\n\n[monitoring]\ncontroller\n\n[storage]\ncontroller\n\n[deployment]\ncontroller       ansible_connection=local\n```\n\n__Do not make changes in other parts__\n\n### 11. Test Ansible Connectivity\n\n```\nansible -i multinode all -m ping\n```\n\n### 12. Generate Password\n\n```\nkolla-genpwd\n```\n\n### 13. Configure __globals.yml__\n\nUncoment and Make changes to several sections as below\n\n```\nnano /etc/kolla/globals.yml\n\nkolla_base_distro: \"centos\"\nkolla_install_type: \"source\"\nopenstack_release: \"train\"\nkolla_internal_vip_address: \"10.10.110.11\"\nkolla_external_vip_address: \"10.10.110.12\"\nnetwork_interface: \"eth0\"\nneutron_external_interface: \"eth1\"\nenable_neutron_provider_networks: \"yes\"\nnova_compute_virt_type: \"kvm\"\nenable_octavia: \"yes\"\n```\n__Do not make changes in other parts__\n\n### 14. Generate Certificate for Octavia Amphora\n\nManual configuration (Recommended), follow this [step](certificates/octavia-cert-manual.md)\n\nUsing Script (For Testing) follow this [step](certificates/octavia-cert-script.md)\n\n\n\n### 15. Deploy using Kolla-ansible\n\n```\nkolla-ansible -i ./multinode bootstrap-servers\nkolla-ansible -i ./multinode prechecks\nkolla-ansible -i ./multinode deploy\n```\n\n### 16. Post Deploy\n\n```\nkolla-ansible post-deploy\npip install python-openstackclient\n```\n\n### 17. Create octavia openrc file\n\nCheck octavia keystone password\n```\ngrep octavia_keystone /etc/kolla/passwords.yml \n\noctavia_keystone_password: VQ2vA5AsFZLzt1t1FK39sMMu2R5BXMSSXtIXOWow\n```\n\nCreate /etc/kolla/octavia-openrc.sh\n```\nsudo nano /etc/kolla/octavia-openrc.sh\n\nfor key in $( set | awk '{FS=\"=\"}  /^OS_/ {print $1}' ); do unset $key ; done\nexport OS_PROJECT_DOMAIN_NAME=Default\nexport OS_USER_DOMAIN_NAME=Default\nexport OS_PROJECT_NAME=admin\nexport OS_TENANT_NAME=admin\nexport OS_USERNAME=octavia\nexport OS_PASSWORD=\u003coctavia_keystone_password\u003e\nexport OS_AUTH_URL=http://10.10.110.11:35357/v3\nexport OS_INTERFACE=internal\nexport OS_ENDPOINT_TYPE=internalURL\nexport OS_IDENTITY_API_VERSION=3\nexport OS_REGION_NAME=RegionOne\nexport OS_AUTH_PLUGIN=password\n```\n\nsource to /etc/kolla/octavia-openrc.sh\n```\nsource /etc/kolla/octavia-openrc.sh\n```\n\n### 18. Create Amphora Image\n\nInstall Dependencies\n```\nsudo dnf -y install epel-release\nsudo dnf install -y debootstrap qemu-img git e2fsprogs policycoreutils-python-utils\n```\n\nClone octavia repository\n```\ngit clone https://opendev.org/openstack/octavia -b stable/train\n```\n\nInstall disk-builder\n```\ndeactivate\npython3 -m venv disk-builder\nsource disk-builder/bin/activate\npip install diskimage-builder\n```\n\nCreate Amphora Image (Default using ubuntu)\n```\ncd octavia/diskimage-create\n./diskimage-create.sh\n```\n\n### 19. Register the image in Glance\n\n```\ndeactivate\nsource ~/kolla-install/bin/activate\n```\n\n```\nopenstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file amphora-x64-haproxy.qcow2\n```\n\n### 20. Create Amphora Flavor\n\n```\nopenstack flavor create --vcpus 1 --ram 1024 --disk 2 \"amphora\" --private\n```\n\n### 21. Create Amphora Security Group\n\n```\nopenstack security group create lb-mgmt-sec-grp\nopenstack security group rule create --protocol icmp lb-mgmt-sec-grp\nopenstack security group rule create --protocol tcp --dst-port 22 lb-mgmt-sec-grp\nopenstack security group rule create --protocol tcp --dst-port 9443 lb-mgmt-sec-grp\n```\n\n### 22. Create Amphora Keypair\n\n```\nopenstack keypair create --public-key ~/.ssh/id_rsa.pub octavia_ssh_key\n```\n\n### 23. Create Amphora Management Network\n\n```\nsudo docker exec -it openvswitch_vswitchd bash\ndnf -y install python3-pip\npip3 install python-neutronclient\n```\n\nDefine Variable\n\n```\nOCTAVIA_MGMT_SUBNET=172.16.0.0/12\nOCTAVIA_MGMT_SUBNET_START=172.16.0.100\nOCTAVIA_MGMT_SUBNET_END=172.16.31.254\n```\n\nCreate `octavia-openrc.sh_\n\n```\nvi octavia-openrc.sh\n\nfor key in $( set | awk '{FS=\"=\"}  /^OS_/ {print $1}' ); do unset $key ; done\nexport OS_PROJECT_DOMAIN_NAME=Default\nexport OS_USER_DOMAIN_NAME=Default\nexport OS_PROJECT_NAME=admin\nexport OS_TENANT_NAME=admin\nexport OS_USERNAME=octavia\nexport OS_PASSWORD=\u003coctavia_keystone_password\u003e\nexport OS_AUTH_URL=http://10.10.110.11:35357/v3\nexport OS_INTERFACE=internal\nexport OS_ENDPOINT_TYPE=internalURL\nexport OS_IDENTITY_API_VERSION=3\nexport OS_REGION_NAME=RegionOne\nexport OS_AUTH_PLUGIN=password\n```\nSource `octavia-openrc.sh`\n\n```\nsource octavia-openrc.sh\n```\n\nCreate Network\n\n```\nOCTAVIA_AMP_NETWORK_ID=$(neutron net-create lb-mgmt-net | awk '/ id / {print $4}')\n\nneutron subnet-create --name lb-mgmt-subnet --allocation-pool start=$OCTAVIA_MGMT_SUBNET_START,end=$OCTAVIA_MGMT_SUBNET_END lb-mgmt-net $OCTAVIA_MGMT_SUBNET\n```\n\nCreate Port\n\n```\nneutron port-create --name octavia-hm-port --binding:host_id=$HOSTNAME lb-mgmt-net\nMGMT_PORT_ID=$(neutron port-show octavia-hm-port | awk '/ id / {print $4}')\nMGMT_PORT_MAC=$(neutron port-show octavia-hm-port | awk '/ mac_address / {print $4}')\n```\nAssign port into controller node\n\n```\nsudo ovs-vsctl -- --may-exist add-port br-int octavia-hm0 -- set Interface octavia-hm0 type=internal -- set Interface octavia-hm0 external-ids:iface-status=active -- set Interface octavia-hm0 external-ids:attached-mac=$MGMT_PORT_MAC -- set Interface octavia-hm0 external-ids:iface-id=$MGMT_PORT_ID\n\nsudo ip link set dev octavia-hm0 address $MGMT_PORT_MAC\nsudo dhclient octavia-hm0; ip r del default via 172.16.0.1 dev octavia-hm0\n```\n\n### 24. Add the octavia resource id into globals.yml\n\nout of the docker (bask to regular user)\n\n```\n(openvswitch-vswitchd)[root@prasta-node0 /]# exit\n(kolla-install) [prasta@prasta-node0 diskimage-create]$ cd ~\n(kolla-install) [prasta@prasta-node0 ~]$ \n```\n\nCheck octavia resource id \n```\nopenstack network show lb-mgmt-net | awk '/ id / {print $4}'\nopenstack security group show lb-mgmt-sec-grp | awk '/ id / {print $4}'\nopenstack flavor show amphora | awk '/ id / {print $4}'\n```\nAdd the octavia resource id into globals.yml\n\n```\nnano /etc/kolla/globals.yml\n\noctavia_amp_boot_network_list: \u003cID of lb-mgmt-net\u003e\noctavia_amp_secgroup_list: \u003cID of lb-mgmt-sec-grp\u003e\noctavia_amp_flavor_id: \u003cID of amphora flavor\u003e\n```\n\n### 25. Change Octavia Health Manager Config\n\n```\nHM_IP=$(openstack port show octavia-hm-port | awk '/ fixed_ips / {print $4}' | cut -d \"'\" -f 2)\necho $HM_IP\n```\n```\nnano /etc/kolla/config/octavia.conf\n\n[health_manager]\nbind_ip = \u003cHM_IP\u003e\ncontroller_ip_port_list = \u003cHM_IP\u003e:5555\n```\n\n### 26. Reconfigure Octavia\n\n```\nkolla-ansible reconfigure -t octavia\n```\n\n### 27. Install octavia client\n```\nsource ~/kolla-install/bin/activate\nsource /etc/kolla/admin-openrc.sh\npip install python-octaviaclient\n```\n\n### 28. Openstack Resource Create Using CLI (Optional)\n\n[step](resource-cli/openstack-resource-cli.md)\n\n## Octavia Load Balancer scenarios\n- [Basic Http](scenarios/basic-http.md)\n- [TLS Termination](scenarios/tls-termination.md)\n- [TLS Termination with SNI](scenarios/tls-termination-sni.md)\n\n## Issues\n- when controller node goes down, octavia-hm0 configuration will not be automatically recovered. so I made a bash script to overcome this issue\n\n    script: [octavia-bootup.sh](issues/octavia-bootup.sh)\n    \n    run as regular user (make sure your regular user can using sudo without password)\n\n    ```\n    cd ~\n    curl https://raw.githubusercontent.com/prastamaha/openstack-octavia/master/issues/octavia-bootup.sh \u003e octavia-bootup.sh\n    chmod +x octavia-bootup.sh\n    ./octavia-bootup.sh\n    ```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprastamaha%2Fopenstack-octavia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprastamaha%2Fopenstack-octavia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprastamaha%2Fopenstack-octavia/lists"}