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 等)时,角色中的主机的网络接口不必完全相同。例如,一个主机可能具有接口 em1em2,而另一个主机有 eno1eno2,但您可以将两个主机的 NIC 称为 nic1nic2

编号的接口的顺序对应于命名网络接口类型的顺序:

  • ethX 接口,如 eth 0、eth1 等。这些通常是载入接口。
  • enoX 接口,如 eno 0、eno1 等。这些通常是载入接口。
  • enX 接口,数字排序,如 enp3s 0、enp3s1、 ens3 等等。这些通常是附加组件接口。

编号的 NIC 方案仅包含实时接口,例如,如果接口附加到交换机上,则接口有电缆。如果您的主机有四个接口,而有些主机有六个接口,请使用 nic1nic4,并为每个主机上仅附加四个电缆。

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

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

注意

NetConfigDataLookup heat 参数的配置等同于节点定义文件 overcloud-baremetal-deploy.yaml 中的 net_config_data_lookup 属性。如果没有使用预置备节点,则必须在节点定义文件中配置 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

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

通常,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
注意

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}中的路由表特定路由

先决条件

流程

  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"
  2. 在部署命令中包含自定义 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 }}
1
直接在 jinja2 模板中更新的 MTU 值。
2
部署期间,从 network_data.yaml 文件中获取 MTU 值。

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 会导致数据包丢失百分比。

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

流程

  1. 在 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。

流程

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

    $ source ~/stackrc
  3. 创建自定义 YAML 环境文件。

    示例

    $ vi /home/stack/templates/custom-environment.yaml

  4. 您的环境文件必须包含 keywords parameter_defaultsExtraSysctlSettings。为 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 连接。最大值为:429 496739)

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

    重要

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

    示例

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/custom-environment.yaml

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.