手动安装与配置

注意

这些说明仅供高级用户使用,可能不完整。请参阅您的发行版特定文档以获取更多详细信息。

此外,假设您已经安装了 neutron 组件,请参阅最新的 安装教程和指南 以获取更多信息。

本文档讨论了手动安装或集成到生产 OpenStack 部署工具中,对于包含以下类型节点的传统架构的要求

  • 控制器 - 运行 OpenStack 控制平面服务,例如 REST API 和数据库。

  • 网络 - 运行 Networking 服务的第二层、第三层(路由)、DHCP 和元数据代理。某些代理是可选的。通常通过 NAT 和浮动 IP 地址提供提供商(公共)网络和项目(私有)网络之间的连接。

    注意

    某些工具将这些服务部署到控制器节点上。

  • 计算 - 运行虚拟机管理程序和 Networking 服务的第二层代理。

打包

OVN 的 Networking 服务集成现在是 Neutron 的树内驱动程序之一,应该从 Ussuri 版本开始与 neutron 包一起提供。

对于使用发行版软件包的部署工具,它们的名称取决于发行版而不同。

  1. RHEL/Fedora 和兼容的发行版包括 ovn-centralovn-host 包,它们会自动安装 openvswitch 作为依赖项。

  2. Ubuntu/Debian 发行版包括 ovn-centralovn-hostovn-commonovn-docker 包,它们会自动安装所需的 Open vSwitch 依赖项。

控制器节点

每个控制器节点运行 Open vSwitch (OVS) 服务(包括依赖服务,例如 ovsdb-server)和 ovn-northd。部署中只能运行一个 ovsdb-serverovn-northd 服务实例。但是,部署工具可以使用管理工具来实现主动/被动高可用性,该工具监控服务运行状况并在主节点发生故障后在另一个节点上自动启动这些服务。有关更多信息,请参阅 常见问题解答

  1. 安装 ovn-centralopenvswitch 包(RHEL/Fedora)。

  2. 安装 ovn-centralopenvswitch-common 包(Ubuntu/Debian)。

  3. 启动 OVS 服务。中央 OVS 服务启动 ovsdb-server 服务,该服务管理 OVN 数据库。

    使用 systemd 单元

    # systemctl start openvswitch (RHEL/Fedora)
    # systemctl start openvswitch-switch (Ubuntu/Debian)
    
  4. 配置 ovsdb-server 组件。默认情况下,ovsdb-server 服务仅允许通过 Unix 套接字通过本地访问数据库。但是,计算节点上的 OVN 服务需要访问这些数据库。

    • 允许远程数据库访问。

      # ovn-nbctl set-connection ptcp:6641:0.0.0.0 -- \
                  set connection . inactivity_probe=60000
      # ovn-sbctl set-connection ptcp:6642:0.0.0.0 -- \
                  set connection . inactivity_probe=60000
      # if using the VTEP functionality:
      #   ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640:0.0.0.0
      

      0.0.0.0 替换为控制器节点上管理网络接口的 IP 地址,以避免侦听所有接口。

      注意

      允许对 TCP 端口进行远程访问:6640(OVS)到 VTEP(如果您使用 vtep),6642(SBDB)到运行 neutron-server 的主机、运行 ovn-controller 的网关节点以及计算节点服务,如 ovn-controller 和 ovn-metadata-agent。6641(NBDB)到运行 neutron-server 的主机。

    • 由于我们正在使用 options:redirect-type 设置为 bridged 用于 VLAN 和 FLAT 网络中的逻辑路由器端口,OVN 会使用路由器的对等逻辑交换机的 localnet 端口将数据包重定向到网关机箱,而不是隧道。如果未配置 external-ids:ovn-chassis-mac-mappings,则来自计算节点上 VM 的回复数据包将使用 Neutron 逻辑路由器端口的源 MAC 地址离开 physnet。这会导致 MAC 跳跃到计算和网关。为了避免这种情况,需要为每个 physnet 设置 external-ids:ovn-chassis-mac-mappings,每个计算节点上都有唯一的 MAC 地址。

      以下是如何为具有两个物理网络 physnet1physnet2 的计算主机设置 ovn-chassis-mac-mappings 的示例。例如,您可以从插入 physnet 的物理接口获取 MAC 地址。

    # ovs-vsctl set open . external-ids:ovn-chassis-mac-mappings=\
        physnet1:aa:bb:cc:dd:ee:ff,physnet2:aa:bb:cc:dd:ee:fe
    
  5. 启动 ovn-northd 服务。

    使用 systemd 单元

    # systemctl start ovn-northd
    
  6. 配置 Networking 服务器组件。Networking 服务将 OVN 作为 ML2 驱动程序实现。编辑 /etc/neutron/neutron.conf 文件

    • 启用 ML2 核心插件。

      [DEFAULT]
      ...
      core_plugin = ml2
      
    • 启用 OVN 第三层服务。

      [DEFAULT]
      ...
      service_plugins = ovn-router
      
  7. 配置 ML2 插件。编辑 /etc/neutron/plugins/ml2/ml2_conf.ini 文件

    • 配置 OVN 机制驱动程序、网络类型驱动程序、自助服务(租户)网络类型,并启用端口安全扩展。

      [ml2]
      ...
      mechanism_drivers = ovn
      type_drivers = local,flat,vlan,geneve
      tenant_network_types = geneve
      extension_drivers = port_security
      overlay_ip_version = 4
      

      注意

      要启用 VLAN 自助服务网络,请确保使用 OVN 版本 2.11(或更高版本),然后将 vlan 添加到 tenant_network_types 选项。列表中的第一个网络类型将成为默认的自助服务网络类型。

      要为所有覆盖(隧道)网络端点使用 IPv6,请将 overlay_ip_version 选项设置为 6

    • 配置 Geneve ID 范围和最大标头大小。基于 ML2 overlay_ip_version 选项,将 IPv 版本开销(IPv4 的 20 字节(默认值)或 IPv6 的 40 字节)添加到最大标头大小中。

      [ml2_type_geneve]
      ...
      vni_ranges = 1:65536
      max_header_size = 38
      

      注意

      Networking 服务使用 vni_ranges 选项来分配网络段。但是,OVN 忽略实际值。因此,ID 范围仅确定环境中 Geneve 网络的数量。例如,范围 5001:6000 定义了最多 1000 个 Geneve 网络。另一方面,这些值在 Neutron 上下文中仍然相关,因此 1:10005001:6000 仅仅可以互换。

      警告

      对于 max_header_size30 的默认值对于 OVN 来说太低了。OVN 需要至少 38

    • 可选地,启用对 VXLAN 类型网络的支持。由于 VXLAN VNI 中空间有限,无法传递 OVN 识别数据包所需的必要信息,因此包含分割 ID 的标头大小被减小到 12 位,从而允许最多 4096 个网络。相同的限制也适用于每个网络中的端口数量,这些端口也使用 12 位标头块进行标识,将它们的数量限制为 4096 个端口。请查看 [1] 以获取更多信息。

      [ml2]
      ...
      type_drivers = geneve,vxlan
      
      [ml2_type_vxlan]
      vni_ranges = 1001:1100
      
    • 可选地,启用对一个或多个物理网络上的 VLAN 提供商和自助服务网络的支持。如果您仅指定物理网络,则只有管理用户(特权用户)才能管理 VLAN 网络。此外,为物理网络指定 VLAN ID 范围可让普通(非特权)用户管理 VLAN 网络。Networking 服务使用物理网络的 VLAN ID 范围为每个自助服务网络分配 VLAN ID。

      [ml2_type_vlan]
      ...
      network_vlan_ranges = PHYSICAL_NETWORK:MIN_VLAN_ID:MAX_VLAN_ID
      

      PHYSICAL_NETWORK 替换为物理网络名称,并可选地定义最小和最大 VLAN ID。使用逗号分隔每个物理网络。

      例如,要在 physnet1 网络上启用管理 VLAN 网络,并在 physnet2 网络上使用 VLAN ID 1001 到 2000 启用自助服务 VLAN 网络

      network_vlan_ranges = physnet1,physnet2:1001:2000
      
    • 启用安全组。

      [securitygroup]
      ...
      enable_security_group = true
      

      注意

      由于 OVN ML2 驱动程序本身处理安全组,因此 [securitygroup] 下的 firewall_driver 选项将被忽略。

    • 配置 OVS 数据库访问和 L3 调度器

      [ovn]
      ...
      ovn_nb_connection = tcp:IP_ADDRESS:6641
      ovn_sb_connection = tcp:IP_ADDRESS:6642
      ovn_l3_scheduler = OVN_L3_SCHEDULER
      

      注意

      IP_ADDRESS 替换为运行 ovsdb-server 服务的控制器节点的 IP 地址。将 OVN_L3_SCHEDULER 替换为 leastloaded,如果您希望调度器选择网关端口最少的计算节点,或者 chance,如果您希望调度器从可用计算节点列表中随机选择一个计算节点。

    • 在 Open_vSwitch 表的 external_ids 列中设置带有 enable-chassis-as-gw 的 ovn-cms-options。然后,如果该机箱具有适当的桥接映射,它将被选中以安排网关路由器。

      # ovs-vsctl set open . external-ids:ovn-cms-options=enable-chassis-as-gw
      
  8. 启动或重新启动 neutron-server 服务。

    使用 systemd 单元

    # systemctl start neutron-server
    

网络节点

使用 OVN 本机第三层和 DHCP 服务的部署不需要传统的网络节点,因为与外部网络的连接(包括 VTEP 网关)和路由发生在计算节点上。

计算节点

每个计算节点运行 OVS 和 ovn-controller 服务。ovn-controller 服务取代了传统的 OVS 第二层代理。

  1. 安装 ovn-hostopenvswitchneutron-ovn-metadata-agent 包(RHEL/Fedora)。

  2. 安装 ovn-hostopenvswitch-switchneutron-ovn-metadata-agent 包(Ubuntu/Debian)。

  3. 启动 OVS 服务。

    使用 systemd 单元

    # systemctl start openvswitch (RHEL/Fedora)
    # systemctl start openvswitch-switch (Ubuntu/Debian)
    
  4. 配置 OVS 服务。

    • 使用控制器节点上的 OVS 数据库。

      # ovs-vsctl set open . external-ids:ovn-remote=tcp:IP_ADDRESS:6642
      

      IP_ADDRESS 替换为运行 ovsdb-server 服务的控制器节点的 IP 地址。

    • 启用一个或多个覆盖网络协议。至少,OVN 需要启用 geneve 协议。使用 VTEP 网关的部署还应启用 vxlan 协议。

      # ovs-vsctl set open . external-ids:ovn-encap-type=geneve,vxlan
      

      注意

      没有 VTEP 网关的部署可以安全地启用两种协议。

    • 配置覆盖网络本地端点 IP 地址。

      # ovs-vsctl set open . external-ids:ovn-encap-ip=IP_ADDRESS
      

      IP_ADDRESS 替换为计算节点上覆盖网络接口的 IP 地址。

  5. 启动 ovn-controllerneutron-ovn-metadata-agent 服务。

    使用 systemd 单元

    # systemctl start ovn-controller neutron-ovn-metadata-agent
    

验证操作

  1. 每个计算节点应包含一个 ovn-controller 实例。

    # ovn-sbctl show
      <output>
    

参考