您可以为环境中的提供商网络和租户网络配置 BGP 动态路由。
启用 BGP 后,您的租户创建的逻辑子网无需源 NAT 或浮动 IP 地址,即可通告到您的环境之外。必须先创建一个 VXLAN 外部网络,稍后使用该外部网络作为网关 Edge 的内部接口。
过程
- 以
viouser
用户身份登录到 OpenStack 管理服务器。 - 以
viouser
用户身份登录到控制器节点。 - 切换到
root
用户并加载云管理员凭据文件。sudo su - source ~/cloudadmin.rc
- 为未来租户子网以及外部 VXLAN 网络的子网创建 IPv4 地址范围。
neutron address-scope-create name 4
- 为外部网络创建子网池。
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 地址范围的名称。
- 为租户网络创建子网池。
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 地址范围的名称。
- 创建基于 VXLAN 的外部网络。
neutron net-create network-name --provider:network_type vxlan --router:external
此命令将在 NSX Data Center for vSphere 中创建新的逻辑交换机。
- 在外部网络上创建子网。
该子网必须禁用 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 中为外部网络创建的子网池。
- 创建 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 参数的值。 - 在 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 节点的标识符。 - 在 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 密码。
- 配置您的物理路由器。
- 确保物理路由器的 AS 是 Edge 节点的远程 AS。
- 将 Edge 节点配置为 BGP 邻居。
- 将每个路由器设置为将其自身通告到动态网关。
- 创建并配置 BGP 发言方。
- 创建 BGP 发言方。
neutron bgp-speaker-create --local-as local_as_value name_bgp_speaker
- 创建 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
- 将 BGP 对等方添加到 BGP 发言方。
neutron bgp-speaker-peer-add name_bgp_speaker name_GW-EDGE1 neutron bgp-speaker-peer-add name_bgp_speaker name_GW-EDGE2
- 将发言方与 VXLAN 网络相关联。
neutron bgp-speaker-network-add name_bgp_speaker external_VXLAN_network_name
- 创建 BGP 发言方。
- (可选) 为租户创建 BGP 路由器。
租户用户可以创建自己的 BGP 路由器。租户用户必须是
admin
,才能配置不带 SNAT 的路由器。- 为每个租户创建两个逻辑交换机并为所有租户创建子网池。
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
- 使用 BGP 配置创建一个路由器。
BGP 适用于所有外形规格的 OpenStack 逻辑路由器:
shared
、distributed
和exclusive
。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 动态路由,租户也可以使用该路由。