Victoria Series Release Notes¶
When using a distribution with a recent SELinux release such as CentOS 8 Stream, PING health-monitor does not work as shell_exec_t calls are denied by SELinux.
Fixed configuration issue which allowed authenticated and authorized users to inject code into HAProxy configuration using API requests. Octavia API no longer accepts unencoded whitespace characters in url_path values in update requests for healthmonitors.
The fix that updates the Netfilter Conntrack Sysfs variables requires rebuilding the amphora image in order to be effective.
Filter out private information from the taskflow logs when ‘’INFO’’ level messages are enabled and when jobboard is enabled. Logs might have included TLS certificates and private_key. By default, in Octavia only WARNING and above messages are enabled in taskflow and jobboard is disabled.
Increased the TCP buffer memory maximum and enabled MTU ICMP black hole detection.
The generated RSyslog configuration on the amphora supports now RSyslog failover with TCP if multiple RSyslog servers were specified.
In order to avoid hitting the Neutron API hard when batch update with creating many new members, we cache the subnet validation results in batch update members API call. We also change to validate new members only during batch update members since subnet ID is immutable.
The parameters of a taskflow Flow were logged in ‘’INFO’’ level messages by taskflow, it included TLS-enabled listeners and pools parameters, such as certificates and private_key.
Fix an authentication error with Barbican when creating a TERMINATED_HTTPS listener with application credential tokens or trust IDs.
Fix disabled UDP pools. Disabled UDP pools were marked as “OFFLINE” but the requests were still forwarded to the members of the pool.
Correctly detect the member operating status “drain” when querying status data from HAProxy.
Enable required SELinux booleans for CentOS or RHEL amphora image.
Fixed backwards compatibility issue with the feature that preserves HAProxy server states between reloads. HAProxy version 1.5 or below do not support this feature, so Octavia will not to activate it on amphorae with those versions.
Fix a bug that prevented the provisioning_state of a health-monitor to be set to ERROR when an error occurred while creating, updating or deleting a health-monitor.
Fix an issue with amphorav2 and persistence, some long tasks executed by a controller might have been released in taskflow and rescheduled on another controller. Octavia now ensures that a task is never released early by using a keepalive mechanism to notify taskflow (and its redis backend) that a job is still running.
Fixed an issue with members in ERROR operating status that may have been updated briefly to ONLINE during a Load Balancer configuration change.
Fixed a potential error when plugging a member from a new network after deleting another member and unplugging its network. Octavia may have tried to plug the new network to a new interface but with an already existing name. This fix requires to update the Amphora image.
Netfilter Conntrack Sysfs variables net.netfilter.nf_conntrack_max and nf_conntrack_expect_max get set to sensible values on the amphora now. Previously, kernel default values were used which were much too low for the configured net.netfilter.nf_conntrack_buckets value. As a result packets could get dropped because the conntrack table got filled too quickly. Note that this affects only UDP and SCTP protocol listeners. Connection tracking is disabled for TCP-based connections on the amphora including HTTP(S).
Fix a bug when updating a load balancer with a QoS policy after a failover, Octavia attempted to update the VRRP ports of the deleted amphorae, moving the provisioning status of the load balancer to ERROR.
Fix a potential race condition when updating a resource in the amphorav2 worker. The worker was not waiting for the resource to be set to PENDING_UPDATE, so the resource may have been updated with old data from the database, resulting in a no-op update.
Fixed issue with SELinux and the lvs-masquerade.sh script on the amphora. The script already runs with root permissions, so the use of sudo inside the script is unneeded.
Fix an issue when Octavia performs a failover of an ACTIVE-STANDBY load balancer that has both amphorae missing. Some tasks in the controller took too much time to timeout because the timeout value defined in
[haproxy_amphora].active_connection_rety_intervalwas not used.
Fix a bug that could have triggered a race condition when configuring a member interface in the amphora. Due to a race condition, a network interface might have been deleted from the amphora, leading to a loss of connectivity.
Fixed “Could not retrieve certificate” error when updating/deleting the client_ca_tls_container_ref field of a listener after a CA/CRL was deleted.
Fixed validations in L7 rule and session cookie APIs in order to prevent authenticated and authorized users to inject code into HAProxy configuration. CR and LF (\r and \n) are no longer allowed in L7 rule keys and values. The session persistence cookie names must follow the rules described in https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie.
Fix load balancers stuck in PENDING_UPDATE issues for some API calls (POST /l7rule, PUT /pool) when a provider denied the call.
Validate that the creation of L7 policies is compatible with the protocol of the listener in the Amphora driver. L7 policies are allowed for Terminated HTTPS or HTTP protocol listeners, but not for HTTPS, TCP or UDP protocols listeners.
Fixed an issue with batch member updates, that don’t have any changes, not properly rolling back the update.
Disable conntrack for TCP flows in the Amphora, it reduces memory usage for HAProxy-based listeners and prevents some kernel warnings about dropped packets.
Fixed an issue that an amphorav2 LB cannot be reached after loadbalancer failover. The LB security group was not set in the amphora port.
Fixes an issue where provider drivers may not decrement the load balancer objects quota on delete.
Fixes loadbalancer creation failure when one of the listener port matches with the octavia generated peer ports and the allowed_cidr is explicitly set to 0.0.0.0/0 on the listener. This is due to creation of two security group rules with remote_ip_prefix as None and remote_ip_prefix as 0.0.0.0/0 which neutron rejects the second request with security group rule already exists.
Fix an issue with the rsyslog configuration file in the Amphora when the log offloading feature and the local log storage feature are both disabled.
Fix a serialization error when using host_routes in VIP subnets when persistence in the amphorav2 driver is enabled.
Some IPv6 UDP members were incorrectly marked in ERROR status, because of a formatting issue while generating the health message in the amphora.
Fixed MAX_TIMEOUT for timeout_client_data, timeout_member_connect, timeout_member_data, timeout_tcp_inspect API listener. The value was reduced from 365 days to 24 days, which now does not exceed the value of the data type in DB.
Fixed an issue with the
lointerface in the
amphora-haproxynetwork namespace. The
lointerface was down and prevented haproxy to communicate with other haproxy processes (for persistent stick tables) on configuration change. It delayed old haproxy worker cleanup and increased the memory consumption usage after reloading the configuration.
Increase the limit value for nr_open and file-max in the amphora, the new value is based on what HAProxy 2.x is expecting from the system with the greatest maxconn value that Octavia can set.
Fix an issue with the provisioning status of a load balancer that was set to ERROR too early when an error occurred, making the load balancer mutable while the execution of the tasks for this resources haven’t finished yet.
Fix an issue that could set the provisioning status of a load balancer to a PENDING_UPDATE state when an error occurred in the amphora failover flow.
Fix load balancers that use customized host_routes in the VIP or the member subnets in amphorav2.
Fix weighted round-robin for UDP listeners with keepalived and lvs. The algorithm must be specified as ‘wrr’ in order for weighted round-robin to work correctly, but was being set to ‘rr’.
Fixed the healthcheck endpoint always querying the backends by caching results for a configurable time. The default is five seconds.
Fixes an issue with load balancer failover, when the VIP subnet is out of IP addresses, that could lead to the VIP being deallocated.
Fix default value override for timeout values for listeners. Changing the default timeouts in the configuration file wasn’t correctly applied in the default listener parameters.
Fix nf_conntrack_buckets sysctl in the Amphora, its value was incorrectly set.
Fixed an issue were updating a CRL or client certificate on a pool would cause the pool to go into ERROR.
Fixed a bug where pools with PROXYV2 will go into ERROR.
Fix an issue when updating
tls_ciphersin Pools with empty (None) values, unsetting theses parameters now resets their values to the default values.
Add a validation step in the Octavia Amphora driver to ensure that the port_security_enabled parameter is set on the VIP network.
Fixed an issue that could cause load balancers, with multiple amphora in a failed state, to be unable to complete a failover.
Fix an incorrect
operating_statuswith empty UDP pools. A UDP pool without any member is now
Add missing cloud-utils-growpart RPM to Red Hat based amphora images.
Add missing cronie RPM to Red Hat based amphora images.
Added support for proxy protocol version 2.
Added HTTP/2 over TLS support via ALPN protocol negotiation to the amphora provider driver. Feature available in amphora images with HAProxy 2.0 or newer.
Added the ability to delete amphora that are not in use.
Operators can now use the ‘amp_image_tag’ Octavia flavor capability when using the amphora provider driver. This allows custom amphora images to be used per-load balancer. If this is not defined in an Octavia flavor, the amp_image_tag Octavia configuration file setting will continue to be used.
Introduced an image driver interface. Supported drivers are noop and Glance.
Add l7policy and l7rule to octavia quota.
Added support for TLS extension Application Layer Protocol Negotiation (ALPN) to TLS-terminated HTTPS load balancers. A new parameter
alpn_protocolswas added to the Listener API.
Octavia provider drivers can now offer HTTP/2 over TLS (protocol negotiation via ALPN) to clients.
Added support for nftables to the devstack plugin and the amphora.
Add support for SCTP protocol. SCTP support has been added in the Octavia API for listener, pool, and health-monitor resources.
Added a new configuration setting (
[task_flow]/jobboard_enabled) to enable/disable jobboard functionality in the amphorav2 provider. When disabled, the amphorav2 provider behaves similarly to the amphora v1 provider and does not require extra dependencies. The default setting is jobboard disabled while jobboard remains an experimental feature.
octavia.conf. Listeners, pools, and the defaults for either will be blocked from using any lower TLS versions. By default, there is no minumum version.
Add a new configuration option to define the default connection_limit for new listeners that use the Amphora provider. The option is [haproxy_amphora].default_connection_limit and its default value is 50,000. This value is used when creating or setting a listener with -1 as connection_limit parameter, or when unsetting connection_limit parameter.
TLS-enabled pools can now be configured to use only specified versions of TLS. Default TLS versions for new pools can be set with
octavia.conf. Existing pools will continue to use the old defaults.
Loadbalancer statistics can now be reported to multiple backend locations simply by specifying multiple statistics drivers in config.
octavia.conf. Listeners, pools, and the default values for either will be blocked from using any of these ciphers. By default, no ciphers are prohibited.
HTTPS-terminated listeners can now be configured to use only specified versions of TLS. Default TLS versions for new listeners can be set with
octavia.conf. Existing listeners will continue to use the old defaults.
When the amphora provider driver is enabled, operators need to set option
[controller_worker]/image_driver. The default image driver is
image_glance_driver. For testing could be used
An amphora image update is recommended to pick up a workaround to an HAProxy issue where it would fail to reload on configuration change should the local peer name start with “-x”.
The failover improvements do not require an updated amphora image, but updating existing amphora will minimize the failover outage time for standalone amphora on subsequent failovers.
[controller_worker]/amp_ssh_access_allowedhas been deprecated since Queens release and is now removed. This option was superseded by
[controller_worker]/amp_image_idhas been deprecated since Mitaka release and is now removed. This option was superseded by
The internal interface for loadbalancer statistics collection has moved. When upgrading, see deprecation notes for the
stats_update_driverconfig option, as it will need to be moved and renamed.
The default drivers have been switched to live from noop drivers for the most part. Volume and distributor remain set to noop drivers as those are experimental features. Operators do not need to make configuration changes.
HTTPS-terminated listeners will now only allow TLS1.2 and TLS1.3 by default. If no TLS versions are specified at listener create time, the listener will only accept TLS1.2 and TLS1.3 connections. Previously TLS listeners would accept any TLS version. Existing listeners will not be changed.
Spares pool support is deprecated, pending removal in the X release. Use of the spares pool was originally recommended to increase provisioning speed, but since Nova’s server groups do not support adding existing VMs, Octavia cannot support use of the spares pool with the Active-Standby topology. Since this is our recommended topology for production deployments, and speed is less essential in development/testing environments (the only place we could recommend the use of Single topology), the overhead of maintaining spares pool support exceeds its theoretical usefulness.
Terminology such as
blacklisthas been replaced with more inclusive words, such as
prohibit listwherever possible.
The configuration option
tls_cipher_blacklisthas been deprecated and replaced with
tls_cipher_prohibit_list. It will be removed in a future release.
The deprecated option
status_update_threadshas been removed,
stats_update_threadsshould be used instead.
health_manager.health_update_driverhas been deprecated as it was never really used, so the driver layer was removed. The option
health_manager.stats_update_driverwas moved and renamed to
controller_worker.statistics_drivers(note it is now plural). It can now contain a list of multiple drivers for handling statistics.
If you are using the admin_or_owner-policy.yaml policy override file you should upgrade your API processes to include the unscoped token fix. The default policies are not affected by this issue.
Fixed an issue when a loadbalancer is disabled, Octavia Health Manager keeps failovering the amphorae
Fixed an issue where members added to TLS-enabled pools would go to ERROR provisioning status.
Fixed an issue with failing over an amphora if the pair amphora in an active/standby pair had a missing VRRP port in neutron.
Fixed an issue where setting of SNI containers were not being applied on listener update API calls.
Fixed an Octavia API validation on listener update where SNI containers could be set on non-TERMINATED_HTTPS listeners.
Fixed an issue where some columns could not be used for sort keys in API list calls.
Fixed an issue in the CADF audit map file for failover actions that could cause keystonemiddleware to raise an exception.
Fix an issue when the barbican service enable TLS, we create the listerner failed.
Fix operational status for disabled UDP listeners. The operating status of disabled UDP listeners is now OFFLINE instead of ONLINE, the behavior is now similary to the behavior of HTTP/HTTPS/TCP/… listeners.
Fixed an issue where clearing listener TLS versions resulted in a server-side error.
Fixed an issue where when clearing listener TLS versions and ciphers would not apply the default values per defined in the API configuration settings.
Fixed an issue where amphora load balancers fail to create when Nova anti-affinity is enabled and topology is SINGLE.
Workaround an HAProxy issue where it would fail to reload on configuration change should the local peer name start with “-x”.
Fixed an issue where listener “insert_headers” parameter was accepted for protocols that do not support header insertion.
Fixed an issue where TLS-enabled pools would fail to provision.
Fixed an issue where UDP only load balancers would not bring up the VIP address.
Fix a potential invalid DOWN operating status for members of a UDP pool. A race condition could have occured when building the first heartbeat message after adding a new member in a pool, this recently added member could have been seen as DOWN.
Fixes an issue when using the admin_or_owner-policy.yaml policy override file and unscoped tokens.
With haproxy 1.8.x releases, haproxy consumes much more memory in the amphorae because of pre-allocated data structures. This amount of memory depends on the maxconn parameters in its configuration file (which is related to the connection_limit parameter in the Octavia API). In the Amphora provider, the default connection_limit value -1 is now converted to a maxconn of 50,000. It was previously 1,000,000 but that value triggered some memory allocation issues when quickly performing multiple configuration updates in a load balancer.
Significantly improved the reliability and performance of amphora and load balancer failovers. This is especially true when the Nova service is experiencing failures.
Though the current HAProxy version 1.8 used in some distributions support HTTP/2, we highly recommend using HAProxy version 2.0 or newer in the amphora image when using HTTP/2.