您可以为环境中的提供商网络和租户网络配置 BGP 动态路由。

启用 BGP 后,您的租户创建的逻辑子网无需源 NAT 或浮动 IP 地址,即可通告到您的环境之外。必须先创建一个 VXLAN 外部网络,稍后使用该外部网络作为网关 Edge 的内部接口。

过程

  1. viouser 用户身份登录到 OpenStack 管理服务器
  2. viouser 用户身份登录到控制器节点。
  3. 切换到 root 用户并加载云管理员凭据文件。
    sudo su -
    source ~/cloudadmin.rc
  4. 为未来租户子网以及外部 VXLAN 网络的子网创建 IPv4 地址范围。
    neutron address-scope-create name 4
  5. 为外部网络创建子网池。
    neutron subnetpool-create external-pool --pool-prefix network-address --default-prefixlen prefix-bits --address-scope scope-name --shared

    选项

    说明

    external-pool

    输入子网池的名称。

    --pool-prefix

    以 CIDR 格式输入子网池的网络地址(例如,192.0.2.0/24))。将从该网络分配子网。

    --default-prefixlen

    输入网络前缀长度(以位为单位),用于在未指定前缀长度的情况下创建的新子网。

    --address-scope

    输入您在步骤 4 中创建的 IPv4 地址范围的名称。

  6. 为租户网络创建子网池。
    neutron subnetpool-create tenant-pool --pool-prefix network-address --default-prefixlen prefix-bits --address-scope scope-name --shared
    注:

    OpenStack 会将此子网池通告到物理架构。指定当前未使用的前缀。

    选项

    说明

    tenant-pool

    输入子网池的名称。

    --pool-prefix

    以 CIDR 格式输入子网池的网络地址(例如,192.51.100.0/24))。将从该网络分配子网。

    --default-prefixlen

    输入网络前缀长度(以位为单位),用于在未指定前缀长度的情况下创建的新子网。

    --address-scope

    输入您在步骤 4 中创建的 IPv4 地址范围的名称。

  7. 创建基于 VXLAN 的外部网络。
    neutron net-create network-name --provider:network_type vxlan --router:external

    此命令将在 NSX Data Center for vSphere 中创建新的逻辑交换机。

  8. 在外部网络上创建子网。

    该子网必须禁用 DHCP 且不具备网关。

    neutron subnet-create external-network external-subnet-address --name external-subnet --allocation-pool start=subnet-ip1,end=subnet-ip2 --subnetpool provider-subnet-pool --no-gateway --disable-dhcp

    选项

    说明

    external-network

    输入您在步骤 7 中创建的基于 VXLAN 的外部网络的名称。

    external-subnet-address

    以 CIDR 格式输入子网的网络地址(例如,192.51.100.0/28))。

    --name

    输入子网的名称。

    --allocation-pool

    输入要从该子网分配的范围的第一个和最后一个 IP 地址。

    --subnetpool

    输入您在步骤 5 中为外部网络创建的子网池。

  9. 创建 BGP Edge 节点。
    sudo -u neutron nsxadmin -r bgp-gw-edge -o create --property name=edge-name --property local-as=local-as-number --property external-iface=portgroup-moid:mgmt-network-ip --property internal-iface=physical-net-id:external-network-ip

    选项

    说明

    name

    输入 BGP Edge 节点的名称。

    local-as

    输入 Edge 节点的本地 AS 编号。Edge 和物理路由器不能在同一个 AS 中。

    external-iface

    输入将 Edge 节点连接到物理路由器的 VLAN 所关联的端口组的受管对象标识符 (MOID)。在冒号的后面,输入 Edge 节点在管理网络上的 IP 地址。

    internal-iface

    输入基于 VXLAN 的外部网络的虚拟线路标识符。在冒号的后面,输入 Edge 节点在物理网络上的 IP 地址。

    要查找虚拟线路标识符,请运行 openstack network show external-network-name 命令,并找到 provider:physical_network 参数的值。

  10. 在 Edge 节点上启用 BGP 通告。
    sudo -u neutron nsxadmin -r routing-redistribution-rule -o create --property gw-edge-ids=edge1-id,edge2-id --property learner-protocol=bgp --property learn-from=connected,bgp --property action=permit

    对于 gw-edge-ids 参数,使用 Edge 标识符(例如,edge-4)而不是名称。您可以运行 sudo -u neutron nsxadmin -r bgp-gw-edge -o view 命令显示每个 BGP Edge 节点的标识符。

  11. 在 Edge 节点之间建立 BGP 邻居关系。
    sudo -u neutron nsxadmin -r bgp-neighbour -o create --property gw-edge-ids=edge1-id,edge2-id --property ip-address=physical-router1-ip --property remote-as=remote-as-number --property password=bgp-password

    选项

    说明

    gw-edge-ids

    输入每个节点的 Edge 标识符,以逗号分隔。

    ip-address

    在物理路由器上输入 IP 地址。

    remote-as

    输入连接到 Edge 节点的物理路由器的 AS 编号。

    密码

    输入 BGP 密码。

  12. 配置您的物理路由器。
    1. 确保物理路由器的 AS 是 Edge 节点的远程 AS。
    2. 将 Edge 节点配置为 BGP 邻居。
    3. 将每个路由器设置为将其自身通告到动态网关。
  13. 创建并配置 BGP 发言方。
    1. 创建 BGP 发言方。
      neutron bgp-speaker-create --local-as local_as_value name_bgp_speaker
      
    2. 创建 BGP 对等方。
      neutron bgp-peer-create --peer-ip internal_interface_network_GW-EDGE1 --remote-as 65001 --password BGP_password --auth-type md5 name_GW-EDGE1 --esg-id edge-ID_GW-EDGE1
      
      neutron bgp-peer-create --peer-ip internal_interface_network_GW-EDGE2 --remote-as 65001 --password BGP_password --auth-type md5 name_GW-EDGE2 --esg-id edge-ID_GW-EDGE2
    3. 将 BGP 对等方添加到 BGP 发言方。
      neutron bgp-speaker-peer-add name_bgp_speaker name_GW-EDGE1 
      
      neutron bgp-speaker-peer-add name_bgp_speaker name_GW-EDGE2
      
    4. 将发言方与 VXLAN 网络相关联。
      neutron bgp-speaker-network-add name_bgp_speaker external_VXLAN_network_name
  14. (可选) 为租户创建 BGP 路由器。

    租户用户可以创建自己的 BGP 路由器。租户用户必须是 admin,才能配置不带 SNAT 的路由器。

    1. 为每个租户创建两个逻辑交换机并为所有租户创建子网池。
      neutron net-create name_Tenant1_LS1
      
      neutron subnet-create --name name_network_Tenant1-LS1 name_Tenant1_LS1 --subnetpool selfservice
      
      neutron net-create name_Tenant1_LS2
      
      neutron subnet-create --name name_network_Tenant1-LS2 name_Tenant1_LS2 --subnetpool selfservice
      
    2. 使用 BGP 配置创建一个路由器。

      BGP 适用于所有外形规格的 OpenStack 逻辑路由器:shareddistributedexclusive

      neutron router-create name_Tenant1-LR --router_type=exclusive
      
      neutron router-interface-add name_Tenant1-LR name_network_Tenant1-LS1
      
      neutron router-interface-add name_Tenant1-LR name_network_Tenant1-LS2
      
      neutron router-gateway-set name_Tenant1-LR --disable-snat external_VXLAN_network_name
      

结果

现已在提供商端配置了 BGP 动态路由,租户也可以使用该路由。