10.2. 网络隔离
Red Hat OpenStack Platform (RHOSP)提供隔离的 overcloud 网络,以便可以隔离托管特定类型的网络流量。流量分配给特定的网络接口或绑定。使用绑定提供容错功能,如果使用正确的绑定协议,也可以提供负载共享。如果没有配置隔离的网络,RHOSP 会将 provisioning 网络用于所有服务。
网络配置由两个部分组成:应用于整个网络的参数,以及在部署的节点上配置网络接口的模板。
您可以为 RHOSP 部署创建以下隔离网络:
- IPMI
- 用于节点电源管理的网络。此网络在安装 undercloud 前预定义。
- 置备
- director 使用此网络进行部署和管理。provisioning 网络通常在专用接口上配置。初始部署使用带有 PXE 的 DHCP,然后网络将转换为静态 IP。默认情况下,必须在原生 VLAN 上进行 PXE 引导,但有些系统控制器允许从 VLAN 引导。默认情况下,计算和存储节点使用调配接口作为其 DNS、NTP 和系统维护的默认网关。
- 内部 API
- 内部 API 网络用于使用 API 通信、RPC 消息和数据库通信在 RHOSP 服务之间的通信。
- tenant
Networking 服务(neutron)使用以下方法之一为每个租户(project)提供自己的网络:
- VLAN 隔离,其中每个租户网络都是网络 VLAN。
- 隧道(通过 VXLAN 或 GRE)。
网络流量在每个租户网络中隔离。每个租户网络都有一个与其关联的 IP 子网,网络命名空间意味着多个租户网络可以使用相同的地址范围,而不会导致冲突。
- 存储
- 用于块存储、NFS、iSCSI 等的网络。理想情况下,出于性能原因,这将隔离到完全独立的交换机光纤中。
- 存储管理
- OpenStack Object Storage (swift)使用此网络在参与副本节点间同步数据对象。代理服务充当用户请求和底层存储层之间的中间接口。代理接收传入的请求,并找到所需的副本来检索请求的数据。使用 Ceph 后端的服务通过存储管理网络连接,因为它们不直接与 Ceph 交互,而是使用前端服务。请注意,RBD 驱动程序是一个例外,因为此流量直接连接到 Ceph。
- 外部
- 托管用于图形化系统管理的 OpenStack Dashboard (horizon)、OpenStack 服务的公共 API,并为目标用于实例的传入流量执行 SNAT。
- 浮动 IP
- 允许传入流量使用 1 到 1 个 IP 地址映射访问实例,以及实际分配给租户网络中实例的 IP 地址。如果在独立于外部的 VLAN 上托管浮动 IP,您可以将浮动 IP VLAN 中继到 Controller 节点,并在 overcloud 创建后通过网络服务(neutron)添加 VLAN。这提供了创建附加到多个网桥的多个浮动 IP 网络的方法。VLAN 被中继,但不会配置为接口。相反,网络服务(neutron)为每个浮动 IP 网络在所选网桥上创建一个具有 VLAN 分段 ID 的 OVS 端口。
置备网络必须是原生 VLAN,其他网络可以被中继。
undercloud 可用作默认网关。但是,所有流量都位于 IP 伪装 NAT (网络地址转换)后面,无法从其余 RHOSP 网络访问。undercloud 也是 overcloud 默认路由的单一故障点。如果在 provisioning 网络上的路由器设备上配置了外部网关,undercloud neutron DHCP 服务器可以提供该服务。
10.2.1. 每个角色所需的网络
您可以使用 VLAN 创建租户网络,但您可以创建 VXLAN 隧道以用于特殊用途,而无需消耗租户 VLAN。VXLAN 功能可以在具有租户 VLAN 的部署中添加 VXLAN 功能,但无法在不严重中断的情况下将租户 VLAN 添加到部署的 overcloud 中。
下表详细介绍了附加到每个角色的隔离网络:
角色 | Network |
---|---|
Controller | provisioning, internal API, storage, storage management, tenant, external |
Compute | provisioning, internal API, storage, tenant |
Ceph Storage | 置备、内部 API、存储、存储管理 |
Cinder 存储 | 置备、内部 API、存储、存储管理 |
Swift Storage | 置备、内部 API、存储、存储管理 |
10.2.2. 网络定义文件配置选项
使用下表了解以 YAML 格式配置网络定义文件 network_data.yaml
的可用选项:
Name | 选项 | 类型 | 默认值 |
---|---|---|---|
| 网络的名称。 | 字符串 | |
| 可选:网络的小写名称。 | 字符串 |
|
| 可选:网络的 DNS 域名。 | 字符串 | |
| 最大传输单元(MTU)。 | number |
|
| 可选:如果使用 IPv6,则设置为 true。 | 布尔值 |
|
| 在网络上创建 VIP。 | 布尔值 |
|
| 包含网络的子网。 | 字典 |
Name | 选项 | 类型 / Element | 示例 |
---|---|---|---|
| IPv4 CIDR 块表示法。 | 字符串 | 192.0.5.0/24 |
| IPv6 CIDR 块表示法。 | 字符串 | 2001:db6:fd00:1000::/64 |
| 可选:网关 IPv4 地址。 | 字符串 | 192.0.5.1 |
| 为子网启动和结束地址。 | 列出/字典 | start: 192.0.5.100 end: 192.0.5.150 |
| 为子网启动和结束地址。 | 列出/字典 | start: 2001:db6:fd00:1000:100::1 end: 2001:db6:fd00:1000:150::1 |
| 需要通过网络网关路由的 IPv4 网络列表。 | 列出/字典 | |
| 需要通过网络网关路由的 IPv6 网络列表。 | 列出/字典 | |
| 可选:网络的 VLAN ID。 | number |
routes
和 routes_ipv6
选项包含路由列表。每个路由都是一个带有 目的地
和 下一步
键的字典条目。这两个选项都是字符串类型。
routes: - destination: 198.51.100.0/24 nexthop: 192.0.5.1 - destination: 203.0.113.0/24 nexthost: 192.0.5.1
routes: - destination: 2001:db6:fd00:2000::/64 nexthop: 2001:db6:fd00:1000:100::1 - destination: 2001:db6:fd00:3000::/64 nexthost: 2001:db6:fd00:1000:100::1
Name | 选项 | 类型 / Element | 默认值 |
---|---|---|---|
| Neutron 网络名称。 | 字符串 | |
| 可选:预定义的固定 IP 地址。 | 字符串 | |
| Neutron 子网名称。指定虚拟 IP neutron 端口的子网。使用路由网络进行部署需要。 | 字符串 | |
| 可选: FQDN (完全限定域名)。 | 列出/字典 |
|
| 可选:虚拟 IP 名称。 | 字符串 |
|
10.2.3. 配置网络隔离
要启用和配置网络隔离,您必须将所需的元素添加到 network_data.yaml
配置文件中。
流程
创建网络 YAML 定义文件:
$ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation-ipv6.yaml /home/stack/templates/network_data.yaml
更新
network_data.yaml
文件中的选项,使其与 overcloud 网络环境的要求匹配:- name: Storage name_lower: storage vip: true ipv6: true mtu: 1500 subnets: storage_subnet: ipv6_subnet: fd00:fd00:fd00:3000::/64 ipv6_allocation_pools: - start: fd00:fd00:fd00:3000::10 end: fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe vlan: 30 - name: StorageMgmt name_lower: storage_mgmt vip: true ipv6: true mtu: 1500 subnets: storage_mgmt_subnet: ipv6_subnet: fd00:fd00:fd00:4000::/64 ipv6_allocation_pools: - start: fd00:fd00:fd00:4000::10 end: fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe vlan: 40 - name: InternalApi name_lower: internal_api vip: true ipv6: true mtu: 1500 subnets: internal_api_subnet: ipv6_subnet: fd00:fd00:fd00:2000::/64 ipv6_allocation_pools: - start: fd00:fd00:fd00:2000::10 end: fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe vlan: 20 - name: Tenant name_lower: tenant vip: false # Tenant networks do not use VIPs ipv6: true mtu: 1500 subnets: tenant_subnet: ipv6_subnet: fd00:fd00:fd00:5000::/64 ipv6_allocation_pools: - start: fd00:fd00:fd00:5000::10 end: fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe vlan: 50 - name: External name_lower: external vip: true ipv6: true mtu: 1500 subnets: external_subnet: 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 vlan: 10