网络数据格式/模式 (v2)¶
用于在 TripleO 中定义可组合网络的网络数据模式 (network_data.yaml) 自首次引入以来,已进行了多次添加。 由于遗留兼容性,一些添加使得该模式有些不直观。 例如,添加了对路由网络的⽀持,此时引⼊了 subnets 映射。
本规范的目标是引发讨论并确定新的网络数据 (v2) 格式,该格式将在网络资源(如网络、段和子网)的管理从 heat 堆栈中移出后使用。
问题描述¶
当前模式有些不一致,并且不够精确。 例如,base 子网位于 level-0,而附加子网位于 subnets 映射中。 将所有子网定义在 subnets 映射中会更直观。
当前,网络资源属性是通过 heat 环境中的参数和网络数据混合配置的。 例如 dns_domain、admin_state_up、enable_dhcp、ipv6_address_mode、ipv6_ra_mode 和 shared 属性通过 Heat 参数配置,而其他属性(如 cidr、gateway_ip、host_routes 等)在网络数据中定义。
提议的变更¶
概述¶
更改网络数据格式,以便所有网络属性都在网络数据中管理,从而可以在 heat 堆栈外部管理网络资源。
注意
网络数据 v2 格式将仅与将管理 heat 堆栈外部网络的新工具一起使用。
网络数据 v2 格式应与 tripleo-heat-templates jinja2 渲染保持兼容,但不在 OS::TripleO::Network 资源及其子资源 OS::TripleO::Network::{{network.name}} 之外。
用户体验¶
将提供工具,供用户从现有部署中导出网络信息。 此工具将输出 v2 格式的网络数据文件,然后可以使用 tripleoclient 命令或 tripleo-ansible cli playbook 来管理网络资源。
用于管理网络资源的命令行工具将输出在部署 heat 堆栈时必须包含的环境文件。(类似于在不使用 nova 的情况下配置 baremetal 节点时生成的环境文件。)
CLI 命令¶
将配置好的 overcloud 网络信息导出到网络数据 v2 格式的命令。
openstack overcloud network export \
--stack <stack_name> \
--output <network_data_v2.yaml>
在 heat 外部创建/更新 overcloud 网络的命令。
openstack overcloud network provision \
--networks-file <network_data_v2.yaml> \
--output <network_environment.yaml>
当前网络数据模式与此处提出的 v2 模式之间的主要区别
基本子网移动到
subnets映射,统一了非路由和路由部署(spine-and-leaf、DCN/Edge)的配置不再使用
enabled(bool)。 应从文件中排除、删除或注释掉禁用的网络。不再需要
compat_name选项。 这用于更改 heat 资源内部的名称。 由于 heat 资源将随着网络数据 v2 一去不复返,因此我们不再需要它。以下键在网络级别不再有效:
ip_subnet、gateway_ip、allocation_pools、routes、ipv6_subnet、gateway_ipv6、ipv6_allocation_pools和routes_ipv6。新的键
physical_network,我们当前的基线和非基线段的物理网络名称并不完全兼容。 在代码中添加逻辑进行补偿很复杂。(此字段在 metalsmith 中创建 ironic 端口时也可能有用。)新的键
network_type和segmentation_id,因为我们可能有用户使用{{network.name}}NetValueSpecs来设置 network_type vlan。
注意
新的工具应验证网络数据 v1 中先前有效的任何键是否在网络数据 v2 中使用。
IPv4 的示例网络数据 v2 文件¶
- name: Storage
name_lower: storage (optional, default: name.lower())
admin_state_up: false (optional, default: false)
dns_domain: storage.localdomain. (optional, default: undef)
mtu: 1442 (optional, default: 1500)
shared: false (optional, default: false)
service_net_map_replace: storage (optional, default: undef)
ipv6: true (optional, default: false)
vip: true (optional, default: false)
subnets:
subnet01:
ip_subnet: 172.18.1.0/24
gateway_ip: 172.18.1.254 (optional, default: undef)
allocation_pools: (optional, default: [])
- start: 172.18.1.10
end: 172.18.1.250
enable_dhcp: false (optional, default: false)
routes: (optional, default: [])
- destination: 172.18.0.0/24
nexthop: 172.18.1.254
vlan: 21 (optional, default: undef)
physical_network: storage_subnet01 (optional, default: {{name.lower}}_{{subnet name}})
network_type: flat (optional, default: flat)
segmentation_id: 21 (optional, default: undef)
subnet02:
ip_subnet: 172.18.0.0/24
gateway_ip: 172.18.0.254 (optional, default: undef)
allocation_pools: (optional, default: [])
- start: 172.18.0.10
end: 172.18.0.250
enable_dhcp: false (optional, default: false)
routes: (optional, default: [])
- destination: 172.18.1.0/24
nexthop: 172.18.0.254
vlan: 20 (optional, default: undef)
physical_network: storage_subnet02 (optional, default: {{name.lower}}_{{subnet name}})
network_type: flat (optional, default: flat)
segmentation_id: 20 (optional, default: undef)
IPv6 的示例网络数据 v2 文件¶
- name: Storage
name_lower: storage
admin_state_up: false
dns_domain: storage.localdomain.
mtu: 1442
shared: false
vip: true
subnets:
subnet01:
ipv6_subnet: 2001:db8:a::/64
gateway_ipv6: 2001:db8:a::1
ipv6_allocation_pools:
- start: 2001:db8:a::0010
end: 2001:db8:a::fff9
enable_dhcp: false
routes_ipv6:
- destination: 2001:db8:b::/64
nexthop: 2001:db8:a::1
ipv6_address_mode: null
ipv6_ra_mode: null
vlan: 21
physical_network: storage_subnet01 (optional, default: {{name.lower}}_{{subnet name}})
network_type: flat (optional, default: flat)
segmentation_id: 21 (optional, default: undef)
subnet02:
ipv6_subnet: 2001:db8:b::/64
gateway_ipv6: 2001:db8:b::1
ipv6_allocation_pools:
- start: 2001:db8:b::0010
end: 2001:db8:b::fff9
enable_dhcp: false
routes_ipv6:
- destination: 2001:db8:a::/64
nexthop: 2001:db8:b::1
ipv6_address_mode: null
ipv6_ra_mode: null
vlan: 20
physical_network: storage_subnet02 (optional, default: {{name.lower}}_{{subnet name}})
network_type: flat (optional, default: flat)
segmentation_id: 20 (optional, default: undef)
双栈的示例网络数据 v2 文件¶
每个段有两个子网的 IPv4/IPv6 双栈,一个用于 IPv4,另一个用于 IPv6。 可以创建一个具有每个子网中 IP 地址的单个 neutron 端口。
在这种情况下,ipv6 键将控制服务配置绑定到 IPv6 或 IPv4。(默认 ipv6:false)
- name: Storage
name_lower: storage
admin_state_up: false
dns_domain: storage.localdomain.
mtu: 1442
shared: false
ipv6: true (default ipv6: false)
vip: true
subnets:
subnet01:
ip_subnet: 172.18.1.0/24
gateway_ip: 172.18.1.254
allocation_pools:
- start: 172.18.1.10
end: 172.18.1.250
routes:
- destination: 172.18.0.0/24
nexthop: 172.18.1.254
ipv6_subnet: 2001:db8:a::/64
gateway_ipv6: 2001:db8:a::1
ipv6_allocation_pools:
- start: 2001:db8:a::0010
end: 2001:db8:a::fff9
routes_ipv6:
- destination: 2001:db8:b::/64
nexthop: 2001:db8:a::1
vlan: 21
subnet02:
ip_subnet: 172.18.0.0/24
gateway_ip: 172.18.0.254
allocation_pools:
- start: 172.18.0.10
end: 172.18.0.250
routes:
- destination: 172.18.1.0/24
nexthop: 172.18.0.254
ipv6_subnet: 2001:db8:b::/64
gateway_ipv6: 2001:db8:b::1
ipv6_allocation_pools:
- start: 2001:db8:b::0010
end: 2001:db8:b::fff9
routes_ipv6:
- destination: 2001:db8:a::/64
nexthop: 2001:db8:b::1
vlan: 20
替代方案¶
不更改网络数据格式
在这种情况下,我们需要一种替代方案来提供当前使用 heat 参数管理的资源属性的值,在将网络资源的管理移出 heat 堆栈时。
仅添加用于属性的新键
保留 level-0 的
base子网的概念,并仅添加用于当前使用 heat 参数管理的属性的键。
安全影响¶
N/A
升级影响¶
当(如果)我们删除在 overcloud heat 堆栈中管理网络资源的能力时,用户必须运行导出命令以生成新的网络数据 v2 文件。 使用此文件作为输入到 openstack overcloud network provision 命令,以生成 heat 堆栈所需的,不含网络资源的环境文件。
性能影响¶
N/A
文档影响¶
必须记录网络数据 v2 格式。 必须提供使用命令从现有部署导出网络信息以及使用非 heat 堆栈工具配置/更新/采用网络资源的程序。
将弃用/删除的 Heat 参数
{{network.name}}NetValueSpecs:已弃用,已删除。 这用于设置provider:physical_network和provider:network_type,或者实际上是任何网络属性。{{network.name}}NetShared:已弃用,由网络级别的shared(bool) 替换{{network.name}}NetAdminStateUp:已弃用,由网络级别的admin_state_up(bool) 替换{{network.name}}NetEnableDHCP:已弃用,由子网级别的enable_dhcp(bool) 替换IPv6AddressMode:已弃用,由子网级别的ipv6_address_mode替换IPv6RAMode:已弃用,由子网级别的ipv6_ra_mode替换
一旦使用 deployed_networks.yaml (https://review.opendev.org/751876),以下参数将被弃用,因为它们将不再使用
{{network.name}}NetCidr
{{network.name}}SubnetName
{{network.name}}Network
{{network.name}}AllocationPools
{{network.name}}Routes
{{network.name}}SubnetCidr_{{subnet}}
{{network.name}}AllocationPools_{{subnet}}
{{network.name}}Routes_{{subnet}}
实现¶
负责人¶
- 主要负责人
Harald Jensås
工作项¶
使用 heat 堆栈添加资源标签 - https://review.opendev.org/750666
从现有部署中提取配置网络的工具 https://review.opendev.org/750671, https://review.opendev.org/750672
新的配置/更新/采用网络的工具 https://review.opendev.org/751739, https://review.opendev.org/751875
THT 中的已部署网络模板 - https://review.opendev.org/751876