元数据服务查询速率限制

OpenStack Networking 服务代理虚拟机发送到 Compute 服务以获取其元数据的请求。Networking 服务为云管理员提供了限制虚拟机查询 Compute 元数据服务的速率的能力,以保护 OpenStack 部署免受 DoS 攻击或行为异常的实例的影响。

元数据请求速率限制通过 metadata_rate_limiting 部分的 neutron.conf 中的以下参数进行配置

  • rate_limit_enabled:启用元数据请求的速率限制。它是一个布尔值,默认设置为 False

  • ip_versions:一个逗号分隔的字符串列表,用于指定必须启用速率限制的元数据地址版本(4 和/或 6)。默认情况下,仅为 IPv4 地址配置速率限制。

  • base_window_duration:以秒为单位定义基本时间滑动窗口的持续时间,在此期间将对查询请求进行速率限制。默认值为 10 秒。

  • base_query_rate_limit:在基本时间窗口期间允许的最大请求数。默认值为 10 个请求。

  • burst_window_duration:可以使用此参数定义一个较短的滑动时间窗口(以秒为单位),在此期间允许高于基本速率的请求速率。默认值为 10 秒。

  • burst_query_rate_limit:在突发时间窗口期间允许的最大请求数。默认值为 10 个请求。

注意

这些参数用于配置 HAProxy 服务器以执行速率限制。这些服务器在 OVS 后端的 L3 路由器和 DHCP 代理中,以及 OVN 后端的元数据代理中运行。

注意

目前,由于 HAProxy 开源版本的限制,速率限制只能为 IPv4 或 IPv6 配置,而不能同时配置两者。

注意

从 Networking 服务角度来看,基本窗口和突发窗口只是两个不同的滑动时间段,在此期间执行两个不同的元数据请求速率限制。Networking 服务不会强制突发窗口更短或突发速率更高。但是,建议云管理员使用突发窗口在较短的时间内允许高于基本窗口允许的请求速率,如果需要这样做的话。

在以下 neutron.conf 片段中,Networking 服务配置为允许虚拟机在 60 秒内查询 IPv4 元数据服务地址 6 次,同时允许在每个 10 秒的较短时间内进行 2 个查询的更高速率

[metadata_rate_limiting]
rate_limit_enabled = True
ip_versions = 4
base_window_duration = 60
base_query_rate_limit = 6
burst_window_duration = 10
burst_query_rate_limit = 2