手动安装与配置¶
本文档讨论了手动安装或集成到生产 OpenStack 部署工具中,对于包含以下类型节点的传统架构的要求
控制器 - 运行 OpenStack 控制平面服务,例如 REST API 和数据库。
网络 - 运行 Networking 服务的第二层、第三层(路由)、DHCP 和元数据代理。某些代理是可选的。通常通过 NAT 和浮动 IP 地址提供提供商(公共)网络和项目(私有)网络之间的连接。
注意
某些工具将这些服务部署到控制器节点上。
计算 - 运行虚拟机管理程序和 Networking 服务的第二层代理。
打包¶
OVN 的 Networking 服务集成现在是 Neutron 的树内驱动程序之一,应该从 Ussuri 版本开始与 neutron 包一起提供。
对于使用发行版软件包的部署工具,它们的名称取决于发行版而不同。
RHEL/Fedora 和兼容的发行版包括
ovn-central和ovn-host包,它们会自动安装openvswitch作为依赖项。Ubuntu/Debian 发行版包括
ovn-central、ovn-host、ovn-common和ovn-docker包,它们会自动安装所需的 Open vSwitch 依赖项。
控制器节点¶
每个控制器节点运行 Open vSwitch (OVS) 服务(包括依赖服务,例如 ovsdb-server)和 ovn-northd。部署中只能运行一个 ovsdb-server 和 ovn-northd 服务实例。但是,部署工具可以使用管理工具来实现主动/被动高可用性,该工具监控服务运行状况并在主节点发生故障后在另一个节点上自动启动这些服务。有关更多信息,请参阅 常见问题解答。
安装
ovn-central和openvswitch包(RHEL/Fedora)。安装
ovn-central和openvswitch-common包(Ubuntu/Debian)。启动 OVS 服务。中央 OVS 服务启动
ovsdb-server服务,该服务管理 OVN 数据库。使用 systemd 单元
# systemctl start openvswitch (RHEL/Fedora) # systemctl start openvswitch-switch (Ubuntu/Debian)
配置
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 地址。以下是如何为具有两个物理网络
physnet1和physnet2的计算主机设置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
启动
ovn-northd服务。使用 systemd 单元
# systemctl start ovn-northd
配置 Networking 服务器组件。Networking 服务将 OVN 作为 ML2 驱动程序实现。编辑
/etc/neutron/neutron.conf文件启用 ML2 核心插件。
[DEFAULT] ... core_plugin = ml2
启用 OVN 第三层服务。
[DEFAULT] ... service_plugins = ovn-router
配置 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:1000和5001:6000不仅仅可以互换。警告
对于
max_header_size,30的默认值对于 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
启动或重新启动
neutron-server服务。使用 systemd 单元
# systemctl start neutron-server
网络节点¶
使用 OVN 本机第三层和 DHCP 服务的部署不需要传统的网络节点,因为与外部网络的连接(包括 VTEP 网关)和路由发生在计算节点上。
计算节点¶
每个计算节点运行 OVS 和 ovn-controller 服务。ovn-controller 服务取代了传统的 OVS 第二层代理。
安装
ovn-host、openvswitch和neutron-ovn-metadata-agent包(RHEL/Fedora)。安装
ovn-host、openvswitch-switch和neutron-ovn-metadata-agent包(Ubuntu/Debian)。启动 OVS 服务。
使用 systemd 单元
# systemctl start openvswitch (RHEL/Fedora) # systemctl start openvswitch-switch (Ubuntu/Debian)
配置 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 地址。
启动
ovn-controller和neutron-ovn-metadata-agent服务。使用 systemd 单元
# systemctl start ovn-controller neutron-ovn-metadata-agent
验证操作¶
每个计算节点应包含一个
ovn-controller实例。# ovn-sbctl show <output>