- 积分
- 16840
在线时间 小时
最后登录1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?开始注册
x
Neutron和ONOS社区动态
4 Z4 N' n% w J- l
+ N& q3 u2 J! A$ r8 \首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。0 D" p6 H) N) X1 h% @
3 c0 {7 D+ O/ l# mArea
0 V' g z- D0 j9 S+ H2 ALieutenant4 p/ @# s# b$ a1 f6 C
IRC nick
! j8 W9 `9 L! r" N2 W) O: I j1 rnetworking-odl
3 o" k: j0 h) D7 k7 A$ EFlavio Fernandes9 W4 ?+ b# e9 l. u& Y) A. y- N
Flaviof
8 {! X* i# \- vKyle Mestery% O) j5 \' H# A5 ~: @, G
mestery
/ t4 A7 @8 c7 n2 Rnetworking-onos
% H% R6 d8 g% D' @+ O D4 L! NVikram Choudhary
8 Y/ s# ] y w6 uvikram% q' Y* f0 L+ u8 }, o
" s- R. ^% f( l3 n {4 N! \' H: W
是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示
o" Q' k9 e5 m( ~2 N2 B* |+ |8 e" o& K
}/ V6 z) x" H
首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。
4 I( N$ s# R: Z6 |; m4 B( ~; t# m$ q. U3 l$ k8 j
Name
7 M3 z- l2 ~2 iFunctionality4 }' J; d9 _- e( P' N( r$ O! |
networking-onos_0 D( @. t4 ?; B& @1 Z* K/ e I
ml26 f5 p# n8 l- F! X& n9 b, w
networking-odl: @& r# @8 ?8 |: O# }& I
ml2,l3,lb,fw5 {! f/ w) j0 Y7 f6 i
; q- k6 ]9 X* U( X) G& F' u
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。+ m. X# V: K, \& {% y5 I6 f
, z5 `6 g9 }8 |5 X0 Z/ _2 K
在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
% |+ F! p( V S% [) q, M2 k
$ g; e# p( k+ D0 b, D# l) s, J) A0 vneutron.ml2.type_drivers = N8 O# R% t& ~& s5 V+ p
flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver
1 z+ M( T+ A* T' ]: J- N local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver+ @6 `* k* h& b9 n; |
vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
8 G- c" v8 Y; a" V8 S geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver3 }: W/ J! {, {) q9 M+ v
gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
& U; h$ @& c3 [/ _vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver! U" M1 h& s- C+ n
neutron.ml2.mechanism_drivers =
- h9 o1 Y: b9 T. t& F1 h9 G linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver+ r/ B+ Q& c1 d' [
& ~$ U7 T" p3 v7 t2.Neutron和ONOS集成实践
: O: q9 |) k% H I$ }# U/ L5 Y; I5 I0 h# U O, {4 V
我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:+ V; U/ s& S& c! a6 Z5 ]
& `9 T/ w) Q' ~" T8 u$ _6 AONOS平台) i+ ~: J$ |; j; y8 |4 E
OpenStack平台( B% Q1 O0 i0 R/ G$ d' G
Ubuntu 18.04
3 F! d, ^+ R: O' WCentOS 7.9
. D$ X2 R* }+ e. P) G* `1 AONOS 1.3.06 Y, { u6 B" \3 v5 F3 e+ i- ?
Openstack Liberty(支持Kilo),由Rdo安装的All-in-one
& F: W( d. Q! Z+ Z10.0.0.29
: T% e8 x- b: B" Q0 I% H8 T! f2 ]10.0.0.197 y7 t# k2 F* T& a3 b( j
0 s- p/ ~/ v, G
友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。$ |: x+ K- ]1 U3 R+ c& s& h
( X6 g ]" N7 T3 Q% a
在集成之前,请确保你的相关服务是正常运行中的。如下图 ! W8 k1 p2 ` a: d7 z, j4 p6 G3 o# @, f
5 K: q* n/ r4 _! T
6 m6 x2 a% L4 L* Z7 D: h
1)安装networking-onos(OpenStack Controller Node)
8 g5 l0 l' `& o4 a$ z9 K I- Z0 R) Q6 P& y
# pip install networking-onos
- A5 z: G/ Y( T/ ~5 o0 L0 l1 H0 {- b( u: Z! n1 {
2)配置ml2_conf.ini文件(OpenStack Controller Node)
/ v' l6 B7 a' ~# N/ D, c8 i7 S! N, H2 E k
# vim /etc/neutron/plugins/ml2/ml2_conf.ini8 s D% x. ?$ P! @4 k
[ml2]! ]! o% O$ i; q7 ]0 v
type_drivers = vxlan
7 n$ c! E( U6 d: B" z9 Xtenant_network_types = vxlan5 t% z/ }* x; K$ V6 K
mechanism_drivers = onos_ml2
+ V& C0 J: [ y7 @ A...2 m) l! O8 R9 T+ R1 d6 J% R. o
[ml2_type_vxlan]
6 q' \* {+ v5 t5 H/ c! Jvni_ranges = 1001:2000# ]. j0 Z4 Z ]0 N5 |- {2 j T
...
3 Q5 b; V% A8 P: w; B1 r& {[secutirygroup]9 o; |& Z F. i9 ?
enable_security_group = True8 U4 U: A3 }, I. s* }/ q# D
...$ c2 c9 d9 g; Q
[onos]
6 \; K) m$ P. ~! surl_path = http://10.0.0.29:8181/onos/vtn # IP请换成你自己的ONOS_IP+ K. r0 `- m9 i9 _7 A3 S
username = karaf
) x; m) T1 W9 { V7 Mpassword = karaf
1 I) T5 }* F0 |# B+ t9 Q& t
9 d8 `, e- q$ p: W# B5 O& U3)更新配置文件(OpenStack Controller Node)8 c: M) \) u6 u/ ?
& ~( x+ {' q4 o$ g( k# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
' Z1 n" i! m8 r2 a( K
+ q! e M& `7 J! l/ x 4)重启Neutron服务(OpenStack Controller Node)! H" _: E- w) Z- A
3 h3 Q7 b) `5 d: L }1 p# systemctl restart neutron-server.service4 R, j; Q4 Q/ P9 D5 n: i: b! _
& B7 l4 I" A% i/ w1 G" n! A& {* n" p
注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log: h8 @$ o7 E7 s5 T: j4 T
2 j' Y/ Y8 I: w- G& U5)在ONOS命令行中安装所需要的功能5 I+ y7 F: J3 b8 j/ D* q' n" j9 Y
. k; j7 E( b) Xonos> feature:install onos-ovsdatabase
5 F; z b$ {% v% N3 Konos> feature:install onos-app-vtnrsc6 U6 E! e4 U3 ^+ O
onos> feature:install onos-app-vtn
/ A# I ?. M* a1 X7 c5 nonos> feature:install onos-app-vtnweb
8 S3 N8 F t' V" a, o# }8 Q; d. Q. ?" }; C, a: j6 I" v5 r# \
6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} 7 d& Y; _# T8 v2 A# g/ t" p
4 j6 m+ q3 y; d6 h# P9 g
, A0 G( ?" H1 X5 O; n8 [ 7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。& B1 R5 ]! n {1 g$ ~- B& r
5 O& q& v: F; t* @, \$ y
# ovs-vsctl set-manager tcp:10.0.0.29:6640 #请换成你自己的ONOS_IP</p>
" w! p; H, h$ \, I( N使用ovs-vsctl show命令,检查设置情况。
: c% P$ C# j$ d/ d8 K # ovs-vsctl show! \: n1 A4 ?5 S9 }5 M+ q P
2924ffa8-cad5-469c-a4c6-6785e79036ac9 {1 Y& o; l! w3 L6 ^; K1 a2 k/ ?
Manager "tcp:10.0.0.29:6640"
% H, v( {5 Z3 |0 U" `! \
8 g5 a- ] p. F7 v8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
' g `4 E4 m! r' _4 d; j/ }
4 U2 v( h. M" b# }
) B% f @% ~: Y1 H* s8 x 9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出0 ^1 j1 t5 v& |" t2 N& t
1 q2 L3 _& S R5 i- S' U2 v
{. Y5 o0 \, X3 V2 g% r; t; P
"subnets": [
- P, L" z" T$ r& O9 f4 o{& K5 k% n5 B( ]$ W
"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",
7 B4 q) G+ f( W"gateway_ip": "10.0.0.2",
) @7 U% O D+ Z1 j0 d- l$ E! ]: F/ Y' U"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",
( j0 z9 n7 B/ i1 H"name": "external_subnet",8 K% A0 m9 J- R" C# W' v
"ip_version": "INET",
! L& B6 P( h, i* ?"cidr": "10.0.0.0/24",
2 n2 N9 I4 a X! L. F# F" \"shared": true,: b1 E1 X5 S$ f( [6 U
"enabled_dchp": false,
$ ]4 H: l& N X$ B! U1 k"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",
, k. C7 G$ K$ c, N"ipv6_address_mode": null,$ A% b1 l) h0 W( v3 F, H1 K
"ipv6_ra_mode": null,2 p% Y% M, c2 c+ v9 c- K
"allocation_pools": [: d4 W) ?% ^8 N* q9 R' {
{
+ T" `4 `/ F7 x. ^/ ^"start": "10.0.0.100",) s. t4 {" `# j- r( T3 `" i* W
"end": "10.0.0.150"
( H+ J! E( j h5 l# w* Z& X/ ^* y}
; w! x8 g0 a& `6 i],
$ w( `0 f1 I4 x2 o) o6 r" L"host_routes": [ ]. y2 ^5 m. h) Z' O% E/ I
}6 d7 E& g' ^9 o; y2 j% Q5 ?4 J$ \ \
]
2 k3 F+ a! Z: w}
* r" g# k7 R. W+ P) b2 p& S, Y0 d6 o+ H4 O* G* C. \
10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。
3 W- Y9 q8 z& Y1 e/ L7 v
& B% C7 |2 }8 d
% J; f) X1 H. ~4 N* |. ]+ W 11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports: g9 }, w3 o7 V7 V# \, \
+ O0 m( H+ r7 T1 w* g. {# l
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui6 \8 O' l: w% A
3 V# R9 }- b* w! z4 e5 L) L( J2 j
13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
9 q$ e% a/ z, j! J# q6 u" H) L" v8 O3 _2 r/ L7 D# ]' H/ S
# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
9 m& B9 b' w# X0 y* {2 T7 U5 E/ \NXST_FLOW reply (xid=0x4):. G9 P& l3 w5 b
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). f! ?% u% A5 u" b
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)
& ~0 V* R1 Y. J6 v E: ^' _5 wcookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
/ O% ^3 L; F' k& {) P; ~cookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
@+ {. w. U5 V J3 R" Ecookie=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
/ I" E% U3 x7 Y Ocookie=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
; c4 u/ ^4 T6 ]cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop1 X0 `6 M, T& o
6 A. n5 Y& I/ r" a- X9 U3、目前已知的集成问题; @' a6 R5 Z$ M& C# q2 l/ N
2 W: ?. I% v5 x! D! K$ n1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)
$ u: D) e; c% p1 ?1 u; K Z5 ?% x: i( e C y6 q: h
tunnel create using br-int; C( ?* W/ ]/ {2 B
management network
% B) }$ S$ O: K! C
+ n5 U* m' O, X5 |& X不支持data network
# N H0 [, b" E8 b' X" L' l2) Buffalo SW(个人理解是指物理的网络扩展)# X4 R( O- H* a" m3 s" O
8 Z4 K% `+ g% ? _6 O- D& C# O2 l1 {
Buffalo SW is OpenWRT' Y8 u+ L1 z; t4 }, c. u
install OVS
7 J4 _# }, M: R1 F. X* T2 o( w6 G; V
Buffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)
) r/ R0 K$ W. {# N+ \1 @sudo ovs-vsctl set-controller
2 H% x" E/ C" f8 M' r6 o. j* l; [3 [- w, m5 T
|
|