第 7 章 隔离网络


director 提供了配置隔离 Overcloud 网络的方法。这意味着 Overcloud 环境将网络流量类型划分为不同的网络,后者将网络流量分配到特定的网络接口或绑定。配置隔离的网络后,director 将 OpenStack 服务配置为使用隔离的网络。如果没有配置隔离网络,则所有服务都在 Provisioning 网络上运行。

这个示例为所有服务使用单独的网络:

  • 网络 1 - 置备
  • 网络 2 - 内部 API
  • 网络 3 - 租户网络
  • 网络 4 - 存储
  • 网络 5 - 存储管理
  • 网络 6 - 管理
  • 网络 7 - 外部浮动 IP ( Overcloud 创建后映射)

在本例中,每个 Overcloud 节点使用绑定中的两个网络接口来提供 tagged VLAN 中的网络。以下网络分配适用于此绑定:

表 7.1. 网络子网和 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_bondvlan 对象连接在一起。

          - 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_bondvlan 对象连接在一起。

            - 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 的绑定接口: nic2nic3。该网桥还包含一些标记的 VLAN 设备,其使用 bond1 作为父设备。该模板还包括连接到 director 的接口(nic1)。

有关网络接口模板的更多示例,请参阅 附录 B, 网络接口模板示例

请注意,其中很多参数使用 get_param 函数。您可以在您为网络创建的环境文件中定义。

重要

未使用的接口可能会导致不必要的默认路由和网络循环。例如,模板可能包含一个网络接口(nic4),它不使用 OpenStack 服务的任何 IP 分配,但仍使用 DHCP 和/或默认路由。为了避免网络冲突,请从 ovs_bridge 设备中删除所有未使用的接口,并禁用 DHCP 和默认路由设置:

- type: interface
  name: nic4
  use_dhcp: false
  defroute: false
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.