Zed 系列发布说明¶
11.0.3¶
错误修复¶
修复了更新带有空“delay”参数的 UDP 健康检查器时出现的错误。
修复了请求中的“limit”参数小于或等于 0 时的问题。现在它会根据 pagination_max_limit 按照预期返回资源,而不是报错。
修复了 amphora-driver 中带有 ALPN 协议的池上的 HTTP/HTTPS 健康监控的错误。 haproxy 发送的健康检查被后端服务器标记为错误请求。 更新了 haproxy 配置,以便健康检查也使用 ALPN。
修复了 amphora-driver 中的 TLS-HELLO 健康监控。
修复了 Amphora VM 重新启动后 nf_conntrack* 选项值丢失的问题。 更多详情 Story 2010795
修复了 Tags 对象与其他 Octavia 资源之间的关系警告。
11.0.2¶
升级说明¶
一个修复 VIP 端口由于缺少 IP 规则而无法访问的问题的补丁,需要更新 Amphora 镜像。
错误修复¶
修复了使用 ‘text/plain’ mime 类型与 healthcheck 端点的问题。
修复了删除负载均衡器的最后一个监听器可能会触发故障转移的问题。
修复了在使用主题为空或缺少 CN 的证书时出现的问题。
allowed_cidr 参数的验证仅考虑了主 VIP 的 IP 版本。 仅匹配附加 VIP 版本 CIDR 被拒绝。 这已得到修复,CIDR 现在与所有 VIP 的 IP 版本进行匹配。
修复 amphora haproxy_count 以返回正在运行的 haproxy 进程的数量。
修复了 amphorav1 中的一个错误,被删除的成员的子网并非立即从 amphora 上断开,而仅在成员下次更新时断开。
修复了在添加或删除成员时,Octavia 可能会通过添加或删除其他子网重新配置 amphora 的管理端口的问题。 Octavia 在这些任务期间不再更新管理端口。
修复了一个由于在 Amphora 中删除某些 IP 规则而可能导致 VIP 端口无法访问的错误。只有在从不是 VIP 子网但作为成员子网连接的子网发送请求时才会触发此错误。
修复了数据库中断期间负载均衡器卡在
PENDING_*状态的问题。现在,当 Octavia 中的任务失败时,它会重试更新负载均衡器的provisioning_status,直到数据库恢复(或在非常长的超时后放弃 - 大约 2 小时 45 分钟)
修复了 octavia-status 中报告的在使用默认 amphora 别名时,amphorav2 驱动程序的错误状态的问题。
修改了默认的 Keepalived LVS 持久性粒度配置值,使其与 ipv6 兼容。
修复了成员批量更新 API 调用中的竞争条件,传递到 Octavia worker 服务的的数据在快速发送连续 API 调用时可能不正确。然后负载均衡器卡在 PENDING_UPDATE provisioning_status 中。
修复了在故障转移期间 amphora 无法访问时启动 VRRP 服务时超时过长的问题。在故障转移期间应使用更短的特定超时时间。
减少 ACTIVE_STANDBY 负载均衡器的故障转移持续时间。在故障转移期间可能会尝试多次更新无法访问的 amphora,现在如果 amphora 在第一次更新时无法访问,则会跳过其他更新。
减少当两个 amphora 都无法访问时 ACTIVE_STANDBY 负载均衡器的故障转移持续时间。
其他说明¶
添加了 Noop 证书管理器。 现在,任何使用 noop 驱动程序的 Octavia 证书操作都将更快(因为它们不会被验证)。
11.0.1¶
安全问题¶
当启用 “INFO” 级别消息且 jobboard 启用时,从 taskflow 日志中过滤掉私有信息。日志可能包含 TLS 证书和 private_key。默认情况下,在 Octavia 中,taskflow 中仅启用 WARNING 及以上级别的消息,并且 jobboard 已禁用。
错误修复¶
添加了一个过滤器,用于隐藏在禁用 jobboard 时创建 amphora 时出现的虚假 ComputeWaitTimeoutException 异常。此异常是创建负载均衡器或 amphora 流程的一部分,不应向用户显示。
taskflow 在 “INFO” 级别消息中记录了 taskflow Flow 的参数,其中包含 TLS 启用监听器和池参数,例如证书和 private_key。
修复了在使用应用程序凭证令牌或信任 ID 创建 TERMINATED_HTTPS 监听器时与 Barbican 相关的身份验证错误。
修复了成员批量更新 API 调用中的潜在竞争条件,负载均衡器可能未被正确锁定。
修复了在 Centos 9 Stream 中重新加载服务器状态后出现的“损坏的全局服务器状态文件”错误。它还修复了 haproxy 重启后服务器的操作状态恢复问题。
修复了在 jobboard_enabled=False 的情况下创建完全图的负载均衡器时出现的一个错误。
修复了一个阻止 Octavia 在 SINGLE 拓扑模式下使用完全填充的负载均衡器 API 创建监听器的问题。
修复了与在 HAProxy 状态之间保留状态的功能的向后兼容性问题。HAProxy 1.5 或更早版本不支持此功能,因此 Octavia 不会在使用这些版本的 amphorae 上激活它。
修复了一个未将所有活动负载均衡器 Health Monitors 在填充的 LB 单个创建调用中设置为 ONLINE 的错误。
修复了一个错误,该错误阻止了在
controller_ip_port_list中用方括号括起来的 IPv6 地址设置健康监控的 operating_status 为 ONLINE。
修复了一个潜在的错误,在从新网络连接成员的同时删除另一个成员并断开其网络时,Octavia 可能会尝试将新网络连接到新接口,但接口名称已存在。此修复需要更新 Amphora 镜像。
修复了 Centos 8 Stream 上 PING health-monitor 的问题。Centos 和 systemd 的更改阻止了非特权用户从网络命名空间发送 ping 请求。
修复了一个未在创建完全填充的负载均衡器时将未连接池的 provisioning_status 设置为正确的错误。
修复了基于 TCP 的 health-monitor 在 UDP 池上的 SELinux 问题,某些特定的监控端口被 SELinux 拒绝。Amphora 镜像现在启用了
keepalived_connect_anySELinux 布尔值,允许连接到任何端口。
当连接新的成员子网时,amphora 会发送新分配的 IP 的 IP 广告。它允许同一 L2 网络上的服务器刷新先前分配的 IP 地址的 ARP 条目。
11.0.0¶
新特性¶
现在可以使用 controller_worker 选项组中的新配置设置“amp_timezone”配置 amphora 的时区。
Octavia 现在支持负载均衡器创建、删除和更新操作的 oslo.message 通知。
可以设置一个新的配置选项
failover_threshold来限制同时待处理故障转移的 amphorae 数量,从而停止自动故障转移过程。这有助于防止因 AZ 网络中断或数据库变为只读等情况而发生的意外大规模故障转移事件。此功能默认未启用,应根据环境的大小谨慎配置。例如,对于 100 个 amphorae,一个好的阈值可能是 20 或 30,或者大于预计单个主机上的 amphorae 数量的值。
现在可以创建具有多个 VIP 的负载均衡器。create body 中有一个新的结构
additional_vips,允许指定子网,并可选地指定 IP。所有 VIP 子网必须属于同一网络。
已知问题¶
当使用具有最新 SELinux 版本的发行版(例如 CentOS 8 Stream)时,PING health-monitor 无法工作,因为 shell_exec_t 调用被 SELinux 拒绝。
修复了配置问题,该问题允许经过身份验证和授权的用户使用 API 请求将代码注入到 HAProxy 配置中。Octavia API 不再接受更新 healthmonitor 请求中 url_path 值中的未编码的空白字符。
升级说明¶
在 oslo_messaging 命名空间中提供了一个新的选项来禁用 event_notifications。
diskimage-create.sh 中输出文件的默认值已更改。现在是 amphora-x64-haproxy.qcow2,而不是 amphora-x64-haproxy。
更新 Netfilter Conntrack Sysfs 变量的修复需要重建 amphora 镜像才能生效。
将 Python 基本版本从 3.6 升级到 3.8。根据 Openstack Python 运行时版本策略,Python 3.8 将是 Zed 发布周期中的最低 Python 版本。
为了支持多 VIP 负载均衡器,必须构建一个新的 amphora 镜像。在升级之前上传新镜像是安全的,因为它完全向后兼容。
diskimage-create 默认现在选择 RHEL 作为基本 OS 时选择发行版 9,选择 CentOS 作为基本 OS 时选择发行版 9-stream。
弃用说明¶
‘amphorav1’ 提供程序已被弃用,将在未来的版本中删除。请使用 ‘amphora’ 提供程序(‘amphorav2’ 的别名)代替。
错误修复¶
为了避免在批量更新时创建许多新成员时对 Neutron API 造成过大的压力,我们在批量更新成员 API 调用中缓存子网验证结果。我们还更改为仅在批量更新成员期间验证新成员,因为子网 ID 是不可变的。
diskimage-create.sh 使用 $AMP_OUTPUTFILENAME.$AMP_IMAGETYPE 构建镜像文件路径时检查文件大小,这不正确并导致“没有该文件或目录”错误。
确保 rsyslog 使用 amphorav1 提供程序中的 rsyslog 配置文件,方法是重新启动该服务,这修复了在某些发行版中 rsyslog 在 cloud-init 之前启动时的日志卸载功能。
修复了在持久化 amphorav2 时可能发生的问题,ComputeActiveWait 在不同的控制器上被错误地执行了两次。
修复了禁用的 UDP 池。禁用的 UDP 池被标记为“OFFLINE”,但请求仍然转发到池的成员。
修复了驱动程序代理的关闭问题,该过程可能在等待线程完成时卡住。Systemd 会在超时后杀死该过程,但某些子进程可能会泄漏到控制器上。
为 CentOS 或 RHEL amphora 镜像启用所需的 SELinux 布尔值。
修复了一个在创建、更新或删除 health-monitor 时发生错误时,无法将 health-monitor 的 provisioning_state 设置为 ERROR 的错误。
修复了协议用于 PROXY 或 PROXYV2 的监听器创建失败的问题,这些是池协议而不是监听器协议。
修复了更新监听器证书失败的问题。该修复确保现有的证书被正确覆盖。
现在 amphora 上设置了 net.netfilter.nf_conntrack_max 和 nf_conntrack_expect_max Netfilter Conntrack Sysfs 变量为合理的值。 以前,使用了内核默认值,这些值对于配置的 net.netfilter.nf_conntrack_buckets 值来说太低了。 因此,数据包可能会因为 conntrack 表填充过快而丢失。 请注意,这仅影响 UDP 和 SCTP 协议监听器。 amphora 上禁用 TCP 连接的连接跟踪,包括 HTTP(S)。
现在
[nova] service_name参数可有效地用于在 keystone 目录中查找 nova 端点。在修复之前,该参数无效。
修复了使用最新 haproxy 版本(>=2.2)的 PING health-monitor 的问题,haproxy 现在需要额外的“insecure-fork-wanted”选项才能授权 Octavia PING healthcheck。
修复了在连接属于具有多个子网的网络上的子网时,amphora 中可能连接了错误的子网的问题。
修复了在删除最后一个连接到网络的成员时,未删除不再使用的端口的问题。
修复了在故障转移后更新具有 QoS 策略的负载均衡器时出现的问题,Octavia 尝试更新已删除 amphorae 的 VRRP 端口,将负载均衡器的配置状态移动到 ERROR。
修复了 amphorav2 worker 中更新资源时可能出现的竞争条件。worker 没有等待资源设置为 PENDING_UPDATE,因此资源可能使用数据库中的旧数据进行更新,从而导致无操作更新。
修复了已恢复后重新调度 taskflow 任务的问题。
修复了 amphora 上 lvs-masquerade.sh 脚本中的 SELinux 问题。该脚本已经以 root 权限运行,因此脚本内部使用 sudo 是不必要的。
修复了在对具有两个 amphora 都缺失的 ACTIVE-STANDBY 负载均衡器进行故障转移时出现的问题。控制器中的某些任务花费了太多的时间才能超时,因为在
[haproxy_amphora].active_connection_max_retries和[haproxy_amphora].active_connection_rety_interval中定义的超时值未被使用。
修复了在使用持久化 amphorav2 驱动程序和 TLSContainer 时,数据模型中字节类型列表未正确转换为可序列化数据的问题。
修复了在删除 CA/CRL 后更新/删除监听器的 client_ca_tls_container_ref 字段时出现的“无法检索证书”错误。
修复了一个 python3 错误,该错误阻止了在构建 amphorae 时使用
[controller_worker]/user_data_config_drive选项。
修复了 L7 规则和会话 cookie API 中的验证,以防止经过身份验证和授权的用户将代码注入到 HAProxy 配置中。CR 和 LF (\r 和 \n) 不允许在 L7 规则键和值中使用。会话持久性 cookie 名称必须遵循 https://mdn.org.cn/en-US/docs/Web/HTTP/Headers/Set-Cookie 中描述的规则。
修复了在某些 API 调用(POST /l7rule、PUT /pool)中负载均衡器卡在 PENDING_UPDATE 状态的问题,当提供程序拒绝该调用时。
Octavia API 在数据库中创建对象时约束失败时返回了无用的消息。该错误现在包含违反约束的参数的名称和值。
验证 L7 策略的创建与 Amphora 驱动程序中监听器的协议兼容。L7 策略允许用于 Terminated HTTPS 或 HTTP 协议监听器,但不允许用于 HTTPS、TCP 或 UDP 协议监听器。
其他说明¶
netaddr python 模块已被删除,不再是 Octavia 的要求。它已被 Python 标准库 ‘ipaddress’ 模块取代。
已添加管理文档页面,以解释可用的事件、通知格式以及如何禁用事件通知。
数据库模型对象的字符串表示形式已得到改进。调用 str() 会返回字段的某个子集,调用 repr() 会返回所有字段。这有助于调试,但也会更改 Octavia 发出的某些日志消息。