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 目录中找到一个示例文件。

流程

  1. 列出可用的示例配置文件:

    $ 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
  2. 复制最适合您的需要的网络配置文件示例:

    $ cp /usr/share/openstack-tripleo-heat-templates/network-data-samples/default-network-isolation.yaml /home/stack/templates/network_data.yaml
  3. 编辑 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 网络的路由。
  4. 将所需的网络 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
  5. 编辑 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 名称。
  6. 复制示例网络配置模板。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/
  7. 编辑 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 %}
  8. 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
  9. 置备 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
  10. 置备网络 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 网络。

流程

  1. 如果您还没有自定义 roles_data.yaml 文件,请将默认值复制到您的主目录中:

    $ cp /usr/share/openstack-tripleo-heat-templates/roles_data.yaml /home/stack/templates/roles_data.yaml
  2. 编辑自定义 roles_data.yaml 文件。
  3. 将网络名称包含在您要添加 网络 的角色的网络列表中。例如,要将 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
  4. 将自定义网络添加到其各自角色后,保存文件。

运行 openstack overcloud deploy 命令时,请使用 -r 选项包含自定义 roles_data.yaml 文件。如果没有 -r 选项,部署命令使用默认角色集及其相应分配的网络。

10.3.3. 将 OpenStack 服务分配给可组合网络

每个 OpenStack 服务都分配给资源 registry 中的默认网络类型。这些服务绑定到网络类型分配的网络中的 IP 地址。虽然 OpenStack 服务被分为这些网络,但实际物理网络的数量可能与网络环境文件中定义的不同。您可以通过在环境文件中定义新网络映射来将 OpenStack 服务重新分配给不同的网络类型,例如 /home/stack/templates/service-reassignments.yamlServiceNetMap 参数决定您要用于各个服务的网络类型。

例如,您可以通过修改高亮的部分将 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)一起使用。

流程

  1. 查找 stackrc undercloud 凭证文件:

    $ source ~/stackrc
  2. 置备 overcloud 网络:

    $ openstack overcloud network provision \
      --output overcloud-networks-deployed.yaml \
      custom_network_data.yaml
  3. 置备网络 VIP:

    $ openstack overcloud network vip provision \
        --stack overcloud \
        --output overcloud-networks-vips-deployed.yaml \
         custom_vip_data.yaml
  4. 置备 overcloud 节点:

    $ openstack overcloud node provision \
        --stack overcloud \
        --output overcloud-baremetal-deployed.yaml \
        overcloud-baremetal-deploy.yaml
  5. 构建 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。

流程

  1. network_data.yaml 文件中,为您要重命名的每个网络的 name_lower 参数输入新名称:

    - name: InternalApi
      name_lower: MyCustomInternalApi
  2. service_net_map_replace 参数中包含 name_lower 参数的默认值:

    - name: InternalApi
      name_lower: MyCustomInternalApi
      service_net_map_replace: internal_api
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.