您可以為環境中的提供者網路和承租人網路設定 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 動態路由現已在提供者端設定,承租人亦可加以使用。