Skip to main content

Primary links

  • Home
  • AI
  • Kubernetes
  • Incus
  • Ansible
  • Terraform
  • OpenStack
  • Virtualization
  • Linux
  • SmartHome
  • HowTo

Misc

  • Linux
  • Hardware
  • Programming
  • Databases
  • Multimedia
  • Windows

Cloud

  • OpenStack
    • Application credentials
    • Authentificaton
    • Barbican (Secret)
    • CLI client (OSC)
    • Cleanup OpenStack
    • Cloud images
    • Designate (DNSaaS)
    • DevStack
    • Gerrit / OpenDev
    • Glance (image)
    • Heat
    • Horizon
    • Ironic / Bifrost
    • Magnum
    • MicroStack
    • Mistral
    • Neutron (network)
    • Object storage
    • Octavia (loadbalancer)
      • Amphora SSH login
      • Fix Octavia / Amphora VMs
      • Octavia / Amphora LB check
      • Proxy protocol
      • Recreate OVS octavia port
    • OpenStack GPU passthrough
    • OpenvSwitch (OVS)
    • Quota
    • RabbitMQ
    • VPN
    • block storage volume (cinder)
    • compute (nova)
    • control
    • diskimage-builder
    • flavor
    • gnocchi
    • kolla-ansible
    • project
    • resource provider
    • server (VM)
    • user
  • cloud-config
  • nextcloud

Virtualization

  • Virtualization
  • Incus
  • Docker
  • KVM
  • Kubernetes
  • LXC
  • LXD
  • QEMU
  • VMware
  • VirtualBox
  • multipass
  • podman
  • vagrant
  • XEN

Network

  • DNS
  • Firewall
  • Linux
  • OpenvSwitch
  • SSL
  • VLAN
  • VPN
  • iPXE
  • namespaces
  • nmcli
  • tcpdump

Storage

  • CEPH
  • DRBD
  • LVM
  • S3
  • ZFS
  • btrfs

Automation / CI/CD

  • Install
  • Ansible
  • GitLab
  • LLM
  • Preseed
  • Puppet
  • Terraform
  • Ubuntu autoinstall

Monitoring / Visualisation

  • Grafana
  • Icinga
  • Prometheus
  • Monitoring
  • ELK
  • mermaid
  • octavia
  • openstack

source /etc/kolla/admin-openrc.sh
unset OS_CACERT

OS_ENV=${HOSTNAME##*-}
KOLLA_CONF=/etc/kolla/globals.yml
IMGDIR=/tmp

echo "Download Amphora image"
[ -f ${IMGDIR}/amphora-x64-haproxy.raw ] || wget https://s3.example.ch/images/amphora-x64-haproxy.raw.bz2 -qO- \ | bzip2 -d > ${IMGDIR}/amphora-x64-haproxy.raw

echo "Deploy Amphora image for Octavia"
openstack image create Amphora \
  --file ${IMGDIR}/amphora-x64-haproxy.raw \
  --disk-format raw \
  --min-disk 0 \
  --min-ram 0 \
  --private \
  --protected \
  --tag amphora \
  --property os_distro=Ubuntu \
  --property os_admin_user=ubuntu \
  --property os_version="18.04"

#echo "Remove Amphora image"
#${IMGDIR}/amphora-x64-haproxy.raw

echo "Creating Octavia LB mgmt network"
OCTAVIA_AMP_BOOT_NETWORK_LIST=$(
  openstack network create lb-mgmt-net \
    -f value -c id
)

echo "Creating Octavia LB mgmt subnet"
octavia_subnet=$(
  openstack subnet create lb-mgmt-subnet1 \
    --network lb-mgmt-net \
    --subnet-range 172.16.0.0/12 \
    --allocation-pool start=172.16.100.1,end=172.31.200.200 \
    -f value -c id
)

echo "Creating Flavors for Octavia"
OCTAVIA_AMP_FLAVOR_ID=$(
  openstack flavor create octavia \
    --disk 10 \
    --private \
    --ram 2048 \
    --vcpus 2 \
    --property aggregate_instance_extra_specs:std-com-1='true' \
    -f value -c id
)

echo "Create Octavia security group"
OCTAVIA_AMP_SECGROUP_LIST=$(
  openstack security group create octavia \
    -f value -c id
)

echo "Create Octavia security rules"
openstack security group rule create --protocol icmp $OCTAVIA_AMP_SECGROUP_LIST
openstack security group rule create --protocol tcp --dst-port 5555 --egress $OCTAVIA_AMP_SECGROUP_LIST
openstack security group rule create --protocol tcp --dst-port 9443 --ingress $OCTAVIA_AMP_SECGROUP_LIST

echo "Assigning roles for cloud-admin 'admin'"
openstack role add admin \
  --user admin \
  --domain Default

echo "Add Octavia SSH key"
# todo: openstack keypair create CLI dont allow to upload key for specific user
# openstack keypair create --pub-key=/etc/kolla/config/foo/octavia/octavia_key.pub --user $(openstack user show octavia --domain Default -f value -c id) octavia_ssh_key
nova keypair-add octavia_ssh_key \
  --pub-key=/etc/kolla/config/foo/octavia/octavia_key.pub \
  --user $(openstack user show octavia --domain Default -f value -c id)

echo "Octavia IDs to be added to inventory"
sed -i "s|^octavia_amp_boot_network_list: .*|octavia_amp_boot_network_list: ${OCTAVIA_AMP_BOOT_NETWORK_LIST}|g" ${KOLLA_CONF}
sed -i "s|^octavia_amp_secgroup_list: .*|octavia_amp_secgroup_list: ${OCTAVIA_AMP_SECGROUP_LIST}|g" ${KOLLA_CONF}
sed -i "s|^octavia_amp_flavor_id: .*|octavia_amp_flavor_id: ${OCTAVIA_AMP_FLAVOR_ID}|g" ${KOLLA_CONF}

(cd /etc/kolla && kolla-ansible -i inventory reconfigure -t octavia)

for CTL_HOST_NAME in $(openstack network agent list --agent-type l3 -c Host -f value); do
    OS_AZ=$(echo ${CTL_HOST_NAME} | cut -d"-" -f1 | sed 's/[^0-9]*//g')
    CTL_NO=$(echo ${CTL_HOST_NAME} | cut -d"-" -f2 | sed 's/[^0-9]*//g')
    CTL_HOST_MAC=$(echo 00:1b:1b:00:00:${OS_AZ}${CTL_NO})
    CTL_HOST_IP=172.16.0.${OS_AZ}${CTL_NO}

    # Create Octavia port in OpenStack
    CTL_HOST_PORT_ID=$(
      openstack port create octavia-health-manager-${CTL_HOST_NAME}-listen-port \
        --security-group octavia \
        --device-owner Octavia:health-mgr \
        --host=${CTL_HOST_NAME} \
        --network lb-mgmt-net \
        --fixed-ip subnet=$(openstack subnet show lb-mgmt-subnet1 -f value -c id),ip-address=${CTL_HOST_IP} \
        --mac-address=${CTL_HOST_MAC} \
        -c id -f value
    )

    # Create interface on compute nodes
    ssh ${CTL_HOST_NAME} docker exec openvswitch_vswitchd ovs-vsctl -- --may-exist add-port br-int o-hm0 -- \
      set Interface o-hm0 type=internal -- \
      set Interface o-hm0 mac=\\\"${CTL_HOST_MAC}\\\" -- \
      set Interface o-hm0 external-ids:iface-status=active -- \
      set Interface o-hm0 external-ids:iface-id=${CTL_HOST_PORT_ID} -- \
      set Interface o-hm0 external-ids:skip_cleanup=true -- \
      set Interface o-hm0 external-ids:attached-mac=${CTL_HOST_MAC}

    # workaround
    if [ "${OS_ENV}" == "dev" ]; then
        ssh ${CTL_HOST_NAME} docker restart neutron_l3_agent
	sleep 10
    fi
done


# list Octavia ports
openstack port list --project admin --device-owner Octavia:health-mgr
Profiles GitHub StackOverflow LinkedIn Xing
Contact Imprint
© panticz 2026

Cookie-Einstellungen

Diese Website nutzt eingebettete Inhalte von Drittanbietern (z.B. YouTube, SoundCloud). Beim Laden dieser Inhalte werden Daten an die jeweiligen Anbieter übermittelt. Datenverarbeitungserklärung