Wallaby 系列发布说明

8.0.1-89

已知问题

  • 当使用具有最新 SELinux 版本的发行版(例如 CentOS 8 Stream)时,PING health-monitor 无法工作,因为 shell_exec_t 调用被 SELinux 拒绝。

  • 修复了配置问题,该问题允许经过身份验证和授权的用户使用 API 请求将代码注入到 HAProxy 配置中。Octavia API 不再接受更新 healthmonitor 请求中 url_path 值中的未编码的空白字符。

升级说明

  • 更新 Netfilter Conntrack Sysfs 变量的修复需要重建 amphora 镜像才能生效。

安全问题

  • 当启用 “INFO” 级别消息且 jobboard 启用时,从 taskflow 日志中过滤掉私有信息。日志可能包含 TLS 证书和 private_key。默认情况下,在 Octavia 中,taskflow 中仅启用 WARNING 及以上级别的消息,并且 jobboard 已禁用。

错误修复

  • 修复了使用 ‘text/plain’ mime 类型与 healthcheck 端点的问题。

  • 修复了删除负载均衡器的最后一个监听器可能会触发故障转移的问题。

  • 增加了 TCP 缓冲区内存最大值并启用了 MTU ICMP 黑洞检测。

  • amphora 上生成的 RSyslog 配置现在支持使用 TCP 进行 RSyslog 故障转移,如果指定了多个 RSyslog 服务器。

  • 为了避免在批量更新时创建许多新成员时对 Neutron API 造成过大的压力,我们在批量更新成员 API 调用中缓存子网验证结果。我们还更改为仅在批量更新成员期间验证新成员,因为子网 ID 是不可变的。

  • 确保 rsyslog 使用提供的 rsyslog 配置文件,方法是重新启动该服务,这修复了在某些发行版中 rsyslog 在 cloud-init 之前启动时的日志卸载功能。

  • 确保 rsyslog 使用 amphorav1 提供程序中的 rsyslog 配置文件,方法是重新启动该服务,这修复了在某些发行版中 rsyslog 在 cloud-init 之前启动时的日志卸载功能。

  • taskflow 在 “INFO” 级别消息中记录了 taskflow Flow 的参数,其中包含 TLS 启用监听器和池参数,例如证书和 private_key。

  • 修复 amphora haproxy_count 以返回正在运行的 haproxy 进程的数量。

  • 修复了为 Centos Stream 9 构建 amphora 镜像时的问题。

  • 修复了为 RHEL 9 构建 amphora 镜像时的问题。

  • 修复了 amphorav1 中的一个错误,被删除的成员的子网并非立即从 amphora 上断开,而仅在成员下次更新时断开。

  • 修复了在使用应用程序凭证令牌或信任 ID 创建 TERMINATED_HTTPS 监听器时与 Barbican 相关的身份验证错误。

  • 修复了成员批量更新 API 调用中的潜在竞争条件,负载均衡器可能未被正确锁定。

  • 修复了在持久化 amphorav2 时可能发生的问题,ComputeActiveWait 在不同的控制器上被错误地执行了两次。

  • 修复了在 Centos 9 Stream 中重新加载服务器状态后出现的“损坏的全局服务器状态文件”错误。它还修复了 haproxy 重启后服务器的操作状态恢复问题。

  • 修复了禁用的 UDP 池。禁用的 UDP 池被标记为“OFFLINE”,但请求仍然转发到池的成员。

  • 正确检测成员操作状态“drain”在从 HAProxy 查询状态数据时。

  • 修复了驱动程序代理的关闭问题,该过程可能在等待线程完成时卡住。Systemd 会在超时后杀死该过程,但某些子进程可能会泄漏到控制器上。

  • 为 CentOS 或 RHEL amphora 镜像启用所需的 SELinux 布尔值。

  • 修复了在 jobboard_enabled=False 的情况下创建完全图的负载均衡器时出现的一个错误。

  • 修复了一个阻止 Octavia 在 SINGLE 拓扑模式下使用完全填充的负载均衡器 API 创建监听器的问题。

  • 修复了与在 HAProxy 状态之间保留状态的功能的向后兼容性问题。HAProxy 1.5 或更早版本不支持此功能,因此 Octavia 不会在使用这些版本的 amphorae 上激活它。

  • 修复了一个在创建、更新或删除 health-monitor 时发生错误时,无法将 health-monitor 的 provisioning_state 设置为 ERROR 的错误。

  • 修复了一个未将所有活动负载均衡器 Health Monitors 在填充的 LB 单个创建调用中设置为 ONLINE 的错误。

  • 修复了一个 IPv6 成员在添加后可能短暂地设置为 ERROR 操作状态的问题。

  • 修复了数据库中断期间负载均衡器卡在 PENDING_* 状态的问题。现在,当 Octavia 中的任务失败时,它会重试更新负载均衡器的 provisioning_status,直到数据库恢复(或在非常长的超时后放弃 - 大约 2 小时 45 分钟)

  • 修复了协议用于 PROXY 或 PROXYV2 的监听器创建失败的问题,这些是池协议而不是监听器协议。

  • 修复了更新监听器证书失败的问题。该修复确保现有的证书被正确覆盖。

  • 修复了 amphorav2 和持久化的问题,某些由控制器执行的长时间任务可能过早地在 taskflow 中释放,并在另一个控制器上重新调度。Octavia 现在通过使用 keepalive 机制通知 taskflow(及其 redis 后端)作业仍在运行,来确保任务不会过早释放。

  • 修复了一个处于 ERROR 操作状态的成员在负载均衡器配置更改期间可能短暂地更新为 ONLINE 的问题。

  • 修复了一个潜在的错误,在从新网络连接成员的同时删除另一个成员并断开其网络时,Octavia 可能会尝试将新网络连接到新接口,但接口名称已存在。此修复需要更新 Amphora 镜像。

  • 现在 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 端点。在修复之前,该参数无效。

  • 修改了默认的 Keepalived LVS 持久性粒度配置值,使其与 ipv6 兼容。

  • 修复了 Centos 8 Stream 上 PING health-monitor 的问题。Centos 和 systemd 的更改阻止了非特权用户从网络命名空间发送 ping 请求。

  • 修复了使用最新 haproxy 版本(>=2.2)的 PING health-monitor 的问题,haproxy 现在需要额外的“insecure-fork-wanted”选项才能授权 Octavia PING healthcheck。

  • 修复了在连接属于具有多个子网的网络上的子网时,amphora 中可能连接了错误的子网的问题。

  • 修复了在删除最后一个连接到网络的成员时,未删除不再使用的端口的问题。

  • 修复了一个未在创建完全填充的负载均衡器时将未连接池的 provisioning_status 设置为正确的错误。

  • 修复了在故障转移后更新具有 QoS 策略的负载均衡器时出现的问题,Octavia 尝试更新已删除 amphorae 的 VRRP 端口,将负载均衡器的配置状态移动到 ERROR。

  • 修复了 amphorav2 worker 中更新资源时可能出现的竞争条件。worker 没有等待资源设置为 PENDING_UPDATE,因此资源可能使用数据库中的旧数据进行更新,从而导致无操作更新。

  • 修复了成员批量更新 API 调用中的竞争条件,传递到 Octavia worker 服务的的数据在快速发送连续 API 调用时可能不正确。然后负载均衡器卡在 PENDING_UPDATE provisioning_status 中。

  • 修复了已恢复后重新调度 taskflow 任务的问题。

  • 修复了 amphora 上 lvs-masquerade.sh 脚本中的 SELinux 问题。该脚本已经以 root 权限运行,因此脚本内部使用 sudo 是不必要的。

  • 修复了基于 TCP 的 health-monitor 在 UDP 池上的 SELinux 问题,某些特定的监控端口被 SELinux 拒绝。Amphora 镜像现在启用了 keepalived_connect_any SELinux 布尔值,允许连接到任何端口。

  • 修复了在对具有两个 amphora 都缺失的 ACTIVE-STANDBY 负载均衡器进行故障转移时出现的问题。控制器中的某些任务花费了太多的时间才能超时,因为在 [haproxy_amphora].active_connection_max_retries[haproxy_amphora].active_connection_rety_interval 中定义的超时值未被使用。

  • 修复了在故障转移期间 amphora 无法访问时启动 VRRP 服务时超时过长的问题。在故障转移期间应使用更短的特定超时时间。

  • 修复了在使用持久化 amphorav2 驱动程序和 TLSContainer 时,数据模型中字节类型列表未正确转换为可序列化数据的问题。

  • 修复了一个在配置 amphora 中的成员接口时可能触发的竞争条件。由于竞争条件,网络接口可能从 amphora 中删除,导致连接丢失。

  • 修复了在删除 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 在数据库中创建对象时约束失败时返回了无用的消息。该错误现在包含违反约束的参数的名称和值。

  • 当连接新的成员子网时,amphora 会发送新分配的 IP 的 IP 广告。它允许同一 L2 网络上的服务器刷新先前分配的 IP 地址的 ARP 条目。

  • 使用 castellan_cert_manager 作为 cert_manager 得到了显著改进。现在可以在 octavia.conf 中定义 castellan 的配置选项,它们将被正确传递到 castellan 后端。这允许使用允许的 castellan 后端作为证书存储。

  • 减少 ACTIVE_STANDBY 负载均衡器的故障转移持续时间。在故障转移期间可能会尝试多次更新无法访问的 amphora,现在如果 amphora 在第一次更新时无法访问,则会跳过其他更新。

  • 减少当两个 amphora 都无法访问时 ACTIVE_STANDBY 负载均衡器的故障转移持续时间。

  • 验证 L7 策略的创建与 Amphora 驱动程序中监听器的协议兼容。L7 策略允许用于 Terminated HTTPS 或 HTTP 协议监听器,但不允许用于 HTTPS、TCP 或 UDP 协议监听器。

其他说明

  • 数据库模型对象的字符串表示形式已得到改进。调用 str() 会返回字段的某个子集,调用 repr() 会返回所有字段。这有助于调试,但也会更改 Octavia 发出的某些日志消息。

8.0.1

弃用说明

  • 配置选项 [amphora_agent].agent_server_network_file 现在已被弃用,Xena 中引入的新 Amphora 网络配置工具不支持单个配置文件。

错误修复

  • Amphora 网络配置现在使用 amphora-interface 工具应用于 VIP 接口和池成员接口。amphora-interface 使用 pyroute2 底层函数来配置接口,而不是特定于发行版的工具,例如“network-scripts”或“/etc/network/interfaces”文件。

  • 禁用 Amphora 中 TCP 流的 conntrack,这可以减少基于 HAProxy 的监听器的内存使用量,并防止一些内核警告关于丢弃的数据包。

  • 修复了 amphorav2 驱动程序的问题,Amphora 的故障转移会创建一个状态为 ERROR 的 Amphora。

  • 修复了负载均衡器创建失败的问题,当其中一个监听器端口与 octavia 生成的对等端口匹配,并且监听器上的 allowed_cidr 显式设置为 0.0.0.0/0 时。 这是由于创建了两个安全组规则,remote_ip_prefix 为 None 和 remote_ip_prefix 为 0.0.0.0/0,neutron 拒绝了第二个请求,因为安全组规则已存在。

  • 修复了在使用 host_routes 的 VIP 子网中启用 amphorav2 驱动程序持久性时的序列化错误。

  • 修复了 API 监听器 timeout_client_data、timeout_member_connect、timeout_member_data、timeout_tcp_inspect 的 MAX_TIMEOUT。 该值从 365 天减少到 24 天,现在不超过数据库中数据类型的允许值。

  • 修复了 amphora-haproxy 网络命名空间中的 lo 接口的问题。 lo 接口已关闭,并阻止 haproxy 在配置更改时与其他 haproxy 进程(用于持久粘性表)进行通信。 这延迟了旧的 haproxy worker 清理,并增加了重新加载配置后的内存消耗。

  • 增加了 amphora 中 nr_open 和 file-max 的限制值,新值基于 HAProxy 2.x 从系统期望的值,该系统具有 Octavia 可以设置的最大 maxconn 值。

  • 修复了一个负载均衡器的配置状态过早设置为 ERROR 的问题,导致在资源完成任务执行之前负载均衡器处于可变状态。

  • 修复了一个在 amphora 故障转移流程中可能将负载均衡器的配置状态设置为 PENDING_UPDATE 状态的问题。

  • 修复了使用 keepalived 和 lvs 的 UDP 和 SCTP 监听器的加权轮询算法。为了使加权轮询正常工作,必须将算法指定为 ‘wrr’,但它被设置为 ‘rr’。

8.0.0

新特性

  • 添加了对 keystone 默认角色和系统令牌范围的支持。

  • 将 aarch64/arm64 Amphora 镜像支持添加到磁盘镜像创建工具和 devstack 插件中。

  • HTTP/2 协议现在已添加到监听器和池的默认 ALPN 协议列表中。

  • 基于 CentOS 的 Amphora 镜像现在将安装由 CentOS NFV SIG 维护的 HAProxy 版本 2.2。其他受支持的发行版(Ubuntu Bionic、RHEL 8)保持不变。

  • 为启用了 TLS 的池添加了对 TLS 扩展应用程序层协议协商 (ALPN) 的支持。一个新的参数 alpn_protocols 已添加到 Pool API 中。

  • Octavia 提供程序驱动程序现在可以扩展以支持 TLS 启用的池和成员之间的 HTTP/2。

  • 通过 ALPN 协议协商为 TLS 启用的池添加了 Amphora 提供程序驱动程序中的 HTTP/2 over TLS 支持。

  • 当为 TERMINATED_HTTPS 监听器和启用了 TLS 的池启用 HTTP/2 时,并且 Amphora 镜像使用 HAProxy 2.0 或更高版本时,Octavia amphora 驱动程序现在支持 gRPC 协议。

  • 为 Amphora 驱动程序添加了对 SCTP 协议的支持。使用 keepalived 在 Amphora 中实现对 SCTP 监听器和池的支持。Amphora-health-checker 脚本提供对 SCTP 健康监视器的支持,并依赖于 INIT/INIT-ACK/ABORT 序列的数据包。

升级说明

  • 只要 [oslo_policy] enforce_scope = False 和 enforce_new_defaults = False 设置存在(这是当前的 oslo.policy 默认设置),旧版 Octavia 高级 RBAC 策略将继续按原样工作。但是,我们强烈建议您更新用户角色以遵循新的 keystone 默认角色,并根据需要开始使用范围令牌。有关更多信息,请参阅 Octavia 策略 管理员指南。

  • 对新功能(例如池上的 ALPN、池上的 HTTP/2、gRPC 和 SCTP)的支持需要更新的 Amphora 镜像。

  • 配置选项 [oslo_policy] policy_file 的默认值已从 policy.json 更改为 policy.yaml。正在使用自定义或先前生成的静态策略 JSON 文件的操作员应生成新的策略文件或将其转换为 YAML 格式。使用 oslopolicy-convert-json-to-yaml 工具以向后兼容的方式将 JSON 策略文件转换为 YAML 格式。

弃用说明

  • 从 Wallaby 版本开始,不使用 keystone 默认角色和/或令牌范围的旧版 Octavia 高级 RBAC 策略已被弃用。oslo.policy 项目可能会更改默认设置,在未来的版本中需要 keystone 默认角色和范围令牌。请参阅这些发布说明中的升级部分以及 Octavia 策略 管理员指南,了解更多信息。

  • JSON 策略文件在 Victoria 开发周期中被 oslo.policy 库弃用。因此,此弃用在 Wallaby 周期中被注意到,预计 oslo.policy 将在未来删除对它的支持。因此,操作员需要转换为 YAML 策略文件。请参阅升级说明以获取有关迁移任何自定义策略文件的详细信息。

错误修复

  • 修复了负载均衡器故障转移时,VIP 子网 IP 地址不足可能导致 VIP 被释放的问题。

  • 修复了批处理成员更新的问题,如果没有更改,则更新无法正确回滚。

  • 修复了 amphora 驱动程序池 ALPN 与旧版 amphora 镜像的兼容性。

  • 修复了一个负载均衡器创建由于获取 amphora VM 时出错而被中止的问题。

  • 修复了一个问题,负载均衡器故障转移后,amphora v2 负载均衡器无法访问。Amphora 端口中未设置负载均衡器的安全组。

  • 修复了监听器超时值默认值覆盖的问题。在配置文件中更改默认超时值没有正确应用于默认监听器参数。

  • 修复了一个问题,即提供程序驱动程序在删除时可能不会减少负载均衡器对象的配额。

  • 修复了一个问题,该问题可能导致负载均衡器,其中多个 amphora 处于失败状态,无法完成故障转移。

  • 修复了空 UDP 池的错误 operating_status。没有成员的 UDP 池现在为 ONLINE,而不是 OFFLINE

  • 由于在 amphora 中生成健康消息时存在格式问题,一些 IPv6 UDP 成员被错误地标记为 ERROR 状态。

  • 将缺少的 cloud-utils-growpart RPM 添加到基于 Red Hat 的 amphora 镜像中。

  • 将缺少的 cronie RPM 添加到基于 Red Hat 的 amphora 镜像中。

  • 修复了 Amphora 中的 nf_conntrack_buckets sysctl,其值被错误地设置。

  • 修复了一个问题,即更新池上的 CRL 或客户端证书会导致池进入 ERROR 状态。

  • 修复了一个具有 PROXYV2 的池会进入 ERROR 状态的错误。

  • 修复了使用 VIP 或成员子网中自定义 host_routes 的负载均衡器的问题。

  • 修复了一个在更新池中 tls_versionstls_ciphers 时,空(None)值会导致这些参数重置为默认值的问题。

  • 修复了健康检查端点始终通过缓存结果来查询后端的问题,缓存时间可配置,默认值为五秒。

  • 修复了一个错误,允许用户使用子网 UUID 在属于另一个用户的 vip_subnet_id 上创建负载均衡器。

  • 在 Octavia Amphora 驱动程序中添加一个验证步骤,以确保 VIP 网络的 port_security_enabled 参数已设置。

其他说明

  • diskimage-create.sh 的 Ubuntu 默认值现在是 focal。