10.5. 其他 overcloud 网络配置
本章介绍了 第 10.4 节 “自定义网络接口模板” 中介绍的概念和程序,并提供一些额外的信息,以帮助配置 overcloud 网络的一部分。
10.5.1. 配置自定义接口
单个接口可能需要修改。以下示例显示了使用第二个 NIC 连接到具有 DHCP 地址的基础架构网络所需的修改,并将另一个 NIC 用于绑定:
network_config: # Add a DHCP infrastructure network to nic2 - type: interface name: nic2 mtu: {{ tenant_mtu }} use_dhcp: true primary: true - type: vlan mtu: {{ tenant_mtu }} vlan_id: {{ tenant_vlan_id }} addresses: - ip_netmask: {{ tenant_ip }}/{{ tenant_cidr }} routes: {{ [tenant_host_routes] | flatten | unique }} - type: ovs_bridge name: br-bond mtu: {{ external_mtu }} dns_servers: {{ ctlplane_dns_nameservers }} use_dhcp: false members: - type: interface name: nic10 mtu: {{ external_mtu }} use_dhcp: false primary: true - type: vlan mtu: {{ external_mtu }} vlan_id: {{ external_vlan_id }} addresses: - ip_netmask: {{ external_ip }}/{{ external_cidr }} routes: {{ [external_host_routes, [{'default': True, 'next_hop': external_gateway_ip}]] | flatten | unique }}
网络接口模板使用实际接口名称(eth0
, eth1
, enp0s25
)或一组编号的接口(nic1
, nic2
, nic3
)。当使用编号接口(nic1
, nic2
等)而不是命名接口(eth0
, eno2
等)时,角色中的主机的网络接口不必完全相同。例如,一个主机可能具有接口 em1
和 em2
,而另一个主机有 eno1
和 eno2
,但您可以将两个主机的 NIC 称为 nic1
和 nic2
。
编号的接口的顺序对应于命名网络接口类型的顺序:
-
ethX
接口,如eth
0、eth1
等。这些通常是载入接口。 -
enoX
接口,如eno
0、eno1
等。这些通常是载入接口。 -
enX
接口,数字排序,如enp3s
0、enp3s1、
ens3
等等。这些通常是附加组件接口。
编号的 NIC 方案仅包含实时接口,例如,如果接口附加到交换机上,则接口有电缆。如果您的主机有四个接口,而有些主机有六个接口,请使用 nic1
到 nic4
,并为每个主机上仅附加四个电缆。
为预置备节点自定义 NIC 映射
如果使用预置备节点,您可以通过在环境文件中配置 NetConfigDataLookup
heat 参数,为特定节点指定 os-net-config
映射。
NetConfigDataLookup
heat 参数的配置等同于节点定义文件 overcloud-baremetal-deploy.yaml
中的 net_config_data_lookup
属性。如果没有使用预置备节点,则必须在节点定义文件中配置 NIC 映射。有关配置 net_config_data_lookup
属性的更多信息,请参阅 裸机节点置备属性。
您可以为每个节点上的物理接口分配别名,以预先确定哪些物理 NIC 映射到特定别名,如 nic1
或 nic2
,您可以将 MAC 地址映射到指定的别名。您可以使用 MAC 地址或 DMI 关键字映射特定节点,也可以使用 DMI 关键字映射一组节点。以下示例将三个节点和两个带有别名的节点组配置为物理接口。生成的配置由 os-net-config
应用。在每个节点上,您可以在 /etc/os-net-config/mapping.yaml
文件的 interface_mapping
部分中看到应用的配置。
os-net-config-mappings.yaml
示例
NetConfigDataLookup: node1: 1 nic1: "00:c8:7c:e6:f0:2e" node2: nic1: "00:18:7d:99:0c:b6" node3: 2 dmiString: "system-uuid" 3 id: 'A8C85861-1B16-4803-8689-AFC62984F8F6' nic1: em3 # Dell PowerEdge nodegroup1: 4 dmiString: "system-product-name" id: "PowerEdge R630" nic1: em3 nic2: em1 nic3: em2 # Cisco UCS B200-M4" nodegroup2: dmiString: "system-product-name" id: "UCSB-B200-M4" nic1: enp7s0 nic2: enp6s0
通常,OS-net-config
仅注册已经以 UP
状态连接的接口。但是,如果您使用自定义映射文件的硬编码接口,接口也会注册,即使它处于 DOWN
状态。
10.5.2. 配置路由和默认路由
您可以通过以下两种方式之一设置主机的默认路由。如果接口使用 DHCP,DHCP 服务器提供网关地址,系统将使用该网关的默认路由。否则,您可以在带有静态 IP 的接口上设置默认路由。
虽然 Linux 内核支持多个默认网关,但它只使用具有最低指标的网关。如果有多个 DHCP 接口,这可能会导致无法预计的默认网关。在这种情况下,建议为使用默认路由的接口以外的接口设置 defroute: false
。
例如,您可能希望 DHCP 接口(nic
3)是默认路由。使用以下 YAML 代码片段禁用另一个 DHCP 接口上的默认路由(nic2
):
# No default route on this DHCP interface - type: interface name: nic2 use_dhcp: true defroute: false # Instead use this DHCP interface as the default route - type: interface name: nic3 use_dhcp: true
defroute
参数仅适用于通过 DHCP 获取的路由。
要在带有静态 IP 的接口上设置静态路由,请指定到子网的路由。例如,您可以通过内部 API 网络上的 172.17.0.1 的网关设置到 10.1.2.0/24 子网的路由:
- type: vlan device: bond1 vlan_id: 9 addresses: - ip_netmask: 172.17.0.100/16 routes: - ip_netmask: 10.1.2.0/24 next_hop: 172.17.0.1
10.5.3. 配置基于策略的路由
要在 Controller 节点上配置不同网络的无限访问,请配置基于策略的路由。基于策略的路由使用路由表,在具有多个接口的主机上,您可以根据源地址通过特定接口发送流量。您可以将来自不同源的数据包路由到不同的网络,即使目的地相同。
例如,您可以将路由配置为根据数据包的源地址将流量发送到内部 API 网络,即使默认路由用于外部网络。您还可以为每个接口定义特定的路由规则。
Red Hat OpenStack Platform 使用 os-net-config
工具为您的 overcloud 节点配置网络属性。os-net-config
工具管理 Controller 节点上的以下网络路由:
-
/etc/iproute2/rt_tables
文件中的路由表 -
/etc/sysconfig/network-scripts/rule-{ifname}
文件中的 IPv4 规则 -
/etc/sysconfig/network-scripts/rule6-{ifname}
文件中的 IPv6 规则 -
/etc/sysconfig/network-scripts/route-{ifname}
中的路由表特定路由
先决条件
- 您已成功安装 undercloud。如需更多信息,请参阅 Director 安装和使用指南中的安装 director。https://access.redhat.com/documentation/zh-cn/red_hat_openstack_platform/17.0/html-single/director_installation_and_usage/index#installing-the-undercloud
流程
从
/home/stack/templates/custom-nics
目录在自定义 NIC 模板中创建接口
条目,为接口定义路由,并定义与您的部署相关的规则:network_config: - type: interface name: em1 use_dhcp: false addresses: - ip_netmask: {{ external_ip }}/{{ external_cidr}} routes: - default: true next_hop: {{ external_gateway_ip }} - ip_netmask: {{ external_ip }}/{{ external_cidr}} next_hop: {{ external_gateway_ip }} route_table: 2 route_options: metric 100 rules: - rule: "iif em1 table 200" comment: "Route incoming traffic to em1 with table 200" - rule: "from 192.0.2.0/24 table 200" comment: "Route all traffic from 192.0.2.0/24 with table 200" - rule: "add blackhole from 172.19.40.0/24 table 200" - rule: "add unreachable iif em1 from 192.168.1.0/24"
在部署命令中包含自定义 NIC 配置和网络环境文件,以及与部署相关的任何其他环境文件:
$ openstack overcloud deploy --templates \ -e /home/stack/templates/<custom-nic-template> -e <OTHER_ENVIRONMENT_FILES>
验证
在 Controller 节点上输入以下命令验证路由配置是否正常工作:
$ cat /etc/iproute2/rt_tables $ ip route $ ip rule
10.5.4. 配置巨型帧
最大传输单元(MTU)设置决定了通过单一以太网帧传输的最大数据量。使用较大的值会导致开销较少,因为每个帧以标头的形式添加数据。默认值为 1500,使用更高的值需要配置交换机端口来支持巨型帧。大多数交换机支持至少 9000 的 MTU,但很多交换机默认配置为 1500。
VLAN 的 MTU 不能超过物理接口的 MTU。确保您在绑定或接口中包含 MTU 值。
存储、存储管理、内部 API 和租户网络都可从巨型帧中受益。
您可以在 jinja2
模板或 network_data.yaml
文件中更改 mtu
的值。如果您在部署过程中呈现的 network_data.yaml
文件中的值。
路由器通常无法跨第 3 层边界转发巨型帧。为避免连接问题,请不要更改 Provisioning 接口、外部接口和任何浮动 IP 接口的默认 MTU。
--- {% set mtu_list = [ctlplane_mtu] %} {% for network in role_networks %} {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }} {%- endfor %} {% set min_viable_mtu = mtu_list | max %} network_config: - type: ovs_bridge name: bridge_name mtu: {{ min_viable_mtu }} use_dhcp: false dns_servers: {{ ctlplane_dns_nameservers }} domain: {{ dns_search_domains }} addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} routes: {{ [ctlplane_host_routes] | flatten | unique }} members: - type: interface name: nic1 mtu: {{ min_viable_mtu }} primary: true - type: vlan mtu: 9000 1 vlan_id: {{ storage_vlan_id }} addresses: - ip_netmask: {{ storage_ip }}/{{ storage_cidr }} routes: {{ [storage_host_routes] | flatten | unique }} - type: vlan mtu: {{ storage_mgmt_mtu }} 2 vlan_id: {{ storage_mgmt_vlan_id }} addresses: - ip_netmask: {{ storage_mgmt_ip }}/{{ storage_mgmt_cidr }} routes: {{ [storage_mgmt_host_routes] | flatten | unique }} - type: vlan mtu: {{ internal_api_mtu }} vlan_id: {{ internal_api_vlan_id }} addresses: - ip_netmask: {{ internal_api_ip }}/{{ internal_api_cidr }} routes: {{ [internal_api_host_routes] | flatten | unique }} - type: vlan mtu: {{ tenant_mtu }} vlan_id: {{ tenant_vlan_id }} addresses: - ip_netmask: {{ tenant_ip }}/{{ tenant_cidr }} routes: {{ [tenant_host_routes] | flatten | unique }} - type: vlan mtu: {{ external_mtu }} vlan_id: {{ external_vlan_id }} addresses: - ip_netmask: {{ external_ip }}/{{ external_cidr }} routes: {{ [external_host_routes, [{'default': True, 'next_hop': external_gateway_ip}]] | flatten | unique }}
10.5.5. 配置 ML2/OVN 北向路径 MTU 发现,以实现巨型帧碎片
如果内部网络中的虚拟机将巨型帧发送到外部网络,并且内部网络的最大传输单元(MTU)超过外部网络的 MTU,则北向帧可以轻松地超过外部网络的容量。
ML2/OVS 会自动处理这种过度化数据包问题,ML2/OVN 会自动处理 TCP 数据包。
但是,为了确保正确处理使用 ML2/OVN 机制驱动程序的部署中的无线 UDP 数据包,您需要执行额外的配置步骤。
这些步骤将 ML2/OVN 路由器配置为将 ICMP"fragment required"数据包返回到发送虚拟机,其中发送的应用程序会将有效负载分成较小的数据包。
在 east/west 流量中,RHOSP ML2/OVN 部署不支持碎片超过 east/west 路径上最小 MTU 的数据包。例如:
- VM1 位于 Network1 上,其 MTU 为 1300。
- VM2 位于 Network2 上,其 MTU 为 1200。
在 VM1 和 VM2 之间以方向形式进行 ping,大小为 1171 或更少成功。大于 1171 的 ping 会导致数据包丢失百分比。
由于没有客户的具体要求,红帽还没有计划提供对它的支持。
流程
在 ml2_conf.ini 的 [ovn] 部分中设置以下值:
ovn_emit_need_to_frag = True
10.5.6. 在中继接口上配置原生 VLAN
如果中继的接口或绑定在原生 VLAN 上有网络,则 IP 地址会直接分配给网桥,且没有 VLAN 接口。
以下示例配置了一个绑定接口,其中外部网络位于原生 VLAN 上:
network_config: - type: ovs_bridge name: br-ex addresses: - ip_netmask: {{ external_ip }}/{{ external_cidr }} routes: {{ external_host_routes }} members: - type: ovs_bond name: bond1 ovs_options: {{ bond_interface_ovs_options }} members: - type: interface name: nic3 primary: true - type: interface name: nic4
当您将地址或路由语句移到网桥时,从网桥中删除对应的 VLAN 接口。对所有适用的角色进行更改。外部网络仅存在于控制器上,因此只有控制器模板需要更改。存储网络附加到所有角色,因此如果存储网络位于默认 VLAN 上,则所有角色都需要修改。
10.5.7. 增加 netfilter 跟踪的最大连接数
Red Hat OpenStack Platform (RHOSP)网络服务(neutron)使用 netfilter 连接跟踪来构建有状态的防火墙,并在虚拟网络上提供网络地址转换(NAT)。在某些情况下,可能会导致内核空间达到最大连接限制,并导致错误,如 nf_conntrack: 表 full,丢弃数据包。
您可以提高连接跟踪(conntrack)的限制,并避免这些类型的错误。您可以在 RHOSP 部署中增加一个或多个角色的 conntrack 限制。
先决条件
- 成功安装 RHOSP undercloud。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找 undercloud 凭证文件:
$ source ~/stackrc
创建自定义 YAML 环境文件。
示例
$ vi /home/stack/templates/custom-environment.yaml
您的环境文件必须包含 keywords
parameter_defaults
和ExtraSysctlSettings
。为 netfilter 可在变量net.nf_conntrack_max
中跟踪的最大连接数输入一个新值。示例
在本例中,您可以在 RHOSP 部署中的所有主机上设置 conntrack 限制:
parameter_defaults: ExtraSysctlSettings: net.nf_conntrack_max: value: 500000
使用 &
lt;role>Parameter
参数为特定角色设置 conntrack 限制:parameter_defaults: <role>Parameters: ExtraSysctlSettings: net.nf_conntrack_max: value: <simultaneous_connections>
将
<role
> 替换为角色的名称。例如,使用
ControllerParameters
为 Controller 角色设置 conntrack 限制,或ComputeParameters
为 Compute 角色设置 conntrack 限制。将 <
simultaneous_connections
> 替换为您要同时允许的连接数量。示例
在本例中,您只能为 RHOSP 部署中的 Controller 角色设置 conntrack 限制:
parameter_defaults: ControllerParameters: ExtraSysctlSettings: net.nf_conntrack_max: value: 500000
注意net.nf_conntrack_max
的默认值为500000
连接。最大值为:429496739)
。
运行部署命令,包括核心 heat 模板、环境文件和新的自定义环境文件。
重要环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源具有优先权。
示例
$ openstack overcloud deploy --templates \ -e /home/stack/templates/custom-environment.yaml
其他资源
- Director 安装和使用指南中的环境文件
- Director 安装和使用指南中的 在 overcloud 创建中包含的环境文件