Ussuri 系列发布说明¶
6.2.2-39¶
已知问题¶
当使用具有最新 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 是不可变的。
禁用 Amphora 中 TCP 流的 conntrack,这可以减少基于 HAProxy 的监听器的内存使用量,并防止一些内核警告关于丢弃的数据包。
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)。
修复了一个负载均衡器的配置状态过早设置为 ERROR 的问题,导致在资源完成任务执行之前负载均衡器处于可变状态。
修复了一个在 amphora 故障转移流程中可能将负载均衡器的配置状态设置为 PENDING_UPDATE 状态的问题。
修复了在故障转移后更新具有 QoS 策略的负载均衡器时出现的问题,Octavia 尝试更新已删除 amphorae 的 VRRP 端口,将负载均衡器的配置状态移动到 ERROR。
修复了 amphorav2 worker 中更新资源时可能出现的竞争条件。worker 没有等待资源设置为 PENDING_UPDATE,因此资源可能使用数据库中的旧数据进行更新,从而导致无操作更新。
修复了在对具有两个 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 协议监听器。
6.2.2¶
错误修复¶
修复了负载均衡器创建失败的问题,当其中一个监听器端口与 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 中 nr_open 和 file-max 的限制值,新值基于 HAProxy 2.x 从系统期望的值,该系统具有 Octavia 可以设置的最大 maxconn 值。
6.2.1¶
错误修复¶
修复了批处理成员更新的问题,如果没有更改,则更新无法正确回滚。
修复了一个问题,负载均衡器故障转移后,amphora v2 负载均衡器无法访问。Amphora 端口中未设置负载均衡器的安全组。
修复了一个问题,即提供程序驱动程序在删除时可能不会减少负载均衡器对象的配额。
修复了 Amphora 中 rsyslog 配置文件的问题,当日志卸载功能和本地日志存储功能都禁用时。
由于在 amphora 中生成健康消息时存在格式问题,一些 IPv6 UDP 成员被错误地标记为 ERROR 状态。
修复了
amphora-haproxy网络命名空间中的lo接口的问题。lo接口已关闭,并阻止 haproxy 在配置更改时与其他 haproxy 进程(用于持久粘性表)进行通信。 这延迟了旧的 haproxy worker 清理,并增加了重新加载配置后的内存消耗。
修复了使用 VIP 或成员子网中自定义 host_routes 的负载均衡器的问题。
修复了使用 keepalived 和 lvs 的 UDP 监听器的加权轮询算法。为了使加权轮询正常工作,必须将算法指定为 ‘wrr’,但实际上被设置为 ‘rr’。
修复了健康检查端点始终通过缓存结果来查询后端的问题,缓存时间可配置,默认值为五秒。
修复了一个错误,允许用户使用子网 UUID 在属于另一个用户的
vip_subnet_id上创建负载均衡器。
6.2.0¶
错误修复¶
修复了负载均衡器故障转移时,VIP 子网 IP 地址不足可能导致 VIP 被释放的问题。
修复了一个问题,即添加到启用 TLS 的池中的成员会进入 ERROR 供应状态。
修复了监听器超时值默认值覆盖的问题。在配置文件中更改默认超时值没有正确应用于默认监听器参数。
修复了禁用 UDP 监听器的运行状态。禁用 UDP 监听器的运行状态现在为 OFFLINE,而不是 ONLINE,其行为与 HTTP/HTTPS/TCP/... 监听器的行为类似。
修复了一个问题,该问题可能导致负载均衡器,其中多个 amphora 处于失败状态,无法完成故障转移。
修复了空 UDP 池的错误
operating_status。没有成员的 UDP 池现在为ONLINE,而不是OFFLINE。
将缺少的 cloud-utils-growpart RPM 添加到基于 Red Hat 的 amphora 镜像中。
将缺少的 cronie RPM 添加到基于 Red Hat 的 amphora 镜像中。
修复了 Amphora 中的 nf_conntrack_buckets sysctl,其值被错误地设置。
修复了一个问题,即更新池上的 CRL 或客户端证书会导致池进入 ERROR 状态。
修复了一个问题,即启用 TLS 的池无法供应。
修复了一个潜在的无效 DOWN 运行状态,适用于 UDP 池的成员。在将新成员添加到池后构建第一个心跳消息时,可能会发生竞争条件,最近添加的成员可能被视为 DOWN。
在 Octavia Amphora 驱动程序中添加一个验证步骤,以确保 VIP 网络的 port_security_enabled 参数已设置。
6.1.0¶
新特性¶
添加了一个新的配置选项,用于定义使用 Amphora 提供程序的新监听器的默认 connection_limit。该选项是 [haproxy_amphora].default_connection_limit,其默认值为 50,000。当创建或设置 connection_limit 参数为 -1 的监听器时,或者取消设置 connection_limit 参数时,将使用此值。
升级说明¶
故障转移改进不需要更新 amphora 镜像,但更新现有的 amphora 可以最大限度地减少后续故障转移的停机时间(对于独立 amphora)。
安全问题¶
如果您使用的是 admin_or_owner-policy.yaml 策略覆盖文件,则应升级您的 API 进程以包含 unscoped token 的修复。
错误修复¶
修复了一个问题,即在活动/待机对中的配对 amphora 在 neutron 中缺少 VRRP 端口时,amphora 故障转移会失败。
修复了一个问题,即设置 SNI 容器在监听器更新 API 调用中没有应用。
修复了监听器更新 API 中 Octavia 验证,SNI 容器可以设置为非 TERMINATED_HTTPS 监听器。
修复了一个问题,即 API 列表调用中的某些列不能用于排序键。
修复了一个问题,当 barbican 服务启用 TLS 时,我们创建监听器失败。
修复了一个问题,当 Nova 反亲和性启用且拓扑为 SINGLE 时,amphora 负载均衡器无法创建。
修复了一个问题,即监听器 “insert_headers” 参数被接受用于不支持标头插入的协议。
修复了一个问题,即仅 UDP 负载均衡器不会启动 VIP 地址。
修复了在使用 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 服务遇到故障时,尤其如此。
6.0.1¶
升级说明¶
建议更新 amphora 镜像以获取解决 HAProxy 问题的工作方法,该问题会导致如果本地对等名称以 “-x” 开头,HAProxy 将无法重新加载。
错误修复¶
修复了一个问题,当负载均衡器被禁用时,Octavia Health Manager 会继续故障转移 amphorae。
规避了 HAProxy 问题,该问题会导致如果本地对等名称以 “-x” 开头,HAProxy 将无法重新加载配置更改。
6.0.0¶
新特性¶
已终止 HTTPS 的监听器现在可以单独配置 OpenSSL 密码字符串。 新监听器的默认密码字符串可以通过
default_tls_ciphers在octavia.conf中指定。 内置默认值是 OWASP 的“Suite B”推荐。 (https://cheatsheetseries.owasp.ac.cn/cheatsheets/TLS_Cipher_String_Cheat_Sheet.html) 现有监听器不受影响。
已将 oslo-middleware healthcheck 应用添加到 Octavia API。 访问 /healthcheck 将返回 200。 这通过 [api_settings]healthcheck_enabled 设置启用,默认情况下已禁用。
操作员现在可以使用基于 jobboard 的控制器的 amphorav2 提供程序。 基于 jobboard 的控制器通过将任务状态信息写入持久化后端并使用 jobboard 监控作业声明来解决资源卡在 PENDING_* 状态的问题。
添加了监听器和池协议验证。池和监听器不能任意组合。我们需要在协议方面进行一些约束。
已添加对 CentOS 8 amphora 镜像的支持。
现在有两种新的健康监控类型对 UDP 监听器有效。
HTTP和TCP检查类型现在都可以使用。
添加了一个 API,允许管理员管理 Octavia 可用区和可用区配置文件,其行为几乎与风味和风味配置文件相同。
可用区配置文件现在可以覆盖
valid_vip_networks配置选项。
已向 diskimage-create.sh 脚本添加了一个选项,用于指定构建镜像的 Octavia Git 分支。
启用 TLS 的池现在可以单独配置 OpenSSL 密码字符串。 新池的默认密码可以通过
default_pools_ciphers在octavia.conf中指定。 内置默认值是 OWASP 的“Suite B”推荐。 (https://cheatsheetseries.owasp.ac.cn/cheatsheets/TLS_Cipher_String_Cheat_Sheet.html) 现有池不受影响。
负载均衡器创建命令现在接受 availability_zone 参数。 使用 amphora 驱动程序,这将会在 nova 中的目标计算可用区中创建一个负载均衡器。
在使用备用池时,它将在每个 AZ 中创建备用池。 对于 amphora 驱动程序,如果未配置
[nova] availability_zone并且使用了可用区,结果可能会略微不可预测。注意(对于
amphora驱动程序):如果 amphora 在初始创建后可以更改可用区(通常在没有外部干预的情况下是不可能的),这可能会影响此功能正常运行的能力。
升级说明¶
升级后,用户将不再能够使用他们看不到或在负载均衡器上“show”的网络资源。可以通过将配置文件设置 “allow_invisible_reourece_usage” 设置为
True来恢复此行为。
所有运行 py3 基于镜像的 amphora 必须回收利用,否则在证书轮换时最终会失败。
已停止对 Python 2.7 的支持。 Octavia 现在支持的 Python 的最低版本是 Python 3.6。
需要新的 amphora 镜像来修复潜在的 certs-ramfs 竞争条件。
安全问题¶
以前,如果用户知道或可以猜到网络资源的 UUID,他们可以使用该 UUID 使用该 UUID 创建负载均衡器资源。现在,用户必须具有查看或“show”资源的权限才能将其与负载均衡器一起使用。这将是新的默认设置,但可以通过将配置文件设置 “allow_invisible_resource_usage” 设置为
True来禁用此行为。此问题属于“C1 类”安全问题,因为用户需要有效的 UUID。
正确地要求双向证书认证才能连接到 amphora agent API (CVE-2019-17134)。
certs-ramfs 和 amphora 代理之间的竞争条件可能导致租户 TLS 内容存储在 amphora 文件系统上,而不是加密的 RAM 文件系统中。
错误修复¶
解决了基于 py3 的 amphora 镜像上的损坏的证书上传。在 housekeeping 证书轮换事件中,amphora 会清除其服务器证书并返回 500,从而使 amphora 进入 ERROR 状态并破坏进一步的通信。请参阅升级说明。
修复了一个问题,即具有多个启用 TLS 监听器的负载均衡器,其中一个或多个启用 SNI,可能会从其他 TLS 启用监听器加载证书以供 SNI 使用。
修复了 certs-ramfs 和 amphora 代理服务之间的潜在竞争条件。
修复了一个问题,即具有多个启用 TLS 监听器的负载均衡器,使用客户端身份验证和/或后端重新加密,可能会加载其他 TLS 启用监听器的错误证书。
修复了一个错误,该错误可能在执行控制器工作程序的正常关闭时中断资源创建,并使资源(例如 amphorae)处于 BOOTING 状态。如果 Octavia 流的持续时间大于 ‘graceful_shutdown_timeout’ 配置值,则停止 Octavia 工作程序仍然可能中断资源的创建。
修复了一个问题,即负载均衡器在设置提供程序不可见的(例如标签)数据时会进入 ERROR 状态。
修复了筛选提供程序风味功能 API 的能力。
修复了配置 CentOS/Red Hat amphora 镜像以使用静态路由和路由规则的正确网络 ‘ifcfg’ 文件名称的代码。它使用了错误的路由文件名,并且不支持两个文件中的 IPv6。
修复了一个错误,该错误可能在执行控制器工作程序的正常关闭时中断资源创建,并使资源处于 PENDING_CREATE/PENDING_UPDATE/PENDING_DELETE 供应状态。如果 Octavia 流的持续时间大于 ‘graceful_shutdown_timeout’ 配置值,则停止 Octavia 工作程序仍然可能中断资源的创建。
UDP 健康监视器之间的延迟使用错误的配置值
timeout,而应该使用delay。
其他说明¶
为特定负载均衡器启动的 amphorae 现在将在创建后立即与该负载均衡器关联。 之前这要到流程快结束时才会发生,留下了一个启动期间难以理解哪个启动的 amphorae 属于哪个负载均衡器的差距。 当负载均衡器由于启动问题进入 ERROR 状态时,这尤其成问题。