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 }}
Copy to Clipboard Toggle word wrap

网络接口模板使用实际接口名称(eth0, eth1, enp0s25)或一组编号的接口(nic1, nic2, nic3)。当使用编号接口(nic1, nic2 等)而不是命名接口(eth0, eno2 等)时,角色中的主机的网络接口不必完全相同。例如,一个主机可能具有接口 em1em2,而另一个主机具有 eno1eno2,但您可以将两个主机的 NIC 指代为 nic1nic2

编号接口的顺序与指定网络接口类型的顺序对应:

  • ethX 接口,如 eth 0、eth1 等。这些通常是板载接口。
  • enoX 接口,如 eno0eno1 等。这些通常是板载接口。
  • enX 接口,按字母数字排序,如 enp3s0enp3s1、 ens3 等。这些通常是附加接口。

编号的 NIC 方案仅包含实时接口,例如当接口有电缆连接到交换机时。如果您有一些主机具有四个接口,且一些有六个接口,请使用 nic1nic4,并且每个主机上仅连接四个电缆。

为预置备节点自定义 NIC 映射

如果使用预置备节点,您可以通过在环境文件中配置 NetConfigDataLookup heat 参数来指定特定节点的 os-net-config 映射。

注意

NetConfigDataLookup heat 参数的配置等同于节点定义文件中的 net_config_data_lookup 属性,即 overcloud-baremetal-deploy.yaml。如果没有使用预置备节点,您必须在节点定义文件中配置 NIC 映射。有关配置 net_config_data_lookup 属性的更多信息,请参阅 裸机节点置备属性

您可以为每个节点上的物理接口分配别名,以预先确定哪个物理 NIC 映射到特定别名,如 nic1nic2,您可以将 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
Copy to Clipboard Toggle word wrap

1
node1 映射到指定的 MAC 地址,并将 nic1 分配为此节点上 MAC 地址的别名。
2
node3 映射到具有系统 UUID "A8C85861-1B16-4803-8689-AFC62984F8F6" 的节点,并将 nic1 分配为此节点上 em3 接口的别名。
3
dmiString 参数必须设置为有效的字符串关键字。有关有效字符串关键字的列表,请查看 DMIDECODE (8)手册页。
4
nodegroup1 中的所有节点映射到产品名称"PowerEdge R630"的节点,并将 nic1nic2nic3 分配为这些节点上命名接口的别名。
注意

通常,os-net-config 仅注册已在 UP 状态连接的接口。但是,如果您硬编码接口带有自定义映射文件,接口也会注册,即使它处于 DOWN 状态。

10.5.2. 配置路由和默认路由

您可以通过以下两种方式之一设置主机的默认路由:如果接口使用 DHCP,并且 DHCP 服务器提供网关地址,则系统为该网关使用默认路由。否则,您可以在具有静态 IP 的接口上设置默认路由。

虽然 Linux 内核支持多个默认网关,但它仅使用具有最低指标的网关。如果有多个 DHCP 接口,这可能会导致无法预计的默认网关。在这种情况下,建议为使用默认路由的接口以外的接口设置 defroute: false

例如,您可能希望 DHCP 接口(nic3)是默认路由。使用以下 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
Copy to Clipboard Toggle word wrap
注意

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
Copy to Clipboard Toggle word wrap

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

流程

  1. /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"
    Copy to Clipboard Toggle word wrap
  2. 在部署命令中包含您的自定义 NIC 配置和网络环境文件,以及与部署相关的任何其他环境文件:

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/<custom-nic-template>
    -e <OTHER_ENVIRONMENT_FILES>
    Copy to Clipboard Toggle word wrap

验证

  • 在 Controller 节点上输入以下命令,以验证路由配置是否正常工作:

    $ cat /etc/iproute2/rt_tables
    $ ip route
    $ ip rule
    Copy to Clipboard Toggle word wrap

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 }}
Copy to Clipboard Toggle word wrap
1
直接在 jinja2 模板中更新的 MTU 值。
2
在部署过程中,从 network_data.yaml 文件中获取 MTU 值。

如果您的内部网络上的虚拟机将巨型帧发送到外部网络,并且内部网络的最大传输单元(MTU)超过外部网络的 MTU,则北向帧可以轻松地超过外部网络的容量。

ML2/OVS 会自动处理通过大小的数据包问题,ML2/OVN 会自动处理它用于 TCP 数据包。

但是,为了确保在使用 ML2/OVN 机制驱动程序的部署中正确处理过度北向 UDP 数据包,您需要执行额外的配置步骤。

这些步骤将 ML2/OVN 路由器配置为将 ICMP"碎片处理所需的"数据包返回到发送虚拟机,其中发送应用可以将有效负载分成较小的数据包。

注意

在 east/west 流量中,RHOSP ML2/OVN 部署不支持大于 east/west 路径上最小 MTU 的数据包碎片。例如:

  • VM1 位于 Network1 上,其 MTU 为 1300。
  • VM2 位于 Network2 上,其 MTU 为 1200。
  • 在 VM1 和 VM2 之间带有大小为 1171 或不成功的一个 ping。大于 1171 的 ping 会导致数据包丢失百分比。

    由于没有客户的具体要求,红帽还没有计划提供对它的支持。

流程

  1. 在 ml2_conf.ini 的 [ovn] 部分中设置以下值:

    ovn_emit_need_to_frag = True
    Copy to Clipboard Toggle word wrap

10.5.6. 在中继接口上配置原生 VLAN

如果中继接口或绑定在原生 VLAN 上有网络,则该 IP 地址直接分配给网桥,且没有 VLAN 接口。

以下示例配置了一个绑定接口,其中 External 网络位于原生 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
Copy to Clipboard Toggle word wrap
注意

当您将地址或路由语句移到网桥时,从网桥中删除对应的 VLAN 接口。对所有适用的角色进行更改。外部网络仅位于控制器上,因此只有控制器模板需要更改。Storage 网络会附加到所有角色,因此如果存储网络位于默认的 VLAN 上,则所有角色都需要修改。

10.5.7. 增加 netfilter 跟踪的最大连接数

Red Hat OpenStack Platform (RHOSP)网络服务(neutron)使用 netfilter 连接跟踪来构建有状态的防火墙,并在虚拟网络上提供网络地址转换(NAT)。有些情况下,可能会导致内核空间达到最大连接限制,并导致错误,如 nf_conntrack: 表 full、丢弃数据包。您可以增加连接跟踪(conntrack)的限制,并避免这些类型的错误。您可以在 RHOSP 部署中为一个或多个角色或所有节点增加 conntrack 限制。

先决条件

  • RHOSP undercloud 安装成功。

流程

  1. stack 用户身份登录 undercloud 主机。
  2. 提供 undercloud 凭证文件:

    $ source ~/stackrc
    Copy to Clipboard Toggle word wrap
  3. 创建自定义 YAML 环境文件。

    示例

    $ vi /home/stack/templates/custom-environment.yaml
    Copy to Clipboard Toggle word wrap

  4. 您的环境文件必须包含 keyword 参数_defaultsExtraSysctlSettings。为 netfilter 可在变量 net.nf_conntrack_max 中跟踪的最大连接数输入新值。

    示例

    在本例中,您可以在 RHOSP 部署中的所有主机中设置 conntrack 限制:

    parameter_defaults:
      ExtraSysctlSettings:
        net.nf_conntrack_max:
          value: 500000
    Copy to Clipboard Toggle word wrap

    使用 & lt;role>Parameter 参数为特定角色设置 conntrack 限制:

    parameter_defaults:
      <role>Parameters:
        ExtraSysctlSettings:
          net.nf_conntrack_max:
            value: <simultaneous_connections>
    Copy to Clipboard Toggle word wrap
    • <role > 替换为角色的名称。

      例如,使用 ControllerParameters 为 Controller 角色设置 conntrack 限制,或使用 ComputeParameters 为 Compute 角色设置 conntrack 限制。

    • <simultaneous_connections > 替换为您要允许的同时连接的数量。

      示例

      在本例中,您只能为 RHOSP 部署中的 Controller 角色设置 conntrack 限制:

      parameter_defaults:
        ControllerParameters:
          ExtraSysctlSettings:
            net.nf_conntrack_max:
              value: 500000
      Copy to Clipboard Toggle word wrap
      注意

      net.nf_conntrack_max 的默认值为 500000 连接。最大值为: 4294967295

  5. 运行部署命令,并包括核心 heat 模板、环境文件和新的自定义环境文件。

    重要

    环境文件的顺序非常重要,因为后续环境文件中定义的参数和资源更为优先。

    示例

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/custom-environment.yaml
    Copy to Clipboard Toggle word wrap

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部