본문 바로가기

Software Defined Network/Research_SDN

ONOS Controller와 OpenStack 연결

ONOS ml2 mechanism driver 연결


ONOS Controller도 여타 컨트롤러와 같이 OpenStack과 연동하는 메커니즘을 개발하고 있다.


Huawei에서 주도적으로 개발하는 이 서브시스템들은 동시에 netowrking-onos라는 프로젝트로 Neutron에도 개발되고 있다.


아직은 매우 불안정하고 미완성이다.


본 포스팅에서는 ONOS (origin/master, 1.4.0) 버전과 OpenStack Kilo 버전을 그 대상으로 한다.

(물론 ONOSFW에서 권고하는 사항은 OpenStack Liberty 버전이다.)


Reference는 다음과 같다.


http://forum.onosfw.com/t/how-to-integrate-onos-master-1-4-0-with-openstack-kilo/80

https://www.youtube.com/watch?v=qP8nPYhz_Mo



OpenStack과 ONOS 연동



1. networking-onos


1.1 install networking-onos


    • OpenStack Version : Kilo
    • Control Node
      • Python-pip install
$ sudo apt-get install python-pip


      • networking-onos install

$ sudo pip install networking_onos


      • 설치 확인
$ cd /usr/local/lib/python2.7/dist-packages/networking_onos




1.2 edit config neutron


    • Control Node
      • Copy to installed networking-onos directory and paste openstack neutron plugins drivers
      • edit entry_points.txt (neutron-2015.1.1-py2.7.egg-info)
[파일 확인 및 내용 복사]
$ sudo vi /usr/local/lib/python2.7/dist-packages/networking_onos-1.0.0.dist-info/entry_points.txt

[파일 수정]
$ sudo vi /usr/lib/python2.7/dist-packages/neutron-2015.1.1.egg-info/entry_points.txt

[파일 내용 추가]-----------------------------------------
...
[neutron.ml2.mechanism_drivers]
...
onos_ml2 = networking_onos.plugins.ml2.driver:ONOSMechanismDriver
...

[neutron.service_plugins]
...
onos_router = networking_onos.plugins.l3.driver:ONOSL3Plugin
...
      • edit ml2_conf.ini
        • /etc/neutron/plugins/ml2/ml2_conf.ini
          • edit mechanism_drivers
$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini

[파일 내용 변경]--------------------------------------------
...
mechanism_drivers=onos_ml2
...
-----------------------------------------------------------

          • added onos section

[파일 확인 및 내용 복사]

sudo vi /usr/local/etc/neutron/plugins/ml2/conf_onos.ini


[파일 수정]

$ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini


[파일 내용 추가]--------------------------------------------
...
[onos]
url_path = http://<ONOS Controller IP>:8181/onos/vtn
username = karaf
password = karaf
-----------------------------------------------------------




1.3 Restart neutron-server


    • Control Node
neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

$ sudo service neutron-server restart



2. ONOS Feature Install


2.1 start ONOS Controller


    • ONOS Version : origin/master (1.4.0)
    • ONOS Controller
      • ONOS Start
$ . ~/.bash_profile
$ cd onos
$ mvn clean install

$ onos-karaf clean

      • feature Install
onos> feature:install onos-ovsdatabase
onos> feature:install onos-app-vtn-onosfw


3. OpenStack OVS connect ONOS

3.1 OpenStack Network/Compute Nodes

    • Network/Compute Node
      • Check OVS
$ sudo ovs-vsctl show
      • Connection ONOS
$ sudo ovs-vsctl set-manager tcp:<ONOS IP>:6640


3.2 Check Tunnel


    • Network Node
      • Check OVS Tunnel

$ sudo ovs-vsctl show


7bd8744b-3d53-4d8f-ad3e-a51d3c78fe95

Manager "tcp:192.168.56.10:6640"

    is_connected: true

Bridge br-int

    Controller "tcp:192.168.56.10:6653"

        is_connected: true

    fail_mode: secure

    Port "vxlan-192.168.56.40"

        Interface "vxlan-192.168.56.40"

            type: vxlan

            options: {key=flow, local_ip="192.168.56.30", remote_ip="192.168.56.40"}

    Port br-int

        Interface br-int

            type: internal

ovs_version: "2.3.2"

    • Compute Node
      • Check OVS Tunnel
$ sudo ovs-vsctl show

21a339e2-a4cf-4ff0-97ed-7940bf8d07c7
Manager "tcp:192.168.56.10:6640"
    is_connected: true
Bridge br-int
    Controller "tcp:192.168.56.10:6653"
        is_connected: true
    fail_mode: secure
    Port br-int
        Interface br-int
            type: internal
    Port "vxlan-192.168.56.30"
        Interface "vxlan-192.168.56.30"
            type: vxlan
            options: {key=flow, local_ip="192.168.56.40", remote_ip="192.168.56.30"}
ovs_version: "2.3.2"


터널은 정상적으로 연결된 것으로 보인다.


단, openvswitch mechanism driver를 사용하는 경우 br-int/br-tun이 구분되었는데 br-int에 터널 포트를 생성하는 것을 확인하였다.



4. Tunnel Check Flows (OpenFlow)

4.1 Tunnel Flows

OVSDB를 사용하여 Tunnel 연결에 대한 제어를 하게되는데 openvswitch 플러그인이나 [OVS] 섹션이 없는 경우 br-tun 브릿지가 생성되지 않기 때문에 확인에 조금 어려움을 느낀다.
Network/Compute 노드의 br-int 브릿지를 활용하여 터널링을 지원하기 때문에 br-int의 Flow 정보를 살펴보아야 한다.

    • Network Node
$ sudo ovs-ofctl dump-flows -O openflow13 br-int
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x2d0000807a0678, duration=975.957s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:50
cookie=0x1000082b6aa90, duration=975.906s, table=0, n_packets=312, n_bytes=25272, send_flow_rem priority=40000,dl_type=0x88cc actions=CONTROLLER:65535
cookie=0x10000807b9861, duration=975.897s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=5,ip actions=CONTROLLER:65535
cookie=0x1000082b6b8da, duration=975.906s, table=0, n_packets=312, n_bytes=25272, send_flow_rem priority=40000,dl_type=0x8942 actions=CONTROLLER:65535
cookie=0x1000082c61296, duration=975.897s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=40000,arp actions=CONTROLLER:65535
cookie=0x10000807b991b, duration=975.908s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=5,arp actions=CONTROLLER:65535
cookie=0x2d0000807a06aa, duration=975.957s, table=50, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=drop
    • Compute Node
$ sudo ovs-ofctl dump-flows -O openflow13 br-int
OFPST_FLOW reply (OF1.3) (xid=0x2):
 cookie=0x2c0000d242d785, duration=22.933s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:50
 cookie=0x10000d47f7b9d, duration=22.933s, table=0, n_packets=7, n_bytes=567, send_flow_rem priority=40000,dl_type=0x88cc actions=CONTROLLER:65535
 cookie=0x10000d244696e, duration=22.933s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=5,ip actions=CONTROLLER:65535
 cookie=0x10000d47f89e7, duration=22.932s, table=0, n_packets=7, n_bytes=567, send_flow_rem priority=40000,dl_type=0x8942 actions=CONTROLLER:65535
 cookie=0x10000d48ee3a3, duration=22.932s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=40000,arp actions=CONTROLLER:65535
 cookie=0x10000d2446a28, duration=22.932s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=5,arp actions=CONTROLLER:65535
 cookie=0x2d0000d242d7b7, duration=143.792s, table=50, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=drop



문제점


1) ovsdatabase 사용
  • 터널을 생성하게 되는데 OpenStack에서 기본 생성되는 브릿지인 br-int를 사용하여 터널을 생성함
  • 이 경우 터널 네트워크는 management network를 사용함
  • data network를 사용하지 않아서 그런지 몰라도 Flow가 active/pending 상태를 반복함

2) ovs-vsctl set-manager tcp:ONOS_IP:6640
  • 위 명령이 실행됨과 동시에 터널이 생성되고 Flow가 만들어짐
  • 문제는 OpenStack 각 노드에 생성이 되어야 하는데 OVS를 사용하는 모든 부분에 터널이 생성됨
  • 즉, 물리적인 OF SW를 OVS를 이용하였다면 ovs-vsctl set-controller bridgename tcp:ONOS_IP:6633을 하는 경우 터널 연결을 시도하게 됨
  • OpenStack의 network/compute 노드들 사이에 터널이 생성되어야 함








'Software Defined Network > Research_SDN' 카테고리의 다른 글

Yang Model as a Service  (2) 2016.08.02
openvSwitch에서 OpenFlow 룰을 확인하고 싶을때  (1) 2016.04.14
Buffalo AP - OpenFlow SW 설정  (7) 2015.10.05
ONOS prolog  (0) 2015.07.20