第 7 章 隔离网络
director 提供了配置隔离 Overcloud 网络的方法。这意味着 Overcloud 环境将网络流量类型划分为不同的网络,后者将网络流量分配到特定的网络接口或绑定。配置隔离的网络后,director 将 OpenStack 服务配置为使用隔离的网络。如果没有配置隔离网络,则所有服务都在 Provisioning 网络上运行。
这个示例为所有服务使用单独的网络:
- 网络 1 - 置备
- 网络 2 - 内部 API
- 网络 3 - 租户网络
- 网络 4 - 存储
- 网络 5 - 存储管理
- 网络 6 - 管理
- 网络 7 - 外部浮动 IP ( Overcloud 创建后映射)
在本例中,每个 Overcloud 节点使用绑定中的两个网络接口来提供 tagged VLAN 中的网络。以下网络分配适用于此绑定:
网络类型 | subnet | VLAN |
内部 API | 172.16.0.0/24 | 201 |
tenant | 172.17.0.0/24 | 202 |
存储 | 172.18.0.0/24 | 203 |
存储管理 | 172.19.0.0/24 | 204 |
管理 | 172.20.0.0/24 | 205 |
外部/浮动 IP | 10.1.1.0/24 | 100 |
7.1. 创建自定义模板
Overcloud 网络配置需要一组网络接口模板。您可以自定义这些模板,以针对每个角色配置节点接口。这些模板是 YAML 格式的标准 Heat 模板(请参阅 第 2.1 节 “Heat 模板”)。director 包含一组示例模板,供您启动:
-
/usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans
- 包含每个角色上带有 VLAN 配置的单个 NIC 的模板。 -
/usr/share/openstack-tripleo-heat-templates/network/bond-with-vlans
- 包含每个角色上绑定 NIC 配置的模板的目录。 -
/usr/share/openstack-tripleo-heat-templates/network/config/multiple-nics
- 包含每个角色为多个 NIC 配置的模板的目录。 -
/usr/share/openstack-tripleo-heat-templates/network/config/single-nic-linux-bridge-vlans
- 包含每个角色上带有 VLAN 配置的单一 NIC 的模板,并使用 Linux 网桥而不是 Open vSwitch 网桥。
这些示例仅包含默认角色的模板。要为自定义角色定义网络接口配置,请将这些模板用作基础。
在本例中,使用默认绑定的 NIC 示例配置作为基础。复制位于 /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans
的版本。
$ cp -r /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans ~/templates/nic-configs
这会创建一组本地的 heat 模板,该模板为每个角色定义绑定的网络接口配置。每个模板都包含标准 参数
、资源
和 output
部分。在本例中,您将只编辑 resources
部分。每个 resources
部分都以以下方式开始:
resources: OsNetConfigImpl: type: OS::Heat::StructuredConfig properties: group: os-apply-config config: os_net_config: network_config:
这会为 os-apply-config
命令和 os-net-config
子命令创建一个请求,以配置节点的网络属性。network_config
部分包含基于类型的顺序排列的自定义接口配置,其中包括:
- interface
定义单个网络接口。配置使用实际接口名称("eth0", "eth1", "enp0s25")或一组数字接口("nic1", "nic2", "nic3")来定义各个接口。
- type: interface name: nic2
- vlan
一个 VLAN。使用从
parameters
部分传递的 VLAN ID 和子网。- type: vlan vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet}
- ovs_bond
在 Open vSwitch 中定义绑定,将两个或多个
接口
加入一起。这有助于冗余并增加带宽。- type: ovs_bond name: bond1 members: - type: interface name: nic2 - type: interface name: nic3
- ovs_bridge
在 Open vSwitch 中定义一个网桥,它将多个接口
ovs_bond
和vlan
对象连接在一起。- type: ovs_bridge name: {get_input: bridge_name} members: - type: ovs_bond name: bond1 members: - type: interface name: nic2 primary: true - type: interface name: nic3 - type: vlan device: bond1 vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet}
- linux_bond
定义一个将两个或多个
接口
加入在一起的 Linux 绑定。这有助于冗余并增加带宽。确保在bonding_options
参数中包含基于内核的绑定选项。有关 Linux 绑定选项的更多信息,请参阅 4.5.1。bonding Module Directives (在 Red Hat Enterprise Linux 7 网络指南中)。- type: linux_bond name: bond1 members: - type: interface name: nic2 - type: interface name: nic3 bonding_options: "mode=802.3ad"
- linux_bridge
定义一个 Linux 网桥,它将多个接口 ,
linux_bond
和vlan
对象连接在一起。- type: linux_bridge name: bridge1 addresses: - ip_netmask: list_join: - '/' - - {get_param: ControlPlaneIp} - {get_param: ControlPlaneSubnetCidr} members: - type: interface name: nic1 primary: true - type: vlan vlan_id: {get_param: ExternalNetworkVlanID} device: bridge1 addresses: - ip_netmask: {get_param: ExternalIpSubnet} routes: - ip_netmask: 0.0.0.0/0 default: true next_hop: {get_param: ExternalInterfaceDefaultRoute}
有关这些项目的完整参数列表,请参阅 附录 C, 网络接口参数。
在本例中,您使用默认的绑定接口配置。例如,/home/stack/templates/nic-configs/controller.yaml
模板使用以下 network_config
:
resources: OsNetConfigImpl: type: OS::Heat::StructuredConfig properties: group: os-apply-config config: os_net_config: network_config: - type: interface name: nic1 use_dhcp: false addresses: - ip_netmask: list_join: - '/' - - {get_param: ControlPlaneIp} - {get_param: ControlPlaneSubnetCidr} routes: - ip_netmask: 169.254.169.254/32 next_hop: {get_param: EC2MetadataIp} - type: ovs_bridge name: {get_input: bridge_name} dns_servers: {get_param: DnsServers} members: - type: ovs_bond name: bond1 ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface name: nic2 primary: true - type: interface name: nic3 - type: vlan device: bond1 vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet} routes: - default: true next_hop: {get_param: ExternalInterfaceDefaultRoute} - type: vlan device: bond1 vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan device: bond1 vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} - type: vlan device: bond1 vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} - type: vlan device: bond1 vlan_id: {get_param: ManagementNetworkVlanID} addresses: - ip_netmask: {get_param: ManagementIpSubnet}
网络接口 Heat 模板中的管理网络部分已注释掉。取消注释本节以启用管理网络。
此模板定义网桥(通常是名为 br-ex
的外部网桥),并从两个数字的接口创建一个名为 bond1
的绑定接口: nic2
和 nic3
。该网桥还包含一些标记的 VLAN 设备,其使用 bond1
作为父设备。该模板还包括连接到 director 的接口(nic1
)。
有关网络接口模板的更多示例,请参阅 附录 B, 网络接口模板示例。
请注意,其中很多参数使用 get_param
函数。您可以在您为网络创建的环境文件中定义。
未使用的接口可能会导致不必要的默认路由和网络循环。例如,模板可能包含一个网络接口(nic4
),它不使用 OpenStack 服务的任何 IP 分配,但仍使用 DHCP 和/或默认路由。为了避免网络冲突,请从 ovs_bridge
设备中删除所有未使用的接口,并禁用 DHCP 和默认路由设置:
- type: interface name: nic4 use_dhcp: false defroute: false