10.3. 可组合网络
如果要在不同网络上托管特定的网络流量,可以创建自定义可组合网络。director 提供了一个默认的网络拓扑,启用了网络隔离。您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml
中找到此配置。
overcloud 默认使用以下一组预定义的网络片段:
- 内部 API
- 存储
- 存储管理
- tenant
- 外部
您可以使用可组合网络为各种服务添加网络。例如,如果您有一个专用于 NFS 流量的网络,您可以将其呈现到多个角色。
director 支持在部署和更新阶段创建自定义网络。您可以将这些额外网络用于裸机节点、系统管理或为不同的角色创建单独的网络。您还可以使用它们创建多个网络集合,以用于在网络间路由流量的分割部署。
10.3.1. 添加可组合网络
使用可组合网络为各种服务添加网络。例如,如果您有一个专用于存储备份流量的网络,您可以将网络呈现到多个角色。
您可以在 /usr/share/openstack-tripleo-heat-templates/network-data-samples
目录中找到一个示例文件。
流程
列出可用的示例配置文件:
$ ll /usr/share/openstack-tripleo-heat-templates/network-data-samples/ -rw-r--r--. 1 root root 1554 May 11 23:04 default-network-isolation-ipv6.yaml -rw-r--r--. 1 root root 1181 May 11 23:04 default-network-isolation.yaml -rw-r--r--. 1 root root 1126 May 11 23:04 ganesha-ipv6.yaml -rw-r--r--. 1 root root 1100 May 11 23:04 ganesha.yaml -rw-r--r--. 1 root root 3556 May 11 23:04 legacy-routed-networks-ipv6.yaml -rw-r--r--. 1 root root 2929 May 11 23:04 legacy-routed-networks.yaml -rw-r--r--. 1 root root 383 May 11 23:04 management-ipv6.yaml -rw-r--r--. 1 root root 290 May 11 23:04 management.yaml -rw-r--r--. 1 root root 136 May 11 23:04 no-networks.yaml -rw-r--r--. 1 root root 2725 May 11 23:04 routed-networks-ipv6.yaml -rw-r--r--. 1 root root 2033 May 11 23:04 routed-networks.yaml -rw-r--r--. 1 root root 943 May 11 23:04 vip-data-default-network-isolation.yaml -rw-r--r--. 1 root root 848 May 11 23:04 vip-data-fixed-ip.yaml -rw-r--r--. 1 root root 1050 May 11 23:04 vip-data-routed-networks.yaml
复制最适合您的需要的网络配置文件示例:
$ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml /home/stack/templates/network_data.yaml
编辑
network_data.yaml
配置文件并为新网络添加一个部分:- name: StorageBackup vip: false name_lower: storage_backup subnets: storage_backup_subnet: ip_subnet: 172.16.6.0/24 allocation_pools: - start: 172.16.6.4 - end: 172.16.6.250 gateway_ip: 172.16.6.1
您可以在
network_data.yaml
文件中使用以下参数:name
- 设置网络的名称。
vip
- 启用在网络中创建虚拟 IP 地址。
name_lower
-
设置名称的小写版本,director 映射到分配给
roles_data.yaml
文件中角色的相应网络。 subnets
- 一个或多个子网防御。
subnet_name
- 设置子网的名称。
ip_subnet
- 以 CIDR 格式设置 IPv4 子网。
allocation_pools
- 为 IPv4 子网设置 IP 范围。
gateway_ip
- 设置网络的网关。
vlan
- 设置网络的 VLAN ID。
ipv6
- 将值设为 true 或 false。
ipv6_subnet
- 设置 IPv6 子网。
gateway_ipv6
- 设置 IPv6 网络的网关。
ipv6_allocation_pools
- 为 IPv6 子网设置 IP 范围。
routes_ipv6
- 设置 IPv6 网络的路由。
将所需的网络 VIP 定义模板示例从
/usr/share/openstack-tripleo-heat-templates/network-data-samples
复制到环境文件目录中。以下示例将vip-data-default-network-isolation.yaml
复制到名为vip_data.yaml
的本地环境文件:$ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/vip-data-default-network-isolation.yaml /home/stack/templates/vip_data.yaml
编辑
vip_data.yaml
配置文件。虚拟 IP 数据是虚拟 IP 地址定义列表,各自包含分配 IP 地址的网络名称。- network: storage_mgmt dns_name: overcloud - network: internal_api dns_name: overcloud - network: storage dns_name: overcloud - network: external dns_name: overcloud ip_address: <vip_address> - network: ctlplane dns_name: overcloud
-
将
<vip_address
> 替换为所需的虚拟 IP 地址。
您可以在
vip_data.yaml
文件中使用以下参数:network
- 设置 neutron 网络名称。这是唯一需要的参数。
ip_address
- 设置 VIP 的 IP 地址。
子网
- 设置 neutron 子网名称。在创建虚拟 IP neutron 端口时,用于指定子网。当部署使用路由网络时,需要此参数。
dns_name
- 设置 FQDN (完全限定域名)。
name
- 设置虚拟 IP 名称。
-
将
复制示例网络配置模板。Jinja2 模板用于定义 NIC 配置模板。浏览
/usr/share/ansible/roles/tripleo_network_config/templates/
目录中提供的示例(如果其中一个示例与您的要求匹配),请使用它。如果示例与您的要求不匹配,请复制示例配置文件并根据您的需要进行修改:$ cp /usr/share/ansible/roles/tripleo_network_config/templates/single_nic_vlans/single_nic_vlans.j2 /home/stack/templates/
编辑
single_nic_vlans.j2
配置文件:--- {% 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: {{ 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 }} members: - type: interface name: nic1 mtu: {{ min_viable_mtu }} # force the MAC address of the bridge to this interface primary: true {% for network in role_networks %} - type: vlan 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 %}
在
overcloud-baremetal-deploy.yaml
配置文件中设置network_config
模板:- name: CephStorage count: 3 defaults: networks: - network: storage - network: storage_mgmt - network: storage_backup network_config: template: /home/stack/templates/single_nic_vlans.j2
置备 overcloud 网络。此操作会生成一个输出文件,该文件将在部署 overcloud 时使用环境文件:
(undercloud)$ openstack overcloud network provision --output <deployment_file> /home/stack/templates/<networks_definition_file>.yaml
-
将
<networks_definition_file
> 替换为网络定义文件的名称,如network_data.yaml
。 -
将
<deployment_file
> 替换为用于部署命令生成的 heat 环境文件名称,如/home/stack/templates/overcloud-networks-deployed.yaml
。
-
将
置备网络 VIP,并生成
vip-deployed-environment.yaml
文件。在部署 overcloud 时,您可以使用此文件:(overcloud)$ openstack overcloud network vip provision --stack <stack> --output <deployment_file> /home/stack/templates/vip_data.yaml
-
将 &
lt;stack
> 替换为置备网络 VIP 的堆栈的名称。如果未指定,则默认为 overcloud。 -
将
<deployment_file
> 替换为用于部署命令生成的 heat 环境文件名称,如/home/stack/templates/overcloud-vip-deployed.yaml
。
-
将 &
10.3.2. 在角色中包含可组合网络
您可以将可组合网络分配给您的环境中定义的 overcloud 角色。例如,您可以使用 Ceph Storage 节点包含自定义 StorageBackup
网络。
流程
如果您还没有自定义
roles_data.yaml
文件,请将默认值复制到您的主目录中:$ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
-
编辑自定义
roles_data.yaml
文件。 将网络名称包含在您要添加
网络
的角色的网络列表中。例如,要将StorageBackup
网络添加到 Ceph Storage 角色中,请使用以下示例片断:- name: CephStorage description: | Ceph OSD Storage node role networks: Storage subnet: storage_subnet StorageMgmt subnet: storage_mgmt_subnet StorageBackup subnet: storage_backup_subnet
- 将自定义网络添加到其各自角色后,保存文件。
运行 openstack overcloud deploy
命令时,请使用 -r
选项包含自定义 roles_data.yaml
文件。如果没有 -r
选项,部署命令使用默认角色集及其相应分配的网络。
10.3.3. 将 OpenStack 服务分配给可组合网络
每个 OpenStack 服务都分配给资源 registry 中的默认网络类型。这些服务绑定到网络类型分配的网络中的 IP 地址。虽然 OpenStack 服务被分为这些网络,但实际物理网络的数量可能与网络环境文件中定义的不同。您可以通过在环境文件中定义新网络映射来将 OpenStack 服务重新分配给不同的网络类型,例如 /home/stack/templates/service-reassignments.yaml
。ServiceNetMap
参数决定您要用于各个服务的网络类型。
例如,您可以通过修改高亮的部分将 Storage Management 网络服务重新分配给 Storage Backup Network:
parameter_defaults: ServiceNetMap: SwiftStorageNetwork: storage_backup CephClusterNetwork: storage_backup
将这些参数改为 storage_backup
会将这些服务放在 Storage Backup 网络中,而不是 Storage Management 网络。这意味着,您必须仅为 Storage Backup 网络而不是 Storage Management 网络定义一组 parameter_defaults
。
director 将自定义 ServiceNetMap
参数定义合并到预定义的默认值列表中,它将从 ServiceNetMapDefaults
获取并覆盖默认值。director 将完整的列表(包括自定义)返回到 ServiceNetMap
,用于为各种服务配置网络分配。
服务映射适用于使用 Pacemaker 的 network_data.yaml
文件中使用 vip: true
的网络。overcloud 负载均衡器将来自 VIP 的流量重定向到特定的服务端点。
您可以在 /usr/share/openstack-tripleo-heat-templates/network/service_net_map.j2.yaml
文件的 ServiceNetMapDefaults
参数中找到默认服务的完整列表。
10.3.4. 启用自定义可组合网络
使用其中一个默认 NIC 模板启用自定义可组合网络。在本例中,将 Single NIC 与 VLAN 模板(custom_single_nic_vlans
)一起使用。
流程
查找 stackrc undercloud 凭证文件:
$ source ~/stackrc
置备 overcloud 网络:
$ openstack overcloud network provision \ --output overcloud-networks-deployed.yaml \ custom_network_data.yaml
置备网络 VIP:
$ openstack overcloud network vip provision \ --stack overcloud \ --output overcloud-networks-vips-deployed.yaml \ custom_vip_data.yaml
置备 overcloud 节点:
$ openstack overcloud node provision \ --stack overcloud \ --output overcloud-baremetal-deployed.yaml \ overcloud-baremetal-deploy.yaml
构建
openstack overcloud deploy
命令,按所需顺序指定配置文件和模板,例如:$ openstack overcloud deploy --templates \ --networks-file network_data_v2.yaml \ -e overcloud-networks-deployed.yaml \ -e overcloud-networks-vips-deployed.yaml \ -e overcloud-baremetal-deployed.yaml -e custom-net-single-nic-with-vlans.yaml
本例命令在 overcloud 中的节点之间部署可组合网络,包括您的额外网络。
10.3.5. 重命名默认网络
您可以使用 network_data.yaml
文件来修改默认网络的用户可见名称:
- InternalApi
- 外部
- 存储
- StorageMgmt
- tenant
要更改这些名称,请不要修改 name
字段。相反,将 name_lower
字段更改为网络的新名称,并使用新名称更新 ServiceNetMap。
流程
在
network_data.yaml
文件中,为您要重命名的每个网络的name_lower
参数输入新名称:- name: InternalApi name_lower: MyCustomInternalApi
在
service_net_map_replace
参数中包含name_lower
参数的默认值:- name: InternalApi name_lower: MyCustomInternalApi service_net_map_replace: internal_api