9.4. 将查询限制为元数据服务
为了保护 OpenShift (RHOSO)上的 Red Hat OpenStack Services (RHOSO)环境,如拒绝服务(DoS)攻击等网络威胁,网络服务(neutron)让管理员能够限制虚拟机实例可以查询计算元数据服务的速度。管理员通过将值分配给网络服务用来配置 HAProxy 服务器来执行速率限制的一组参数。HAProxy 服务器在元数据服务内运行。
要为节点集合添加元数据速率限制,请完成这些任务:
-
创建
ConfigMap自定义资源(CR)来配置节点。 - 为运行 playbook 的功能创建自定义服务。
-
在自定义服务中包含
ConfigMapCR。
如下详细步骤:
先决条件
-
在工作站上安装了
oc命令行工具。 -
以具有
cluster-admin权限的用户身份登录到可访问 RHOSO 控制平面的工作站。 您的 RHOSP 环境使用 IPv4 网络。
目前,网络服务不支持 IPv6 网络上的元数据速率限制。
您有一个调度的维护窗口。
此流程要求您重启 OVN 元数据服务。
流程
创建一个
ConfigMapCR 来为元数据速率限制定义新配置,并将它保存到工作站上的 YAML 文件中,如neutron-metadata-rate-limit.yaml。注意不要使用默认配置文件的名称,因为它将覆盖基础架构配置,如
transport_url。为以下速率限制参数设置值:
rate_limit_enabled-
可让您限制元数据请求的速度。默认值为
false。将值设为true以启用元数据速率限制。 ip_versions-
IP 版本
4用于控制查询率的元数据 IP 地址。RHOSP 尚不支持 IPv6 网络的元数据速率限制。 base_window_duration-
查询请求限制的时间范围(以秒为单位)。默认值为
10秒。 base_query_rate_limit-
base_window_duration期间允许的最大请求数。默认值为10个请求。 burst_window_duration-
允许请求超过
base_window_duration的时间 span (以秒为单位)。默认值为10秒。 burst_query_rate_limitburst_window_duration期间允许的最大请求数。默认值为10个请求。Example
在本例中,网络服务被配置为 基础 时间和速率,允许实例在 60 秒内查询 IPv4 元数据服务 IP 地址 6 次。网络服务也被配置为 突发 时间和速率,允许每个时间缩短 10 秒期间的 2 个查询率提高 2 个查询:
apiVersion: v1 kind: ConfigMap metadata: name: neutron-metadata-rate-limit data: 20-neutron-metadata-rate.conf: | [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 ...
使用
ConfigMapCR 文件创建ConfigMap对象。Example
$ oc create -f neutron-metadata-rate-limit.yaml -n openstack创建定义自定义服务的
OpenStackDataPlaneServiceCR,并将其保存到工作站上的 YAML 文件中,如neutron-metadata-rate-limit-service.yaml:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: neutron-metadata-rate-limit将
ConfigMapCR 添加到自定义服务中,并为运行此服务的节点集的单元指定SecretCR:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: neutron-metadata-rate-limit spec: dataSources: - configMapRef: name: neutron-metadata-rate-limit - secretRef: name: neutron-ovn-metadata-agent-neutron-config - secretRef: name: nova-metadata-neutron-config - configMapRef: name: neutron-metadata-rate-limit tlsCerts: default: contents: - dnsnames - ips networks: - ctlplane issuer: osp-rootca-issuer-ovn keyUsages: - digital signature - key encipherment - client auth caCerts: combined-ca-bundle containerImageFields: - EdpmNeutronMetadataAgentImage通过引用 Ansible playbook 或将 Ansible play 包含在
playbookContents字段中来指定用于创建自定义服务的 Ansible 命令:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneService metadata: name: neutron-metadata-rate-limit spec: playbook: osp.edpm.neutron_metadata dataSources: - configMapRef: name: neutron-metadata-rate-limit - secretRef: name: neutron-ovn-metadata-agent-neutron-config - secretRef: name: nova-metadata-neutron-config tlsCerts: default: contents: - dnsnames - ips networks: - ctlplane issuer: osp-rootca-issuer-ovn keyUsages: - digital signature - key encipherment - client auth caCerts: combined-ca-bundle containerImageFields: - EdpmNeutronMetadataAgentImage创建
metadata-rate-limit服务:$ oc apply -f neutron-metadata-rate-limit -n openstack
验证
确认创建了自定义服务:
$ oc get openstackdataplaneservice neutron-metadata-rate-limit -o yaml -n openstack