Xena 系列发布说明

9.1.0-40

升级说明

  • 一个修复 VIP 端口由于缺少 IP 规则而无法访问的问题的补丁,需要更新 Amphora 镜像。

安全问题

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

错误修复

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

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

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

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

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

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

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

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

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

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

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

  • 修复了一个由于在 Amphora 中删除某些 IP 规则而可能导致 VIP 端口无法访问的错误。只有在从不是 VIP 子网但作为成员子网连接的子网发送请求时才会触发此错误。

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

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

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

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

  • 现在 [nova] service_name 参数可有效地用于在 keystone 目录中查找 nova 端点。在修复之前,该参数无效。

  • 修复了 octavia-status 中报告的在使用默认 amphora 别名时,amphorav2 驱动程序的错误状态的问题。

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

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

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

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

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

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

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

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

  • 修复了一个 python3 错误,该错误阻止了在构建 amphorae 时使用 [controller_worker]/user_data_config_drive 选项。

  • Octavia API 在数据库中创建对象时约束失败时返回了无用的消息。该错误现在包含违反约束的参数的名称和值。

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

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

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

  • 修复了 Tags 对象与其他 Octavia 资源之间的关系警告。

9.1.0

已知问题

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

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

升级说明

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

错误修复

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 现在 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)。

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

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

  • 修复了在故障转移后更新具有 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 协议监听器。

其他说明

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

9.0.1

错误修复

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

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

9.0.0

新特性

  • AmphoraV2 提供程序在早期版本中引入,现在是 Octavia 的默认 Amphora 提供程序。 可用别名 amphorav1 用于旧版本的 Amphora 提供程序。 别名 amphorav2 现在与 amphora 相同。 默认情况下,jobboard(使用持久性存储)未启用,可通过 task_flow 部分中的 jobboard_enabled 选项进行配置。

升级说明

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

  • 备用池功能在 Victoria 版本中已被弃用后已删除。 升级控制器后,备用 amphora 将由 Octavia health-manager 服务自动删除。

弃用说明

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

错误修复

  • 修复了 amphora 驱动程序池 ALPN 与旧 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 拒绝了第二个请求,因为安全组规则已存在。

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

  • 修复了在使用 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 值。

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

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

其他说明

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