Ubuntu 安装与配置¶
本节描述了如何在 Ubuntu 18.04 (LTS) 上安装和配置负载均衡器服务。
先决条件¶
在安装和配置服务之前,您必须创建一个数据库、服务凭证和 API 端点。
创建数据库,请完成以下步骤
使用数据库访问客户端以
root用户身份连接到数据库服务器# mysql创建
octavia数据库CREATE DATABASE octavia;授予
octavia数据库适当的访问权限GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'localhost' \ IDENTIFIED BY 'OCTAVIA_DBPASS'; GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'%' \ IDENTIFIED BY 'OCTAVIA_DBPASS';
将 OCTAVIA_DBPASS 替换为合适的密码。
退出数据库访问客户端。
exit;
激活
admin凭证以访问仅管理员可用的 CLI 命令$ . admin-openrc
要创建 Octavia 服务凭证,请完成以下步骤
创建
octavia用户$ openstack user create --domain default --password-prompt octavia User Password: Repeat User Password: +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | b18ee38e06034b748141beda8fc8bfad | | name | octavia | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+
将
admin角色添加到octavia用户$ openstack role add --project service --user octavia admin
注意
此命令不会产生任何输出。
注意
Octavia 服务不需要完整的 admin 角色。关于如何在没有 admin 角色的情况下运行 Octavia 的详细信息将在本文档的未来版本中提供。
创建 octavia 服务实体
$ openstack service create --name octavia --description "OpenStack Octavia" load-balancer +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | OpenStack Octavia | | enabled | True | | id | d854f6fff0a64f77bda8003c8dedfada | | name | octavia | | type | load-balancer | +-------------+----------------------------------+
创建负载均衡器服务 API 端点
$ openstack endpoint create --region RegionOne \ load-balancer public http://controller:9876 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 47cf883de46242c39f147c52f2958ebf | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | d854f6fff0a64f77bda8003c8dedfada | | service_name | octavia | | service_type | load-balancer | | url | http://controller:9876 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ load-balancer internal http://controller:9876 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 225aef8465ef4df48a341aaaf2b0a390 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | d854f6fff0a64f77bda8003c8dedfada | | service_name | octavia | | service_type | load-balancer | | url | http://controller:9876 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ load-balancer admin http://controller:9876 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 375eb5057fb546edbdf3ee4866179672 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | d854f6fff0a64f77bda8003c8dedfada | | service_name | octavia | | service_type | load-balancer | | url | http://controller:9876 | +--------------+----------------------------------+
创建 octavia-openrc 文件
cat << EOF >> $HOME/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=OCTAVIA_PASS export OS_AUTH_URL=http://controller:5000 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 export OS_VOLUME_API_VERSION=3 EOF
将 OCTAVIA_PASS 替换为您在 Identity 服务中为 octavia 用户选择的密码。
激活
octavia凭证以访问 octavia CLI 命令$ . $HOME/octavia-openrc
创建 amphora 镜像
有关创建 amphora 镜像,请参阅 构建 Octavia Amphora 镜像。
上传 amphora 镜像
$ openstack image create --disk-format qcow2 --container-format bare \ --private --tag amphora \ --file <path to the amphora image> amphora-x64-haproxy
为 amphora 镜像创建一个 flavor
$ openstack flavor create --id 200 --vcpus 1 --ram 1024 \ --disk 2 "amphora" --private
安装和配置组件¶
安装软件包
# apt install octavia-api octavia-health-manager octavia-housekeeping \ octavia-worker python3-octavia python3-octaviaclient
如果 octavia-common 和 octavia-api 包要求您进行配置,请选择“否”。
创建证书
$ git clone https://opendev.org/openstack/octavia.git $ 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
对于生产环境,请参阅 Octavia 证书配置指南。
激活
octavia凭证以访问 octavia CLI 命令$ . octavia-openrc
创建安全组及其规则
$ 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 $ openstack security group create lb-health-mgr-sec-grp $ openstack security group rule create --protocol udp --dst-port 5555 lb-health-mgr-sec-grp
创建一个密钥对以登录到 amphora 实例
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
注意
提前检查 “ ~/.ssh/id_rsa.pub” 文件是否存在。如果文件不存在,请运行 ssh-keygen 命令创建它。
为 dhclient 创建 dhclient.conf 文件
$ cd $HOME $ sudo mkdir -m755 -p /etc/dhcp/octavia $ sudo cp octavia/etc/dhcp/dhclient.conf /etc/dhcp/octavia
创建网络
注意
在执行以下命令期间,请将 BRNAME 和 MGMT_PORT_MAC 保存到记事本中以供进一步参考。
$ OCTAVIA_MGMT_SUBNET=172.16.0.0/12 $ OCTAVIA_MGMT_SUBNET_START=172.16.0.100 $ OCTAVIA_MGMT_SUBNET_END=172.16.31.254 $ OCTAVIA_MGMT_PORT_IP=172.16.0.2 $ 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
主机重新启动后,需要以下设置来创建 veth 对
编辑
/etc/systemd/network/o-hm0.network文件[Match] Name=o-hm0 [Network] DHCP=yes
编辑
/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
编辑
/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
您需要将 $MGMT_PORT_MAC 和 $BRNAME 替换为您的环境中的值。
编辑
/etc/octavia/octavia.conf文件在
[database]部分,配置数据库访问[database] connection = mysql+pymysql://octavia:OCTAVIA_DBPASS@controller/octavia
将 OCTAVIA_DBPASS 替换为您为 Octavia 数据库选择的密码。
在
[DEFAULT]部分,配置 RabbitMQ 消息代理的传输 URL。[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller
将 RABBIT_PASS 替换为您在 RabbitMQ 中为 openstack 帐户选择的密码。
在
[oslo_messaging]部分,配置 RabbitMQ 消息代理的传输 URL 和主题名称。[oslo_messaging] ... topic = octavia_prov
将 RABBIT_PASS 替换为您在 RabbitMQ 中为 openstack 帐户选择的密码。
在
[api_settings]部分,配置要绑定的主机 IP 和端口。[api_settings] bind_host = 0.0.0.0 bind_port = 9876
在
[keystone_authtoken]部分,配置身份服务访问。[keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = octavia password = OCTAVIA_PASS
将 OCTAVIA_PASS 替换为您在 Identity 服务中为 octavia 用户选择的密码。
在
[service_auth]部分,配置使用其他 openstack 服务所需的凭证[service_auth] auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = octavia password = OCTAVIA_PASS
将 OCTAVIA_PASS 替换为您在 Identity 服务中为 octavia 用户选择的密码。
在
[certificates]部分,配置 CA 证书、用于签名的私钥和密码的绝对路径。[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
注意
ca_private_key_passphrase 和 server_certs_key_passphrase 的值是默认值,不应在生产环境中使用。server_certs_key_passphrase 必须是 base64 兼容且长度为 32 个字符的字符串。
在
[haproxy_amphora]部分,配置客户端证书和 CA。[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]部分,配置心跳的 IP 和端口号。[health_manager] ... bind_port = 5555 bind_ip = 172.16.0.2 controller_ip_port_list = 172.16.0.2:5555
在
[controller_worker]部分,配置 worker 设置。[controller_worker] ... amp_image_owner_id = <id of service project> amp_image_tag = amphora amp_ssh_key_name = mykey amp_secgroup_list = <lb-mgmt-sec-grp_id> amp_boot_network_list = <lb-mgmt-net_id> amp_flavor_id = 200 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
填充 octavia 数据库
# octavia-db-manage --config-file /etc/octavia/octavia.conf upgrade head
完成安装¶
重启服务
# systemctl restart octavia-api octavia-health-manager octavia-housekeeping octavia-worker