找回密码
 注册
查看: 1549|回复: 0

neutron之Neutron和ONOS集成实践

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-10-8 15:46:19 | 显示全部楼层 |阅读模式
Neutron和ONOS社区动态9 F* o0 t' c* l% S) I& Q+ R5 Q; R

; ~) m: y8 N1 [' G' J9 ]首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。) z; G/ p" e8 j' w

1 X1 b/ j8 m$ ]4 G# ~Area
3 [7 O. i/ I7 u4 P2 u3 m# MLieutenant
% y2 o" @$ H! N( \, J- RIRC nick6 D0 }8 N; d, ?" r$ l  @
networking-odl' V$ n  w( p2 j
Flavio Fernandes
) e0 U# W+ Q+ s$ k4 l" t; CFlaviof
: d1 F- P2 E" s2 L$ Y$ j8 pKyle Mestery. Z! |; c( t% q7 ^
mestery
$ m- y" t5 @0 \% s: m9 w" A7 Vnetworking-onos. y! Q0 ~1 Z% ?5 y5 }; S- D
Vikram Choudhary
6 q6 ]0 \0 s* s0 ^. O- Hvikram
, C) v, k: Z" o* T7 u% h
6 z  Q0 O4 U9 A& d+ U+ q是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示 7 j' W6 K. A3 C
0 R+ l2 j8 r7 W- N- W% ~! G

$ }% d# q7 b1 k0 c( ] 首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。
# J( C4 o$ K4 d4 f5 u- V3 V% Q! O5 l- G, u- Y
Name
: p) \% S0 I7 R( N* `+ g: ~Functionality6 v  Y' r( o) i8 s
networking-onos_& a% Q; Q5 i; |3 P
ml28 H! d! ]5 [# M
networking-odl
2 }8 q, o% Y( Y- d2 e9 t% a9 W2 rml2,l3,lb,fw! y$ c6 A. N: m4 M: S" I

, C: k: c0 x. S0 T7 j这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。
# Y* |# N  m* x7 Z$ u" P9 Z$ i& z
6 G$ n$ K8 b9 G1 {* H. E; c: O4 U: q9 X# }在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
. y3 j& \4 o- v; a# U& y& K: P* v$ h' L- v1 ?0 |
neutron.ml2.type_drivers =7 V% e9 y' {4 ?- I/ h4 K% q
    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver
8 I0 S" s  |5 F0 F    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
9 R8 l: M: k" s! v    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver9 x8 k" o7 [$ O& l8 Z% Q* K1 b5 Z7 I! W
    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver; T. O, b8 W: z  n2 Z) M
    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
7 }. H' _; B  L% Z$ d- s8 Mvxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver4 C4 P+ l4 H4 Y8 m
neutron.ml2.mechanism_drivers =
( O8 [! s) r& P" [! K( T' V7 ^  L    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver1 W& @! B- L" w: \* v& n3 [3 ^
& O1 ~5 J2 [2 x5 L0 }
2.Neutron和ONOS集成实践
: W) h$ a! _8 i; X8 ^  |" q8 i9 n$ ~
我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:
2 w& j& w: ]1 v; Y3 e7 ~5 }/ r; d: P& f- s/ _4 z0 f4 ~
ONOS平台$ e7 I9 ]: s0 e9 v
OpenStack平台8 o# N& X7 Y3 _2 g! w+ t2 ^& ^
Ubuntu 18.04, l. v0 i; B3 A) ?
CentOS 7.96 R  z$ ^' d" I# d0 x6 c
ONOS 1.3.02 ]" Q1 ~3 ~) D  @3 B9 A+ l
Openstack Liberty(支持Kilo),由Rdo安装的All-in-one
5 F! c0 G" k! K9 b& ~9 i  E( J; e10.0.0.29
" H2 R9 U0 Q! s: m! s10.0.0.19) A4 l9 f/ `3 A" [

; ]2 G  k' Y1 G# \友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。
) U/ J' u6 D- L' v1 A3 T
- b6 s  X8 l- x# Q在集成之前,请确保你的相关服务是正常运行中的。如下图
2 H+ i- S# e8 P* t; d4 W" d) `/ e; T

) Y) E$ ?, R; s/ X! q6 P; U 1)安装networking-onos(OpenStack Controller Node)
- o% Y& Y$ p9 K
" Y2 ?$ {. v( M% E+ _# pip install networking-onos2 ^5 I3 O/ W1 T0 N9 a# [
3 e4 S5 A$ t; o8 a4 x
2)配置ml2_conf.ini文件(OpenStack Controller Node)$ K% e' Q8 _! W5 M' v
3 a  f& }3 }. ^
# vim /etc/neutron/plugins/ml2/ml2_conf.ini, z2 j0 |3 d, F/ t# J
[ml2]8 }. n: Z& ]! w' W
type_drivers = vxlan& L. L0 R9 R8 X7 v  f( r
tenant_network_types = vxlan
! w/ o" c" M; q+ W8 U7 N; [mechanism_drivers = onos_ml2
2 B1 n" Y4 b- k# R, ~...$ m( x/ h! P" i, Z7 S
[ml2_type_vxlan]
$ U8 m* @( d3 `9 _6 W7 D+ G- Rvni_ranges = 1001:2000
2 [* Z1 }: a  j: S  T# {1 V' L...; A% ?: ]' W$ k+ J9 n0 E
[secutirygroup]0 e) j' ^$ p2 y- I
enable_security_group = True5 A  `! C" y0 @0 S6 i
...
' p& S& a' l2 j[onos]; ^$ G" ], X5 q
url_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP
5 Y6 D1 l( f0 U& d* V2 f! vusername = karaf
% R5 V/ t5 H7 s7 ?9 Z7 _password = karaf
" V8 F0 t2 X3 [- U0 c; @
/ ^- ~' _1 F6 Q+ I3)更新配置文件(OpenStack Controller Node)% O' I* }) x5 C7 V  g

0 t# O& Z6 G: v4 x: _# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
; n% U3 c0 v0 L! }- ~+ S% O" X2 m& T( _$ E: u! |/ @* L7 @2 O' h
4)重启Neutron服务(OpenStack Controller Node)4 m# `4 i7 t- E. M, g

* L1 z" v- C% i) T' M: ~# systemctl restart neutron-server.service% B! x0 ~5 c. J5 ^5 ~' Y( c" ~

9 p$ d' `" v# V注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log0 W* O4 b6 q4 {- ?5 E9 ~

3 m: n1 h- I; O& I5)在ONOS命令行中安装所需要的功能
/ {, I3 K1 [" R7 t& W5 c) S) k& v2 P0 m4 X
onos> feature:install onos-ovsdatabase0 ~$ E% W3 ~% U! }3 j& C
onos> feature:install onos-app-vtnrsc, m4 q$ b! z- s: U, x+ ~
onos> feature:install onos-app-vtn
5 q# ?# i- k  D% Monos> feature:install onos-app-vtnweb
3 {' y$ A0 }5 s6 d
; ^5 D* z, p' _/ i& C  @) R6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]}
+ U2 T$ ]# h1 O/ @  ^# x% j: P. V; k

) s' S; R7 j, V& m  a0 d8 [ 7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。/ ?- ?" h+ b* j" h2 G* s
1 \" i6 q- m# P6 d- `8 U  x3 }
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>' B, N* |# }# I5 ^
使用ovs-vsctl show命令,检查设置情况。) h* R0 b+ k3 X7 }, m2 E& `
# ovs-vsctl show
. F) s4 ]) C: ]4 E2924ffa8-cad5-469c-a4c6-6785e79036ac
" K7 Y+ X  g2 }3 ?" |    Manager "tcp:10.0.0.29:6640"
+ v8 w0 B" t9 A5 W5 S/ e' u9 Q) X
8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
  N- C6 N) r% F. F- M% r5 p' z: z' R, Q8 v8 @5 i

0 u8 p; L4 b& A, v) b* v 9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出
6 C# p3 g8 [0 B' {6 D. K( y( u: _) `
{
4 ]! ~9 l' R  z  y3 o3 d"subnets": [5 y9 H: }7 O1 X6 B( S- |" f% ~5 I; U/ @
{
" v) q+ a4 }- i0 v; G"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",2 a, k5 ?) K9 R# T: Z
"gateway_ip": "10.0.0.2",( `" h- T* E  @7 U: ?
"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",
4 v( y0 v9 e8 p5 p& L"name": "external_subnet",
2 F- g0 W2 B: ["ip_version": "INET",
$ \5 q* o8 }  k3 P"cidr": "10.0.0.0/24",1 j: @  ]' @" W# I
"shared": true,
% E" I0 S' v) l1 X"enabled_dchp": false,
4 T  f# R# [8 e; T"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",3 C9 J/ @9 o+ K, N; Y
"ipv6_address_mode": null,
( X9 ~- i5 T, b% K"ipv6_ra_mode": null,4 _" B" O: Z7 ?! u
"allocation_pools": [; S* ^$ Y: u4 Z) b) t% l
{
, f: d* Q, C$ X' H: V7 E$ ^"start": "10.0.0.100",
( p' R: T2 T4 F' E+ w. w  C"end": "10.0.0.150") X7 D# ?) R$ ^8 @) o, ]
}
. n" C9 v, Y* L2 o1 j% v2 b1 I],# X& Q- k$ O0 u- y4 H
"host_routes": [ ]
9 R% B5 }2 e3 Y4 D, E0 |}
; z' q8 n+ L: \; @0 L# `]0 F6 [% Z; P! Z0 {* d+ d
}
, ?3 N6 o' T. l4 s0 a7 ^
- V4 e+ d$ S+ m10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。 9 |7 T6 J! L) ?9 T+ }% k
& F7 B( c+ h2 @  _) I  }0 T1 X

8 l. ~6 c5 V+ A  G 11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports
+ q3 u% O$ F. l" J* ?% P9 f/ @6 Q3 @: S9 D% o- w0 t: y' d
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui
: @% S% }/ Q; K- d' R6 G2 g
( S) N- S' c7 i" I13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。* z2 e/ i1 u4 _" J5 m3 j
' B0 H( a6 y/ v: ^
# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
/ J6 _1 X: H( G% E3 P9 mNXST_FLOW reply (xid=0x4):
/ n; o; o3 C5 |! ?cookie=0x82a481adf93d8421, duration=747.216s, table=0, n_packets=0, n_bytes=0, idle_age=747, priority=10,icmp6,in_port=8,icmp_type=136 actions=resubmit(,24)6 T1 h. x# {7 a3 m/ I4 `
cookie=0x82a481adf93d8421, duration=747.201s, table=0, n_packets=4, n_bytes=168, idle_age=424, priority=10,arp,in_port=8 actions=resubmit(,24)4 A* u! _: Q/ k/ ?/ O
cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
1 G) p7 u- m7 X/ |+ e* |cookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop9 z. ^9 j4 k( u2 k3 @* ?
cookie=0x82a481adf93d8421, duration=747.226s, table=24, n_packets=0, n_bytes=0, idle_age=747, priority=2,icmp6,in_port=8,icmp_type=136,nd_target=fe80::f816:3eff:fec3:e7a3 actions=NORMAL
/ a' R: R, M& N% ^0 p& C0 [cookie=0x82a481adf93d8421, duration=747.209s, table=24, n_packets=4, n_bytes=168, idle_age=424, priority=2,arp,in_port=8,arp_spa=192.168.0.3 actions=NORMAL( T, Q4 b5 S& z2 o, e
cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop! T" W& Q+ N5 L$ i
0 H6 z6 Q- l7 h
3、目前已知的集成问题5 q' F( b% y7 c. t
3 D7 |% B" a# b' }/ K
1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)
4 V% A. d5 e! S3 ?3 x& I+ O: v' m1 Z& d: f# P4 d. {
tunnel create using br-int/ {& q; n1 L3 w* ?* d
management network- a/ G7 T9 ~2 V3 g$ o( _' t

6 \' Q' s' g% x7 O  O不支持data network
9 K- w! e9 T. F; i+ ^- O( y2) Buffalo SW(个人理解是指物理的网络扩展)
+ Y/ C- k7 T7 t% `! B' {* y* l3 t) g6 g" K' H% z# F; q
Buffalo SW is OpenWRT
! x# V% p/ e, y& Z' }install OVS
- H2 t" s6 ^! ~) f8 P2 M" a7 S5 c* c( n
Buffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)
& d* T) Z7 B: ]8 @sudo ovs-vsctl set-controller
7 [% f6 f1 ?  j/ t
' Y, R4 l. W+ u0 S: ^% `1 e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:10 , Processed in 0.065928 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表