Octavia

Octavia 提供负载均衡即服务。本指南涵盖两种提供程序

  • Amphora

  • OVN

启用 Octavia

globals.yml 中启用 octavia 服务

enable_octavia: "yes"

Amphora 提供程序

本节涵盖 Octavia 配置,用于 Amphora 驱动程序。有关完整详细信息,请参阅 Octavia 文档安装指南 是一个有用的参考。

证书

Octavia 需要各种 TLS 证书才能运行。从 Victoria 版本开始,Kolla Ansible 支持自动生成这些证书。

选项 1:自动生成证书

Kolla Ansible 为证书颁发者和所有者字段提供默认值。可以通过 globals.yml 自定义这些值,例如

octavia_certs_country: US
octavia_certs_state: Oregon
octavia_certs_organization: OpenStack
octavia_certs_organizational_unit: Octavia

生成 octavia 证书

kolla-ansible octavia-certificates

证书和密钥将在 /etc/kolla/config/octavia 下生成。

选项 2:手动生成证书

按照 octavia 文档 生成 Amphorae 的证书。这些证书应按如下方式复制到 Kolla Ansible 配置中

cp client_ca/certs/ca.cert.pem /etc/kolla/config/octavia/client_ca.cert.pem
cp server_ca/certs/ca.cert.pem /etc/kolla/config/octavia/server_ca.cert.pem
cp server_ca/private/ca.key.pem /etc/kolla/config/octavia/server_ca.key.pem
cp client_ca/private/client.cert-and-key.pem /etc/kolla/config/octavia/client.cert-and-key.pem

以下选项应在 passwords.yml 中设置,与用于加密 CA 密钥的密码匹配

octavia_ca_password: <CA key password>

监控证书到期

可以使用以下命令检查任何证书是否会在给定天数内到期

kolla-ansible octavia-certificates --check-expiry <days>

网络

Octavia worker 和 health manager 节点必须能够访问 Octavia 管理网络,以便与 Amphorae 通信。

如果使用 VLAN 作为 Octavia 管理网络,请启用 Neutron 提供程序网络

enable_neutron_provider_networks: yes

配置控制器上用于访问 Octavia 管理网络的网络接口的名称。如果使用 VLAN 提供程序网络,请确保流量也桥接到 Open vSwitch 上。

octavia_network_interface: <network interface on controllers>

该接口应具有 Octavia 管理子网上的 IP 地址。

注册 OpenStack 资源

从 Victoria 版本开始,有两种配置 Octavia 的方法。

  1. Kolla Ansible 在部署期间会自动为 Octavia 注册资源

  2. Operator 在部署后为 Octavia 注册资源

第一种方法更简单,建议新用户使用。第二种方法提供了更大的灵活性,但代价是 operator 的复杂性。

选项 2:手动资源注册

在这种情况下,Kolla Ansible 不会为 Octavia 注册资源。在 globals.yml 中将 octavia_auto_configure 设置为 no

octavia_auto_configure: no

所有资源应在 service 项目中注册。可以按如下方式完成

. /etc/kolla/octavia-openrc.sh

注意

确保已执行 kolla-ansible post-deploy 并将 enable_octavia 设置为 yes 在 global.yml

注意

在 Train 及更早版本中,资源应在 admin 项目中注册。这通过 octavia_service_auth_project 配置,并且可以设置为 service 以避免升级到 Ussuri 时的破坏性更改。更改现有系统上的项目至少需要在新项目中注册一个新的安全组。理想情况下,flavor 和网络应在新项目中重新创建,尽管这会影响现有的 Amphorae。

Amphora flavor

在 Nova 中注册 flavor

openstack flavor create --vcpus 1 --ram 1024 --disk 2 "amphora" --private

记下 flavor 的 ID,或通过 --id 指定一个。

Keypair

在 Nova 中注册 keypair

openstack keypair create --public-key <path to octavia public key> octavia_ssh_key

网络和子网

在 Neutron 中注册管理网络和子网。这必须是一个 可从控制器访问的网络。通常使用 VLAN 提供程序网络。

OCTAVIA_MGMT_SUBNET=192.168.43.0/24
OCTAVIA_MGMT_SUBNET_START=192.168.43.10
OCTAVIA_MGMT_SUBNET_END=192.168.43.254

openstack network create lb-mgmt-net --provider-network-type vlan --provider-segment 107  --provider-physical-network physnet1
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

记下网络的 ID。

安全组

在 Neutron 中注册安全组。

openstack security group create lb-mgmt-sec-grp
openstack security group rule create --protocol icmp 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 9443 lb-mgmt-sec-grp

记下安全组的 ID。

Kolla Ansible 配置

以下选项应添加到 globals.yml 中。

设置先前注册的资源的 ID

octavia_amp_boot_network_list: <ID of lb-mgmt-net>
octavia_amp_secgroup_list: <ID of lb-mgmt-sec-grp>
octavia_amp_flavor_id: <ID of amphora flavor>

现在部署 Octavia

kolla-ansible deploy -i <inventory> --tags common,horizon,octavia

Amphora 镜像

有必要构建一个 Amphora 镜像。在 CentOS / Rocky 10 上

sudo dnf -y install epel-release
sudo dnf install -y debootstrap qemu-img git e2fsprogs policycoreutils-python-utils

在 Ubuntu 上

sudo apt -y install debootstrap qemu-utils git kpartx

获取 Octavia 源代码

git clone https://opendev.org/openstack/octavia -b <branch>

安装 diskimage-builder,最好在虚拟环境中

python3 -m venv dib-venv
source dib-venv/bin/activate
pip install diskimage-builder

创建 Amphora 镜像

cd octavia/diskimage-create
./diskimage-create.sh

获取 octavia 用户 openrc

. /etc/kolla/octavia-openrc.sh

注意

确保已执行 kolla-ansible post-deploy

在 Glance 中注册镜像

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

注意

标签应与 /etc/kolla/globals.yml 中的 octavia_amp_image_tag 匹配,默认情况下,标签为“amphora”,octavia 使用标签来确定要使用的镜像。

调试

SSH 到 amphora

登录到 octavia-worker 节点之一,并 ssh 到 amphora。

ssh -i /etc/kolla/octavia-worker/octavia_ssh_key ubuntu@<amphora_ip>

注意

amphora 私钥位于所有 octavia-worker 节点上的 /etc/kolla/octavia-worker/octavia_ssh_key 上。

升级

如果您从 Ussuri 版本升级,则必须在 globals.yml 中禁用 octavia_auto_configure 并保留以前的 octavia 配置。

开发或测试

Kolla Ansible 提供了一种简单的设置 Octavia 网络的方法,用于开发或测试,在使用 Neutron Open vSwitch ML2 机制驱动程序时。在这种情况下,Kolla Ansible 将创建一个租户网络并将 Octavia 控制服务配置为访问它。请勿在生产中使用此选项,网络可能不够可靠。

octavia_network_type 添加到 globals.yml 并将值设置为 tenant

octavia_network_type: "tenant"

接下来,按照正常的部署说明进行操作。

故障处理

在大型部署中,其中 neutron-openvswitch-agent 同步可能需要 5 分钟以上,您可能会在 octavia-interface.service systemd 单元上收到错误,因为它无法等待 o-hm0 接口是否已附加到 br-int,或者 Octavia 管理 VxLAN 是否已在该主机上配置。在这种情况下,您必须将 octavia_interface_wait_timeout 添加到 globals.yml 并将值设置为新的超时时间(秒)

octavia_interface_wait_timeout: 1800

在每个网络节点上最多有 2500 个网络端口的部署中,同步过程可能需要长达 30 分钟。但是,您必须根据部署大小考虑此值。

OVN 提供程序

本节涵盖 Octavia 配置,用于 OVN 驱动程序。有关完整详细信息,请参阅 Octavia 文档OVN Octavia 提供程序文档

要启用 OVN 提供程序,请在 globals.yml 中设置以下选项

octavia_provider_drivers: "ovn:OVN provider"
octavia_provider_agents: "ovn"