Overcloud 的 IPv6 网络
配置 Overcloud 以使用 IPv6 网络
OpenStack Documentation Team
rhos-docs@redhat.com
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
对红帽文档提供反馈
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
使用直接文档反馈(DDF)功能
使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。
- 以 Multi-page HTML 格式查看文档。
- 请确定您看到文档右上角的 反馈 按钮。
- 用鼠标指针高亮显示您想评论的文本部分。
- 点 添加反馈。
- 在添加反馈项中输入您的意见。
- 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
- 点 Submit。
第 1 章 overcloud 的 IPv6 简介
Red Hat OpenStack Platform director 创建一个名为 overcloud 的云环境。默认情况下,overcloud 使用互联网协议版本 4 (IPv4)来配置服务端点。但是,overcloud 还支持互联网协议版本 6 (IPv6)端点,对于支持 IPv6 基础架构的组织非常有用。
本指南充当 Director 安装和使用指南的补充 信息。Director 安装和使用 中指定的相同要求也适用于本指南。根据需要实施这些要求。
1.1. IPv6 网络简介
IPv6 是互联网协议标准的最新版本。互联网工程任务强制(IETF)开发 IPv6 作为从当前通用 IPv4 标准提升 IP 地址耗尽的方法。IPv6 与 IPv4 有不同的区别,包括:
- 大 IP 地址范围
- IPv6 范围大于 IPv4 范围。
- 更好的端到端连接
- 由于对网络地址转换的依赖,较大的 IP 范围提供了更好的端到端连接。
- 没有广播
- IPv6 不支持传统的 IP 广播。相反,IPv6 使用多播以分级方式将数据包发送到适用的主机。
- 无状态地址自动配置(SLAAC)
- IPv6 提供自动配置 IP 地址并检测网络上的重复地址的功能。这可减少依赖 DHCP 服务器来分配地址。
IPv6 使用 128 位(以 4 位表示的使用 16 位组)来定义地址,而 IPv4 则只使用 32 位(使用十进制数字来代表使用 8 位组)。例如,IPv4 地址(192.168.0.1)表示如下所示:
位 | 表示 |
---|---|
11000000 | 192 |
10101000 | 168 |
00000000 | 0 |
00000001 | 1 |
对于 IPv6 地址(2001:db8:88ec:9fb3::1),表示类似如下:
位 | 表示 |
---|---|
0010 0000 0000 0001 | 2001 |
0000 1101 1011 1000 | 0db8 |
1000 1000 1110 1100 | 88ec |
1001 1111 1011 0011 | 9fb3 |
0000 0000 0000 0000 | 0000 |
0000 0000 0000 0000 | 0000 |
0000 0000 0000 0000 | 0000 |
0000 0000 0000 0001 | 0001 |
在代表 IPv6 地址时,每个位组中可以没有前面的零,并为每个 IP 地址省略一组零位组。在本例中,您可以使用 db8
来表示 0db8
位分组,省略三组的 0000
位组,这可以将 2001:0db8:88ec:9fb3:0000:0000:0000:0001
缩短为 2001:db8:88ec:9fb3::1
。如需更多信息,请参阅 "RFC 5952: IPv6 Address Text Representation for a Recommendation for IPv6 Address Text Representation"
IPv6 中的子网
与 IPv4 类似,IPv6 地址使用位掩码来定义地址前缀作为其网络。例如,如果您将 IP 地址 2001:db8:88ec:9fb3::1/64
的 /64
位掩码作为前缀,则位掩码充当定义前 64 位(2001:db8:88ec:9fb
3)的前缀。剩余位 (0000:0000:0000:0001
) 用于定义主机。
IPv6 也使用一些特殊地址类型:
- loopback
-
回环设备使用 IPv6 进行主机内部通信。此设备始终为
::1/128
。 - 链接本地
-
链接本地地址是在特定网络段中有效的 IP 地址。IPv6 要求每个网络设备具有链接本地地址,并使用前缀
fe80::/10
。但是,大多数时候,这些地址的前缀为fe80::/64
。 - 唯一的本地
-
唯一的本地地址用于本地通信。这些地址使用
fc00::/7
前缀。 - 多播
-
主机使用多播地址来加入多播组。这些地址使用
ff00::/8
前缀。例如,FF02::1
是网络中所有节点的多播组,FF02::2
则是所有路由的多播组。 - 全局多播
-
这些地址通常为公共 IP 地址保留。这些地址使用
2000::/3
前缀。
1.2. 在 Red Hat OpenStack Platform 中使用 IPv6
Red Hat OpenStack Platform (RHOSP) director 将 OpenStack 服务映射到隔离的网络。这些网络包括:
- 内部 API
- 存储
- 存储管理
- Project (tenant)网络(Neutron VLAN 模式)
- 外部
有关这些网络流量类型的更多信息,请参阅 Director 安装和使用指南。
director 还提供了将这些网络使用 IPv6 通信的方法。这意味着所需的 OpenStack 服务、数据库和其他相关服务使用 IPv6 地址进行通信。这也适用于使用涉及多个 Controller 节点的高可用性解决方案的环境。这有助于组织将 RHOSP 与 IPv6 基础架构集成。
使用下表作为 RHOSP 网络支持 IPv6 的指南:
网络类型 | 支持的互联网协议(IP) | 备注 |
---|---|---|
内部 API |
| |
存储 |
| |
存储管理 |
| |
项目网络 |
| |
项目网络端点 |
| 这指的是托管项目网络隧道的网络 IP 地址,而不是项目网络本身。 用于网络端点的 IPv6 仅支持 VXLAN 和 Geneve。通用路由封装(GRE)尚不受支持。 |
外部 - 公共 API (和 Horizon) |
| |
外部 - 浮动 IP |
| IPv6 使用全局多播地址(GUAs),而不是 NAT 和浮动 IP 地址。网络(neutron)服务需要项目网络之间的 IPv6 寻址使用 GUAs,在项目网络的 GUAs 中不会重叠,因此可以在没有 NAT 的情况下路由。 使用双堆栈(IPv4/v6),您可以使用浮动 IP 地址仅访问 IPv4 子网的 IP 地址。 |
提供商网络 |
| IPv6 支持取决于项目操作系统。 |
置备(PXE/DHCP) |
| |
IPMI 或其他 BMC |
| RHOSP 通过 Provisioning 网络与基板管理控制器(BMC)接口通信。 如果 BMC 接口支持双堆栈 IPv4 或 IPv6,则不属于 RHOSP 的工具可以使用 IPv6 与 BMC 通信。 |
Overcloud 置备网络 | IPv6 | 用于 overcloud 中裸机置备服务的 Provisioning 网络。 |
Overcloud 清理网络 | 无 | 在准备好重复使用之前,用于清理机器的隔离网络。 |
定义场景
本指南的场景是创建带有使用 IPv6 的隔离网络的 overcloud。使用 heat 模板和环境文件来配置网络隔离。此场景还为这些 heat 模板和环境文件提供某些变体,以演示配置中的特定区别。
在这种情况下,undercloud 仍然使用 IPv4 连接进行 PXE 引导、内省、部署和其他服务。
本指南使用与高级 overcloud 类似的情况。主要区别是 Ceph Storage 节点的省略。
有关此场景的更多信息,请参阅 Director 安装和使用指南。
本指南将 2001:DB8::/32 IPv6 前缀用于 RFC 3849 中定义的文档目的。确保您从您自己的网络中替换这些示例地址。
第 2 章 为 IPv6 配置 overcloud
以下章节提供了运行 openstack overcloud deploy
命令前所需的配置。这包括准备节点以进行置备,在 undercloud 上配置 IPv6 地址,以及创建网络环境文件来为 overcloud 定义 IPv6 参数。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
2.1. 在 undercloud 上配置 IPv6 地址
undercloud 需要访问位于外部网络上的 overcloud 公共 API。为达到此目的,undercloud 主机需要在连接到外部网络的接口上有一个 IPv6 地址。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
- undercloud 可用的 IPv6 地址。
原生 VLAN 或专用接口
如果 undercloud 使用原生 VLAN 或附加到外部网络的专用接口,请使用 ip
命令将 IPv6 地址添加到接口。在本例中,专用接口是 eth0
:
$ sudo ip link set dev eth0 up; sudo ip addr add 2001:db8::1/64 dev eth0
中继的 VLAN 接口
如果 undercloud 使用与 control plane 网桥(br-ctlplane
)相同的接口上使用中继的 VLAN 来访问外部网络,请创建一个新的 VLAN 接口,将其附加到 control plane,并在 VLAN 中添加 IPv6 地址。在本例中,外部网络 VLAN ID 为 100
:
$ sudo ovs-vsctl add-port br-ctlplane vlan100 tag=100 -- set interface vlan100 type=internal $ sudo ip l set dev vlan100 up; sudo ip addr add 2001:db8::1/64 dev vlan100
确认 IPv6 地址
使用 ip
命令确认添加了 IPv6 地址:
$ ip addr
IPv6 地址会出现在所选接口上。
设置持久的 IPv6 地址
要使 IPv6 地址永久生效,请在 /etc/sysconfig/network-scripts/
中修改或创建适当的接口文件。在本例中,在 ifcfg-eth0
或 ifcfg-vlan100
中包含以下行:
IPV6INIT=yes IPV6ADDR=2001:db8::1/64
如需更多信息,请参阅红帽客户门户网站中的 如何为 IPv6 配置网络接口?
2.2. 为 IPv6 部署注册和检查节点
节点定义模板(instackenv.json
)是一个 JSON 格式文件,其中包含注册节点的硬件和电源管理详情。例如:
{ "nodes":[ { "mac":[ "bb:bb:bb:bb:bb:bb" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.205" }, { "mac":[ "cc:cc:cc:cc:cc:cc" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.206" }, { "mac":[ "dd:dd:dd:dd:dd:dd" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.207" }, { "mac":[ "ee:ee:ee:ee:ee:ee" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.208" } { "mac":[ "ff:ff:ff:ff:ff:ff" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.209" } { "mac":[ "gg:gg:gg:gg:gg:gg" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"ipmi", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.210" } ] }
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 可用于 overcloud 部署的节点。
流程
创建节点定义模板后,将文件保存到 stack 用户的主目录(
/home/stack/instackenv.json
),然后将其导入到 director:$ openstack overcloud node import ~/instackenv.json
此命令导入模板,并将每个节点从模板注册到 director。
将内核和 ramdisk 镜像分配给所有节点:
$ openstack overcloud node configure
节点现在在 director 中注册和配置。
验证步骤
注册节点后,检查每个节点的 hardware 属性:
$ openstack overcloud node introspect --all-manageable
重要节点必须处于
manageable
状态。确保此进程完成运行。它可能需要 15 分钟来检查这些裸机节点。
2.3. 为 IPv6 部署标记节点
注册并检查节点硬件后,将每个节点标记到特定的配置集中。这些配置集标签将节点映射到类型,并将类别分配到部署角色。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
检索节点列表来识别它们的 UUID:
$ ironic node-list
在每个节点的
properties/capabilities
参数中添加 profile 选项。例如,要标记三个节点以使用 controller 配置集和三个节点以使用 compute 配置集,请使用以下命令:$ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/capabilities='profile:control,boot_option:local' $ ironic node-update 6faba1a9-e2d8-4b7c-95a2-c7fbdc12129a add properties/capabilities='profile:control,boot_option:local' $ ironic node-update 5e3b2f50-fcd9-4404-b0a2-59d79924b38e add properties/capabilities='profile:control,boot_option:local' $ ironic node-update 484587b2-b3b3-40d5-925b-a26a2fa3036f add properties/capabilities='profile:compute,boot_option:local' $ ironic node-update d010460b-38f2-4800-9cc4-d69f0d067efe add properties/capabilities='profile:compute,boot_option:local' $ ironic node-update d930e613-3e14-44b9-8240-4f3559801ea6 add properties/capabilities='profile:compute,boot_option:local'
添加
profile:control
和profile:compute
选项会将节点标记为相关的配置集。注意作为手动标记的替代选择,请使用自动配置集标记来根据基准测试数据标记大量节点。
2.4. 配置 IPv6 网络
本节检查 overcloud 的网络配置。这包括隔离 OpenStack 服务以使用特定网络流量并使用 IPv6 选项配置 overcloud。
2.4.1. 配置可组合 IPv6 网络
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
流程
复制默认的
network_data
文件:$ cp /usr/share/openstack-tripleo-heat-templates/network_data.yaml /home/stack/.
编辑
network_data.yaml
文件的本地副本,并修改参数以满足您的 IPv6 网络要求。例如,外部网络包含以下默认网络详情:- name: External vip: true name_lower: external vlan: 10 ipv6: true ipv6_subnet: '2001:db8:fd00:1000::/64' ipv6_allocation_pools: [{'start': '2001:db8:fd00:1000::10', 'end': '2001:db8:fd00:1000:ffff:ffff:ffff:fffe'}] gateway_ipv6: '2001:db8:fd00:1000::1'
-
name
是唯一强制值,但您也可以使用name_lower
规范化名称以实现可读性。例如,将InternalApi
更改为internal_api
。 -
vip: true
在新网络中创建一个虚拟 IP 地址(VIP),并将其余参数设置新网络的默认值。 -
ipv6
定义是否启用 IPv6。 -
ipv6_subnet
和ipv6_allocation_pools
,gateway_ip6
为网络设置默认 IPv6 子网和 IP 范围。
-
-
使用
-n
选项,将自定义network_data
文件包含在部署中。如果没有-n
选项,部署命令使用默认的网络详情。
2.4.2. overcloud 中的 IPv6 网络隔离
overcloud 默认为 provisioning 网络分配服务。但是,director 可以将 overcloud 网络流量划分为隔离的网络。这些网络在您部署命令行中包含的文件中定义,默认为 network_data.yaml
。
当服务使用 IPv6 地址侦听网络时,您必须提供参数 default 来表示该服务在 IPv6 网络上运行。各个服务运行的网络都由文件 network/service_net_map.yaml
定义,可通过声明单个 ServiceNetMap
条目的参数默认值来覆盖。这些服务要求在环境文件中设置参数:
parameter_defaults: # Enable IPv6 for Ceph. CephIPv6: True # Enable IPv6 for Corosync. This is required when Corosync is using an IPv6 IP in the cluster. CorosyncIPv6: True # Enable IPv6 for MongoDB. This is required when MongoDB is using an IPv6 IP. MongoDbIPv6: True # Enable various IPv6 features in Nova. NovaIPv6: True # Enable IPv6 environment for RabbitMQ. RabbitIPv6: True # Enable IPv6 environment for Memcached. MemcachedIPv6: True # Enable IPv6 environment for MySQL. MysqlIPv6: True # Enable IPv6 environment for Manila ManilaIPv6: True # Enable IPv6 environment for Redis. RedisIPv6: True
核心 heat 模板中的 environments/network-isolation.j2.yaml
文件是一个 Jinja2 文件,该文件在可组合的网络文件中定义每个 IPv6 网络的所有端口和 VIP。呈现后,它会使用完整资源 registry 在相同位置生成 network-isolation.yaml
文件。
2.4.3. 配置 IPv6 隔离网络
默认 heat 模板集合包含用于默认网络配置的基于 Jinja2 的环境文件。此文件是 environment /network-environment.j2.yaml
。使用 network_data
文件呈现时,它会生成名为 network-environment.yaml
的标准 YAML 文件。此文件的某些部分可能需要覆盖。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
流程
使用以下详情创建一个自定义环境文件(
/home/stack/network-environment.yaml
):parameter_defaults: DnsServers: ["8.8.8.8","8.8.4.4"] ControlPlaneDefaultRoute: 192.0.2.1 ControlPlaneSubnetCidr: "24"
parameter_defaults
部分包含 IPv4 上保留的某些服务的自定义。
2.4.4. IPv6 网络接口模板
overcloud 需要一组网络接口模板。director 包含一组基于 Jinja2 的 Heat 模板,它根据您的 network_data
文件呈现:
NIC 目录 | 描述 | 环境文件 |
---|---|---|
|
单个 NIC ( |
|
|
单个 NIC ( |
|
|
附加到 |
|
|
附加到 |
|
2.5. 部署 IPv6 overcloud
若要部署使用 IPv6 网络的 overcloud,必须在部署命令中包括额外的参数。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
流程
$ openstack overcloud deploy --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml \ -e /home/stack/templates/network-environment.yaml \ --ntp-server pool.ntp.org \ [ADDITIONAL OPTIONS]
以上命令使用以下选项:
-
--templates
- 从默认的 heat 模板集合创建 overcloud。 -
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml
- 向 overcloud 部署添加额外的环境文件。在这种情况下,它是一个为 IPv6 初始化网络隔离配置的环境文件。 -
-e /usr/share/openstack-tripleo-heat-templates/environments/net-single-nic-with-vlans.yaml
- 向 overcloud 部署添加额外的环境文件。在这种情况下,它是一个为 IPv6 初始化网络隔离配置的环境文件。 -e /home/stack/network-environment.yaml
- 向 overcloud 部署添加额外的环境文件。在本例中,它包含与 IPv6 相关的覆盖。确保
network_data.yaml
文件包含设置ipv6: true
。以前的 Red Hat OpenStack director 版本包含两个路由:一个用于外部网络上的 IPv6 (默认),另一个用于 Control Plane 上的 IPv4。要使用这两个默认路由,请确保roles_data.yaml
文件中的 Controller 定义在default_route_networks
参数中包含两个网络。例如,default_route_networks: ['External', 'ControlPlane']
。-
--ntp-server pool.ntp.org
- 设置 NTP 服务器。
overcloud 创建过程开始,并且 director 置备 overcloud 节点。完成此过程需要一些时间。要查看 overcloud 创建的状态,请以 stack
用户身份打开一个单独的终端并运行:
$ source ~/stackrc $ heat stack-list --show-nested
访问 overcloud
director 会生成脚本来配置并帮助认证 director 主机与 overcloud 的交互。director 将此文件(overcloudrc
)保存在 stack
用户的主目录中。运行以下命令来使用此文件:
$ source ~/overcloudrc
这会加载必要的环境变量,以便从 director 主机 CLI 与 overcloud 交互。要返回与 director 主机交互,请运行以下命令:
$ source ~/stackrc
第 3 章 部署后 IPv6 操作
使用 IPv6 网络部署 overcloud 后,您必须执行一些额外的配置。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
3.1. 在 overcloud 上创建 IPv6 项目网络
overcloud 需要基于 IPv6 的项目网络用于实例。提供 overcloudrc
文件,并在 neutron
中创建初始项目网络。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
流程
查找 overcloud 凭证文件:
$ source ~/overcloudrc
创建网络和子网:
$ openstack network create default --external --provider-physical-network datacentre --provider-network-type vlan --provider-segment 101 $ openstack subnet create default --subnet-range 2001:db8:fd00:6000::/64 --ipv6-address-mode slaac --ipv6-ra-mode slaac --ip-version 6 --network default
这会创建一个名为
default
的基本neutron
网络。
验证步骤
验证网络是否已成功创建:
$ openstack network list $ openstack subnet list
3.2. 在 overcloud 上创建 IPv6 公共网络
将节点接口配置为使用外部网络后,您必须在 overcloud 上创建此网络以启用网络访问。
先决条件
- 成功安装 undercloud。有关更多信息,请参阅在 undercloud 上安装 director。
- 成功部署 overcloud。如需更多信息,请参阅使用 CLI 工具创建基本 overcloud。
- 您的网络支持 IPv6 原生 VLAN 以及 IPv4 原生 VLAN。
流程
创建外部网络和子网:
$ openstack network create public --external --provider-physical-network datacentre --provider-network-type vlan --provider-segment 100 $ openstack subnet create public --network public --subnet-range 2001:db8:0:2::/64 --ip-version 6 --gateway 2001:db8::1 --allocation-pool start=2001:db8:0:2::2,end=2001:db8:0:2::ffff --ipv6-address-mode slaac --ipv6-ra-mode slaac
此命令创建一个名为
public
的网络,为我们的实例提供超过 65000 IPv6 地址的分配池。创建一个路由器,将实例流量路由到外部网络。
$ openstack router create public-router $ openstack router set public-router --external-gateway public