配置 Networking 服务 (neutron) (可选)

OpenStack Networking 服务 (neutron) 包括以下服务

防火墙即服务 (FWaaS)

提供基于软件的防火墙,用于过滤来自路由器的流量。

VPN 即服务 (VPNaaS)

提供一种方法,用于通过公共网络扩展私有网络。

BGP 动态路由服务

提供一种将自助服务(私有)网络前缀通告到支持 BGP 的物理网络设备的方法。

SR-IOV 支持

提供使用 SR-IOV 和 PCI 直通将虚拟或物理功能配置到客户实例的能力。(需要兼容的网卡)

防火墙服务 (可选)

以下步骤描述了如何修改 /etc/openstack_deploy/user_variables.yml 文件以启用 FWaaS。

部署 FWaaS v2

FWaaS v2 是下一代 Neutron 防火墙服务,将提供丰富的 API 来保护 OpenStack 网络。它仍在积极开发中。

有关这些 FWaaS v2 功能的更多信息,请参阅 FWaaS 2.0 API 规范

FWaaS v2 需要使用 Open vSwitch。要部署使用 Open vSwitch 进行虚拟网络的环境,请参阅以下文档

按照以下步骤部署 FWaaS v2

注意

FWaaS v1 和 v2 不能同时部署。

  1. 将 FWaaS v2 插件添加到 neutron_plugin_base 变量中,位于 /etc/openstack_deploy/user_variables.yml

    neutron_plugin_base:
      - router
      - metering
      - firewall_v2
    

    确保 neutron_plugin_base 包含您希望与 neutron 一起部署的所有插件,以及 firewall_v2 插件。

  2. 运行 neutron playbook 以部署 FWaaS v2 服务插件

    # cd /opt/openstack-ansible/playbooks
    # openstack-ansible os-neutron-install.yml
    

虚拟专用网络服务 - VPNaaS (可选)

以下步骤描述了如何修改 /etc/openstack_deploy/user_variables.yml 文件以启用 VPNaaS。

  1. 覆盖默认的 neutron 插件列表,以包含 vpnaas

    neutron_plugin_base:
      - router
      - metering
    
  2. neutron_plugin_base 如下所示

    注意

    如果您的 neutron_plugin_typeml2.ovn,请使用 ovn-vpnaas 插件代替

    neutron_plugin_base:
       - router
       - metering
       - vpnaas
    
  3. 覆盖默认的特定内核模块列表,以便包含运行 ipsec 所需的模块

    openstack_host_specific_kernel_modules:
       - { name: "ebtables", pattern: "CONFIG_BRIDGE_NF_EBTABLES=", group: "network_hosts" }
       - { name: "af_key", pattern: "CONFIG_NET_KEY=", group: "network_hosts" }
       - { name: "ah4", pattern: "CONFIG_INET_AH=", group: "network_hosts" }
       - { name: "ipcomp", pattern: "CONFIG_INET_IPCOMP=", group: "network_hosts" }
    
  4. 执行 openstack hosts setup,以便在网络主机上启动和运行时加载内核模块

    # openstack-ansible openstack-hosts-setup.yml --limit network_hosts\
    --tags "openstack_hosts-config"
    
  5. 执行 neutron install playbook 以更新配置

    # cd /opt/openstack-ansible/playbooks
    # openstack-ansible os-neutron-install.yml
    
  6. 执行 horizon install playbook 以显示 VPNaaS 面板

    # cd /opt/openstack-ansible/playbooks
    # openstack-ansible os-horizon-install.yml
    

VPNaaS 默认配置选项通过 conf override 机制使用 neutron_neutron_conf_overrides 字典进行更改。

您还可以使用变量 neutron_vpnaas_custom_config 定义 VPN 服务的自定义配置文件

neutron_vpnaas_custom_config:
   - src: "/etc/openstack_deploy/strongswan/strongswan.conf.template"
     dest: "{{ neutron_conf_version_dir }}/strongswan.conf.template"
     condition: "{{ ansible_facts['os_family'] | lower == 'debian' }}"
   - src: "/etc/openstack_deploy/strongswan/strongswan.d"
     dest: "/etc/strongswan.d"
     condition: "{{ ansible_facts['os_family'] | lower == 'debian' }}"
   - src: "/etc/openstack_deploy/neutron/ipsec.conf.template"
     dest: "{{ neutron_conf_version_dir }}/ipsec.conf.template"

同时,应在 ‘user_variables.yml’ 中定义 neutron_l3_agent_ini_overrides,以告知 l3_agent 使用新的配置文件

注意

neutron_plugin_type 设置为 ml2.ovn 时,请使用变量 neutron_ovn_vpn_agent_overrides

neutron_l3_agent_ini_overrides:
      ipsec:
         enable_detailed_logging: True
      strongswan:
         strongswan_config_template : "{{ neutron_conf_dir }}/strongswan.conf.template"
      openswan:
         ipsec_config_template:  "{{ neutron_conf_dir }}/ipsec.conf.template"

OVN 的 VPNaaS Agent

自 2024.1 版本 (Caracal) 以来,VPNaaS 服务支持 ml2.ovn 插件类型。

虽然服务的配置大致相同,但底层的实现却有显著差异。

首先,VPNaaS 由一个独立代理表示,该代理通过 RabbitMQ 进行协调。这意味着,一个新的代理类型 VPN Agent 将出现在 openstack network agent list 输出中。在 VPN 站点连接创建时,VPN 代理将在任意 OVN 网关节点上处理命名空间的创建,其中将创建 ipsec 连接

由于 OVN L3 路由器实现不使用命名空间,VPN 代理将使用额外的外部 IP,因为它现在无法与路由器共享。此外,将创建一个额外的补丁网络,以连接 VPN 代理与 L3 代理。

有关实现的更多详细信息,请参阅 VPNaaS OVN 规范

BGP 动态路由服务 (可选)

neutron 的 BGP 动态路由 插件提供 BGP 扬声器,可以将 OpenStack 项目网络前缀通告到外部网络设备,例如路由器。这在与 子网池 功能结合使用时尤其有用,该功能允许以这样一种方式配置 neutron,以便允许用户创建自助服务 分段的 IPv6 子网

以下步骤描述了如何修改 /etc/openstack_deploy/user_variables.yml 文件以启用 BGP 动态路由插件。

  1. 将 BGP 插件添加到 neutron_plugin_base 变量中,位于 /etc/openstack_deploy/user_variables.yml

    neutron_plugin_base:
      - ...
      - neutron_dynamic_routing.services.bgp.bgp_plugin.BgpPlugin
    

    确保 neutron_plugin_base 包含您希望与 neutron 一起部署的所有插件,以及 BGP 插件。

  2. 执行 neutron install playbook 以更新配置

    # cd /opt/openstack-ansible/playbooks
    # openstack-ansible os-neutron-install.yml
    

OVN BGP Agent (可选)

OVN BGP Agent 通过利用 FRRouting,在提供网络上公开 VM 浮动 IP 通过 BGP。

这旨在为运行 OVN 作为 ml2 插件的环境提供功能齐全的 BGP 动态路由服务的替代方案。

OVN BGP Agent 提供多种驱动程序和暴露方法,可以在 BGP 支持矩阵 上进行检查

注意

在撰写本文时,只有 underlay 暴露方法才完全受 os_neutron 角色支持。

为了启用 ovn-bgp-agent,您需要显式配置一些变量

neutron_ovn_bgp_enable: True
# This defines an AS to which ovn-bgp-agent will inject an VRF to FRR
neutron_ovn_bgp_config:
   AS: 64513

# In this variable we define a base configuration for FRR that will be
# deployed as pre-requisite of ovn-bgp-agent
neutron_frr_bgp_config:
- router bgp 64513
- "bgp router-id {{ ansible_facts['bond0']['ipv4']['address'] }}"
- bgp log-neighbor-changes
- bgp graceful-shutdown
- neighbor uplink peer-group
- neighbor uplink remote-as 64512
- neighbor uplink ebgp-multihop
- neighbor 203.0.113.10 peer-group uplink
- neighbor 203.0.113.11 peer-group uplink
- neighbor 203.0.113.10 description leaf_1
- neighbor 203.0.113.11 description leaf_2
- address-family ipv4 unicast
- "  redistribute connected"
- "  neighbor uplink activate"
- "  neighbor uplink allowas-in origin"
- "  neighbor uplink prefix-list only-host-prefixes out"
- "exit-address-family"
- "ip prefix-list only-default permit 0.0.0.0/0"
- "ip prefix-list only-host-prefixes permit 0.0.0.0/0 ge 32"
- route-map rm-only-default permit 10
- "  match ip address prefix-list only-default"
- "  set src {{ ansible_facts['bond0']['ipv4']['address'] }}"
- ip protocol bgp route-map rm-only-default

# This variable might be useful for ebgp-multihop scenarios
neutron_frr_staticd_routes:
- ip route 203.0.113.10/32 198.51.100.1
- ip route 203.0.113.10/32 198.51.100.1

设置所有必需的变量后,运行 openstack-ansible os-neutron-install.yml 应该安装并配置所有 neutron_ovn_controller 上的 FRRouting,以及一个新的服务 neutron-ovn-bgp-agent 将出现。

此服务不使用 RabbitMQ 进行通信,并直接在 OVN NB/SB 数据库上侦听事件,因此它不会出现在 openstack network agent list 输出中,就像人们可能认为的那样。

SR-IOV 支持 (可选)

以下步骤描述了如何修改 OpenStack-Ansible 配置以启用 Neutron SR-IOV 支持。

  1. 为提供商网络定义 SR-IOV 兼容的物理主机接口

    作为每个 Openstack-Ansible 安装的一部分,Neutron 已知的每个提供商网络都需要在 /etc/openstack_deploy/openstack_user_config.yml 文件中配置。对于每种支持的网络类型(例如,vlan),都可以定义属性 sriov_host_interfaces,以将 ML2 网络名称 (net_name 属性) 映射到一个或多个物理接口。此外,该网络需要分配给 neutron_sriov_nic_agent 容器组。

    示例配置

    provider_networks
      - network:
        container_bridge: "br-vlan"
        container_type: "veth"
        container_interface: "eth11"
        type: "vlan"
        range: "1000:2000"
        net_name: "physnet1"
        sriov_host_interfaces: "p1p1,p4p1"
        group_binds:
          - neutron_openvswitch_agent
          - neutron_sriov_nic_agent
    
  2. 配置 Nova

    使用 SR-IOV,Nova 使用 PCI 直通将 VF 和 PF 分配给客户实例。虚拟功能 (VF) 代表物理 NIC 的一个切片,并作为虚拟 NIC 传递给客户实例。另一方面,物理功能 (PF) 代表整个物理接口,并传递给单个客户。

    要在 Nova 中使用 PCI 直通,需要将 PciPassthroughFilter 过滤器添加到 conf override nova_scheduler_default_filters。最后,需要通过 conf override nova_pci_passthrough_whitelist 允许可用于直通的 PCI 设备。

    可以配置的选项

    # Single device configuration
    nova_pci_passthrough_whitelist: '{ "physical_network":"physnet1", "devname":"p1p1" }'
    
    # Multi device configuration
    nova_pci_passthrough_whitelist: '[{"physical_network":"physnet1", "devname":"p1p1"}, {"physical_network":"physnet1", "devname":"p4p1"}]'
    
    # Whitelisting by PCI Device Location
    # The example pattern for the bus location '0000:04:*.*' is very wide. Make sure that
    # no other, unintended devices, are whitelisted (see lspci -nn)
    nova_pci_passthrough_whitelist: '{"address":"0000:04:*.*", "physical_network":"physnet1"}'
    
    # Whitelisting by PCI Device Vendor
    # The example pattern limits matches to PCI cards with vendor id 8086 (Intel) and
    # product id 10ed (82599 Virtual Function)
    nova_pci_passthrough_whitelist: '{"vendor_id":"8086", "product_id":"10ed", "physical_network":"physnet1"}'
    
    # Additionally, devices can be matched by their type, VF or PF, using the dev_type parameter
    # and type-VF or type-PF options
    nova_pci_passthrough_whitelist: '{"vendor_id":"8086", "product_id":"10ed", "dev_type":"type-VF", physical_network":"physnet1"}'
    

    建议通过 Linux 设备名称 (devname 属性) 或通过 PCI 供应商和产品 ID 组合 (vendor_idproduct_id 属性) 进行白名单。

  3. 启用 SR-IOV ML2 插件

    conf override neutron_plugin_type 变量定义了核心 ML2 插件,并且一次只能定义一个插件。conf override neutron_plugin_types 变量可以包含要加载的附加 ML2 插件列表。请确保始终只加载兼容的 ML2 插件。SR-IOV ML2 插件已知可以与 openvswitch (ml2.ovs) ML2 插件一起工作。

    neutron_plugin_types:
      - ml2.sriov
    
  4. 执行 Neutron install playbook 以更新配置

    # cd /opt/openstack-ansible/playbooks
    # openstack-ansible os-neutron-install.yml
    # openstack-ansible os-nova-install.yml
    
  5. 检查 Neutron SR-IOV 代理状态

    在 playbook 配置完 Neutron 和 Nova 后,可以使用以下命令验证新的 Neutron 代理状态

    # neutron agent-list --agent_type 'NIC Switch agent'
    +--------------------------------------+------------------+-----------+-------+----------------+-------------------------+
    | id                                   | agent_type       | host      | alive | admin_state_up | binary                  |
    +--------------------------------------+------------------+-----------+-------+----------------+-------------------------+
    | 3012ff0e-de35-447b-aff6-fdb55b04c518 | NIC Switch agent | compute01 | :-)   | True           | neutron-sriov-nic-agent |
    | bb0c0385-394d-4e72-8bfe-26fd020df639 | NIC Switch agent | compute02 | :-)   | True           | neutron-sriov-nic-agent |
    +--------------------------------------+------------------+-----------+-------+----------------+-------------------------+
    

部署者可以通过 neutron_sriov_nic_agent_ini_overrides 字典更改 SR-IOV nic 代理的默认配置选项。有关更多详细信息,请参阅有关 conf override 机制的文档。