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
| 选项 | 默认 | 描述 |
|---|---|---|
| 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 |
将这个选项设置为 |
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') }}
| 选项 | 默认 | 描述 |
|---|---|---|
| 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 }}
| 选项 | 默认 | 描述 |
|---|---|---|
| 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 服务提供的默认路由。仅在启用 |
| persist_mapping | False | 编写设备别名配置而不是系统名称。 |
| dhclient_args | 无 | 要传递给 DHCP 客户端的参数。 |
| dns_servers | 无 | 要用于绑定的 DNS 服务器列表。 |
ovs_bridge
在 Open vSwitch 中定义一个网桥,将多个 interface, ovs_bond, 和 vlan 对象连接在一起。
网络接口类型 ovs_bridge 采用 参数名称。
如果您有多个网桥,则必须使用不同于接受 bridge_name 的默认网桥名称。如果您没有使用不同名称,那么在聚合阶段,两个网络绑定将放在同一个网桥中。
如果您要为外部 tripleo 网络定义 OVS 网桥,则保留 bridge_name 和 interface_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。
| 选项 | 默认 | 描述 |
|---|---|---|
| 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 服务提供的默认路由。仅在启用 |
| 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 地址。
| 选项 | 默认 | 描述 |
|---|---|---|
| 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 服务提供的默认路由。仅在启用 |
| 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
| 选项 | 默认 | 描述 |
|---|---|---|
| name | 网桥的名称。 | |
| use_dhcp | False | 使用 DHCP 获取 IP 地址。 |
| use_dhcpv6 | False | 使用 DHCP 获取 v6 IP 地址。 |
| addresses | 分配给网桥的 IP 地址列表。 | |
| Routes | 分配给网桥的路由列表。更多信息请参阅 Routes。 | |
| mtu | 1500 | 连接的最大传输单元(MTU)。 |
| 成员 | 您要在桥接中使用的接口、VLAN 和绑定对象序列。 | |
| defroute | True |
使用 DHCP 服务提供的默认路由。仅在启用 |
| persist_mapping | False | 编写设备别名配置而不是系统名称。 |
| dhclient_args | 无 | 要传递给 DHCP 客户端的参数。 |
| dns_servers | 无 | 要用于网桥的 DNS 服务器列表。 |
Routes
定义要应用到网络接口、VLAN、网桥或绑定的路由列表。
例如:
- type: linux_bridge
name: bridge_name
...
routes: {{ [ctlplane_host_routes] | flatten | unique }}
| 选项 | 默认 | 描述 |
|---|---|---|
| ip_netmask | 无 | 目标网络的 IP 和子网掩码。 |
| default | False |
将此路由设置为默认路由。等同于设置 |
| 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 设备分配到编号的接口。在 nic4 和 nic5 上,此模板创建 OVS 网桥。