Victoria 系列发布说明

7.1.2-38

已知问题

  • 当使用具有最新 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 已禁用。

错误修复

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

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

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

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

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

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

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

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

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

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

  • 修复了 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)。

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

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

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

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

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

  • 修复了在删除 CA/CRL 后更新/删除监听器的 client_ca_tls_container_ref 字段时出现的“无法检索证书”错误。

  • 修复了 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 状态的问题,当提供程序拒绝该调用时。

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

7.1.2

错误修复

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

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

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

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

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

  • 修复了 Amphora 中 rsyslog 配置文件的问题,当日志卸载功能和本地日志存储功能都禁用时。

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

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

  • 修复了 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 状态的问题。

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

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

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

7.1.1

错误修复

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

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

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

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

  • 修复了一个错误,导致使用 PROXYV2 的池进入 ERROR 状态。

  • 修复了一个问题,当更新池中的 tls_versionstls_ciphers 时,如果值为 null,则取消设置这些参数现在会将它们的值重置为默认值。

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

7.1.0

错误修复

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

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

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

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

7.0.0

新特性

  • 添加了对代理协议版本 2 的支持。

  • 通过 ALPN 协议协商向 amphora 提供程序驱动程序添加了对 TLS 上的 HTTP/2 的支持。该功能在具有 HAProxy 2.0 或更高版本的 amphora 镜像中可用。

  • 添加了删除未使用的 amphora 的能力。

  • 操作员现在可以使用 amphora 提供程序驱动程序中的 ‘amp_image_tag’ Octavia flavor 功能。这允许为每个负载均衡器使用自定义 amphora 镜像。如果未在 Octavia flavor 中定义此项,则 Octavia 配置文件中的 amp_image_tag 设置将继续使用。

  • 引入了镜像驱动程序接口。支持的驱动程序是 noop 和 Glance。

  • 将 l7policy 和 l7rule 添加到 octavia 配额中。

  • 为终止 TLS 的 HTTPS 负载均衡器添加了对 TLS 扩展应用程序层协议协商 (ALPN) 的支持。向 Listener API 添加了一个新的参数 alpn_protocols

  • Octavia 提供程序驱动程序现在可以通过 ALPN(协议协商)向客户端提供 TLS 上的 HTTP/2。

  • 为 devstack 插件和 amphora 添加了对 nftables 的支持。

  • 添加了对 SCTP 协议的支持。SCTP 支持已添加到 Octavia API 的 listener、pool 和 health-monitor 资源中。

  • 添加了一个新的配置设置 ([task_flow]/jobboard_enabled) 以启用/禁用 amphora v2 提供程序中的 jobboard 功能。禁用后,amphora v2 提供程序的行为类似于 amphora v1 提供程序,并且不需要额外的依赖项。默认设置是禁用 jobboard,同时 jobboard 仍然是一个实验性功能。

  • octavia.conf 中添加了 minimum_tls_version。Listener、pool 以及两者默认值将被阻止使用任何较低的 TLS 版本。默认情况下,没有最低版本。

  • 添加了一个新的配置选项,用于定义使用 Amphora 提供程序的新监听器的默认 connection_limit。该选项是 [haproxy_amphora].default_connection_limit,其默认值为 50,000。当创建或设置 connection_limit 参数为 -1 的监听器时,或者取消设置 connection_limit 参数时,将使用此值。

  • 启用 TLS 的池现在可以配置为仅使用指定版本的 TLS。可以使用 octavia.conf 中的 default_pool_tls_versions 设置新池的默认 TLS 版本。现有池将继续使用旧的默认值。

  • 负载均衡器统计信息现在可以通过简单地在配置中指定多个统计信息驱动程序来报告到多个后端位置。

  • octavia.conf 中添加了 tls_cipher_prohibit_list。Listener、pool 以及两者默认值将被阻止使用任何这些密码。默认情况下,没有禁止的密码。

  • 终止 TLS 的 Listener 现在可以配置为仅使用指定版本的 TLS。可以使用 octavia.conf 中的 default_listener_tls_versions 设置新 Listener 的默认 TLS 版本。现有 Listener 将继续使用旧的默认值。

升级说明

  • 当启用 amphora 提供程序驱动程序时,操作员需要设置选项 [controller_worker]/image_driver。默认镜像驱动程序是 image_glance_driver。为了测试,可以使用 image_noop_driver

  • 建议更新 amphora 镜像以获取解决 HAProxy 问题的工作方法,该问题会导致如果本地对等名称以 “-x” 开头,HAProxy 将无法重新加载。

  • 故障转移改进不需要更新 amphora 镜像,但更新现有的 amphora 可以最大限度地减少后续故障转移的停机时间(对于独立 amphora)。

  • 自 Queens 版本以来,选项 [controller_worker]/amp_ssh_access_allowed 已被弃用,现在已被删除。此选项已被 [controller_worker]/amp_ssh_key_name 选项取代。

  • 自 Mitaka 版本以来,选项 [controller_worker]/amp_image_id 已被弃用,现在已被删除。此选项已被 [controller_worker]/amp_image_tag 选项取代。

  • 负载均衡器统计信息收集的内部接口已更改。升级时,请参阅 stats_update_driver 配置选项的弃用说明,因为需要移动和重命名它。

  • 默认驱动程序已大部分切换为 live 驱动程序,Volume 和 distributor 仍设置为 noop 驱动程序,因为这些是实验性功能。操作员无需进行配置更改。

  • 终止 TLS 的 Listener 现在将默认仅允许 TLS1.2 和 TLS1.3。如果在 Listener 创建时未指定任何 TLS 版本,则 Listener 将仅接受 TLS1.2 和 TLS1.3 连接。以前 TLS Listener 将接受任何 TLS 版本。现有 Listener 不会更改。

弃用说明

  • 备用池支持已被弃用,等待在 X 版本中删除。最初建议使用备用池以提高配置速度,但由于 Nova 的服务器组不支持添加现有虚拟机,因此 Octavia 无法支持使用备用池与主动-待机拓扑。由于这是我们推荐的生产部署拓扑,并且速度在开发/测试环境中不太重要(我们唯一可以推荐使用单拓扑的地方),因此维护备用池支持的开销超过了其理论用途。

  • 诸如 blacklist 之类的术语已被更具包容性的词语(例如 prohibit list)所取代,尽可能地使用。

    配置选项 tls_cipher_blacklist 已被弃用,并替换为 tls_cipher_prohibit_list。它将在未来的版本中删除。

  • 已删除弃用的选项 status_update_threads,应使用 health_update_threadsstats_update_threads 代替。

  • 选项 health_manager.health_update_driver 已被弃用,因为它从未真正使用过,因此删除了驱动程序层。选项 health_manager.stats_update_driver 已移动并重命名为 controller_worker.statistics_drivers(请注意现在是复数)。现在它可以包含一个用于处理统计信息的驱动程序列表。

安全问题

  • 如果您使用的是 admin_or_owner-policy.yaml 策略覆盖文件,则应升级您的 API 进程以包含 unscoped token 的修复。

错误修复

  • 修复了一个问题,当负载均衡器被禁用时,Octavia Health Manager 会继续故障转移 amphorae。

  • 修复了一个问题,即添加到启用 TLS 的池中的成员会进入 ERROR 供应状态。

  • 修复了一个问题,即在活动/待机对中的配对 amphora 在 neutron 中缺少 VRRP 端口时,amphora 故障转移会失败。

  • 修复了一个问题,即设置 SNI 容器在监听器更新 API 调用中没有应用。

  • 修复了监听器更新 API 中 Octavia 验证,SNI 容器可以设置为非 TERMINATED_HTTPS 监听器。

  • 修复了一个问题,即 API 列表调用中的某些列不能用于排序键。

  • 修复了故障转移操作的 CADF 审计映射文件中的一个问题,该问题可能导致 keystonemiddleware 引发异常。

  • 修复了一个问题,当 barbican 服务启用 TLS 时,我们创建监听器失败。

  • 修复了禁用 UDP 监听器的运行状态。禁用 UDP 监听器的运行状态现在为 OFFLINE,而不是 ONLINE,其行为与 HTTP/HTTPS/TCP/... 监听器的行为类似。

  • 修复了一个问题,清除 Listener TLS 版本会导致服务器端错误。

  • 修复了一个问题,清除 Listener TLS 版本和密码不会应用 API 配置设置中定义的默认值。

  • 修复了一个问题,当 Nova 反亲和性启用且拓扑为 SINGLE 时,amphora 负载均衡器无法创建。

  • 规避了 HAProxy 问题,该问题会导致如果本地对等名称以 “-x” 开头,HAProxy 将无法重新加载配置更改。

  • 修复了一个问题,即监听器 “insert_headers” 参数被接受用于不支持标头插入的协议。

  • 修复了一个问题,即启用 TLS 的池无法供应。

  • 修复了一个问题,即仅 UDP 负载均衡器不会启动 VIP 地址。

  • 修复了一个潜在的无效 DOWN 运行状态,适用于 UDP 池的成员。在将新成员添加到池后构建第一个心跳消息时,可能会发生竞争条件,最近添加的成员可能被视为 DOWN。

  • 修复了在使用 admin_or_owner-policy.yaml 策略覆盖文件和 unscoped token 时的问题。

  • 使用 haproxy 1.8.x 版本时,由于预分配的数据结构,haproxy 在 amphorae 中消耗更多的内存。此内存量取决于其配置文件中的 maxconn 参数(与 Octavia API 中的 connection_limit 参数相关)。在 Amphora 提供程序中,默认 connection_limit 值 -1 现在转换为 maxconn 的 50,000。之前为 1,000,000,但该值在快速执行负载均衡器的多个配置更新时会触发一些内存分配问题。

  • 显著提高了 amphora 和负载均衡器故障转移的可靠性和性能。当 Nova 服务遇到故障时,尤其如此。

其他说明

  • 虽然一些发行版中使用的当前 HAProxy 版本 1.8 支持 HTTP/2,但我们强烈建议在 amphora 镜像中使用 HAProxy 版本 2.0 或更高版本来使用 HTTP/2。