10.4. 自定义网络接口模板


配置 第 10.2 节 “网络隔离” 后,您可以创建一组自定义网络接口模板,以适应环境中的节点。例如,您可以包含以下文件:

  • 用于配置网络默认值的环境文件(/usr/share/openstack-tripleo-heat-templates/environments/network/multiple-nics/network-environment.yaml)。
  • 为各个节点定义 NIC 布局的模板。overcloud 核心模板集合包含一组用于不同用例的默认值。要创建自定义 NIC 模板,请呈现默认的 Jinja2 模板作为自定义模板的基础。
  • 启用 NIC 的自定义环境文件。本例使用引用自定义接口模板的自定义环境文件(/home/stack/templates/custom-network-configuration.yaml)。
  • 自定义网络参数的任何其他环境文件。
  • 如果自定义网络,则自定义 network_data.yaml 文件。
  • 如果您创建额外的或自定义可组合网络,则自定义 network_data.yaml 文件和自定义 roles_data.yaml 文件。
注意

上一个列表中的一些文件是 Jinja2 格式文件,它带有一个 .j2.yaml 扩展名。director 在部署过程中将这些文件呈现给 .yaml 版本。

10.4.1. 自定义网络架构

NIC 模板示例可能不适用于特定的网络配置。例如,您可能想创建自己的自定义 NIC 模板,该模板适合特定的网络布局。您可能需要将控制服务和数据服务分开来分隔到单独的 NIC。在这种情况下,您可以使用以下方法将服务映射到 NIC 分配:

  • NIC1 (Provisioning)

    • 置备/控制平面
  • NIC2 (控制组)

    • 内部 API
    • 存储管理
    • 外部(公共 API)
  • NIC3 (Data Group)

    • 租户网络(VXLAN 隧道)
    • 租户 VLAN/ Provider VLAN
    • 存储
    • 外部 VLAN (利用 IP/SNAT)
  • NIC4 (管理)

    • 管理

10.4.2. 网络接口参考

网络接口配置包含以下参数:

Interface

定义一个网络接口。配置使用实际接口名称("eth0", "eth1", "enp0s25")或一组数字接口 ("nic1", "nic2", "nic3") 定义各个接口:

  - type: interface
    name: nic2
Expand
表 10.4. 接口选项
选项默认描述

name

 

接口的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给接口的 IP 地址列表。

Routes

 

分配给接口的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于接口的 DNS 服务器列表。

ethtool_opts

 

将这个选项设置为 "rx-flow-hash udp4 sdfn",以便在某些 NIC 上使用 VXLAN 时提高吞吐量。

vlan

定义 VLAN。使用从 parameters 部分中传递的 VLAN ID 和子网。

例如:

  - type: vlan
    device: nic{{ loop.index + 1 }}
    mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
    vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
    addresses:
    - ip_netmask:
      {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
  routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
Expand
表 10.5. VLAN 选项
选项默认描述

vlan_id

 

VLAN ID。

device

 

附加 VLAN 的父设备。当 VLAN 不是 OVS 网桥的成员时,请使用此参数。例如,使用此参数将 VLAN 附加到绑定接口设备。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给 VLAN 的 IP 地址列表。

Routes

 

分配给 VLAN 的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将 VLAN 定义为主接口。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于 VLAN 的 DNS 服务器列表。

ovs_bond

定义 Open vSwitch 中的绑定将两个或更多 接口 加入在一起。这有助于冗余,并增加带宽。

例如:

  members:
    - type: ovs_bond
      name: bond1
      mtu: {{ min_viable_mtu }}
      ovs_options: {{ bond_interface_ovs_options }}
      members:
      - type: interface
        name: nic2
        mtu: {{ min_viable_mtu }}
        primary: true
      - type: interface
        name: nic3
        mtu: {{ min_viable_mtu }}
Expand
表 10.6. ovs_bond options
选项默认描述

name

 

绑定的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给绑定的 IP 地址列表。

Routes

 

分配给绑定的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

成员

 

要在绑定中使用的接口对象序列。

ovs_options

 

创建绑定时传递给 OVS 的一组选项。

ovs_extra

 

在绑定的网络配置文件中设置为 OVS_EXTRA 参数的一组选项。

defroute

True

使用 DHCP 服务提供的默认路由。仅在启用 use_dhcpuse_dhcpv6 时应用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于绑定的 DNS 服务器列表。

ovs_bridge

在 Open vSwitch 中定义一个网桥,将多个 interface, ovs_bond, 和 vlan 对象连接在一起。

网络接口类型 ovs_bridge 采用 参数名称

注意

如果您有多个网桥,则必须使用不同于接受 bridge_name 的默认网桥名称。如果您没有使用不同名称,那么在聚合阶段,两个网络绑定将放在同一个网桥中。

如果您要为外部 tripleo 网络定义 OVS 网桥,则保留 bridge_nameinterface_name 值作为部署框架,则分别将这些值替换为外部网桥名称和外部接口名称。

例如:

  - type: ovs_bridge
    name: br-bond
    dns_servers: {{ ctlplane_dns_nameservers }}
    domain: {{ dns_search_domains }}
    members:
    - type: ovs_bond
      name: bond1
      mtu: {{ min_viable_mtu }}
      ovs_options: {{ bound_interface_ovs_options }}
      members:
      - type: interface
        name: nic2
        mtu: {{ min_viable_mtu }}
        primary: true
      - type: interface
        name: nic3
        mtu: {{ min_viable_mtu }}
注意

OVS 网桥连接到 Networking 服务(neutron)服务器,以获取配置数据。如果 OpenStack 控制流量(通常是 Control Plane 和内部 API 网络)位于 OVS 网桥上,那么每当您升级 OVS 时,任何时候都会丢失与 neutron 服务器的连接,或者由 admin 用户或进程重启 OVS 网桥。这会导致一些停机时间。如果在这些情况下无法接受停机时间,您必须将 Control 组网络放在单独的接口或绑定中,而不是 OVS 网桥上:

  • 当您将内部 API 网络放在置备接口上的 VLAN 上时,您可以在第二个接口上获取最小设置。
  • 要实现绑定,至少需要两个绑定(我们的网络接口)。将控制组放在 Linux 绑定(Linux 网桥)上。如果交换机不支持 LACP 回退到单一接口进行 PXE 引导,那么这个解决方案至少需要 5 个 NIC。
Expand
表 10.7. ovs_bridge options
选项默认描述

name

 

网桥的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给网桥的 IP 地址列表。

Routes

 

分配给网桥的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

成员

 

您要在桥接中使用的接口、VLAN 和绑定对象序列。

ovs_options

 

创建网桥时要传递给 OVS 的一组选项。

ovs_extra

 

将一组选项设置为网桥的网络配置文件中的 OVS_EXTRA 参数。

defroute

True

使用 DHCP 服务提供的默认路由。仅在启用 use_dhcpuse_dhcpv6 时应用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于网桥的 DNS 服务器列表。

linux_bond

定义将两个或多个 接口 接合在一起的 Linux 绑定。这有助于冗余,并增加带宽。确保在 bonding_options 参数中包含基于内核的绑定选项。

例如:

- type: linux_bridge
  name: {{ neutron_physical_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 }}

请注意,nic2 使用 primary: true 来确保绑定对 nic2 使用 MAC 地址。

Expand
表 10.8. linux_bond options
选项默认描述

name

 

绑定的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给绑定的 IP 地址列表。

Routes

 

分配给绑定的路由列表。请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

primary

False

将接口定义为主接口。

成员

 

要在绑定中使用的接口对象序列。

bonding_options

 

创建绑定时的一组选项。

defroute

True

使用 DHCP 服务提供的默认路由。仅在启用 use_dhcpuse_dhcpv6 时应用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于绑定的 DNS 服务器列表。

linux_bridge

定义一个 Linux 网桥,它将多个 interface, linux_bond, 和 vlan 对象连接在一起。外部网桥还对参数使用两个特殊值:

  • bridge_name,它被外部网桥名称替换。
  • interface_name,它被外部接口替代。

例如:

  - type: linux_bridge
      name: bridge_name
      mtu:
        get_attr: [MinViableMtu, value]
      use_dhcp: false
      dns_servers:
        get_param: DnsServers
      domain:
        get_param: DnsSearchDomains
      addresses:
      - ip_netmask:
          list_join:
          - /
          - - get_param: ControlPlaneIp
            - get_param: ControlPlaneSubnetCidr
      routes:
        list_concat_unique:
          - get_param: ControlPlaneStaticRoutes
Expand
表 10.9. linux_bridge options
选项默认描述

name

 

网桥的名称。

use_dhcp

False

使用 DHCP 获取 IP 地址。

use_dhcpv6

False

使用 DHCP 获取 v6 IP 地址。

addresses

 

分配给网桥的 IP 地址列表。

Routes

 

分配给网桥的路由列表。更多信息请参阅 Routes

mtu

1500

连接的最大传输单元(MTU)。

成员

 

您要在桥接中使用的接口、VLAN 和绑定对象序列。

defroute

True

使用 DHCP 服务提供的默认路由。仅在启用 use_dhcpuse_dhcpv6 时应用。

persist_mapping

False

编写设备别名配置而不是系统名称。

dhclient_args

要传递给 DHCP 客户端的参数。

dns_servers

要用于网桥的 DNS 服务器列表。

Routes

定义要应用到网络接口、VLAN、网桥或绑定的路由列表。

例如:

  - type: linux_bridge
    name: bridge_name
    ...
    routes: {{ [ctlplane_host_routes] | flatten | unique }}
Expand
选项默认描述

ip_netmask

目标网络的 IP 和子网掩码。

default

False

将此路由设置为默认路由。等同于设置 ip_netmask: 0.0.0.0/0

next_hop

用于访问目标网络的路由器的 IP 地址。

10.4.3. 网络接口布局示例

以下控制器节点 NIC 模板的代码片段演示了如何配置自定义网络场景,使控制组与 OVS 网桥分开:

network_config:
- type: interface
  name: nic1
  mtu: {{ ctlplane_mtu }}
  use_dhcp: false
  addresses:
  - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }}
  routes: {{ ctlplane_host_routes }}
- type: linux_bond
  name: bond_api
  mtu: {{ min_viable_mtu_ctlplane }}
  use_dhcp: false
  bonding_options: {{ bond_interface_ovs_options }}
  dns_servers: {{ ctlplane_dns_nameservers }}
  domain: {{ dns_search_domains }}
  members:
  - type: interface
    name: nic2
    mtu: {{ min_viable_mtu_ctlplane }}
    primary: true
  - type: interface
    name: nic3
    mtu: {{ min_viable_mtu_ctlplane }}
{% for network in role_networks if not network.startswith('Tenant') %}
- type: vlan
  device: bond_api
  mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
  vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
  addresses:
  - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
  routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
{% endfor %}
- type: ovs_bridge
  name: {{ neutron_physical_bridge_name }}
  dns_servers: {{ ctlplane_dns_nameservers }}
  members:
  - type: linux_bond
    name: bond-data
    mtu: {{ min_viable_mtu_dataplane }}
    bonding_options: {{ bond_interface_ovs_options }}
    members:
    - type: interface
      name: nic4
      mtu: {{ min_viable_mtu_dataplane }}
      primary: true
    - type: interface
      name: nic5
      mtu: {{ min_viable_mtu_dataplane }}
{% for network in role_networks if network.startswith('Tenant') %}
  - type: vlan
    device: bond-data
    mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
    vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
    addresses:
    - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
    routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}

此模板使用五个网络接口,并将多个标记的 VLAN 设备分配到编号的接口。在 nic4nic5 上,此模板创建 OVS 网桥。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部