환경에서 제공자 및 테넌트 네트워크에 대한 BGP 동적 라우팅을 구성할 수 있습니다.

BGP를 사용하도록 설정하면 테넌트가 생성한 논리적 서브넷이 소스 NAT 또는 부동 IP 주소 요청 없이 환경 외부로 알려집니다. 먼저 나중에 게이트웨이 Edge를 위한 내부 인터페이스로 사용할 VXLAN 외부 네트워크를 생성해야 합니다.

프로시저

  1. OpenStack 관리 서버viouser로 로그인합니다.
  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(관리 개체 ID)를 입력합니다. 콜론 뒤에 관리 네트워크의 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 라우터를 생성할 수 있습니다. SNAT 없이 라우터를 구성하려면 테넌트 사용자가 admin이어야 합니다.

    1. 테넌트에 대한 논리적 스위치 2개와 논리적 스위치에 대한 서브넷 풀을 생성합니다.
      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 논리적 라우터 폼팩터 shared, distributedexclusive와 작동합니다.

      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 동적 라우팅이 제공자 측에서 구성되었으며 테넌트가 이를 사용할 수도 있습니다.