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

neutron之Neutron和ONOS集成实践

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-10-8 15:46:19 | 显示全部楼层 |阅读模式
Neutron和ONOS社区动态; |7 O8 _- e1 X
( V5 `  O: d; D4 B% X
首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。
) |% A8 y7 v3 D
7 B+ [8 t3 V. @. |5 |+ }1 \Area5 B0 t- s8 O. b. v2 h7 A5 D2 t: s/ A
Lieutenant2 n0 s/ G0 M0 L* m5 h; @8 X
IRC nick
$ t6 T+ A: P1 N2 Onetworking-odl
" v+ ~7 I/ p0 w! ZFlavio Fernandes3 B. D- y/ c1 b+ `+ F
Flaviof
( R/ p: G2 C6 n3 }Kyle Mestery
3 D% q3 n( m) Z  X" |3 R; Ymestery
7 l  o6 n1 R3 ]' c0 ~networking-onos
$ P- Z$ g& K% ~( Z& sVikram Choudhary
9 [+ o6 A1 h( g1 e" c  ]- W3 l. @vikram6 ^! q7 M5 \* w& w
2 _' Y( ?! T5 V' I  i( ?1 x
是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示 # U0 U7 G+ b0 r( k' I

" L* s% P5 V* H" j) `+ t
# }1 S; I1 x8 `+ i/ G+ D 首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。
. Q, `" B7 C/ _1 t
8 L" ?& p. O- h7 \7 `1 OName! ~/ W5 ]& c2 L% J
Functionality9 |7 ?0 Y1 v" o0 ?% N9 j
networking-onos_
% x+ g# u8 X* @9 c) Y3 mml2
1 g* V' q! o! i, Y! x) Rnetworking-odl
) }2 X/ _! s, ]3 _& ]$ f, E4 qml2,l3,lb,fw/ S% {8 X% U6 x$ p; Y

, T7 _" Q# n. E, H* [( }这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。7 i" _( ?  T& G
) A( J3 a, K# @
在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
- g2 g$ Z: n5 S! a- w# R" t! e% W- |5 N+ b! j* U. V. i
neutron.ml2.type_drivers =
1 @5 x0 G- L+ l: H! B, @    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver/ O0 {5 h9 U  y( J
    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver2 q7 A% r4 W7 @, _) w- R) ~
    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver' \* R0 S3 h- x
    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver
2 q- x: [- V! i, i    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver( d% u/ P2 Q) [+ ?, u2 F0 y. q8 A
vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver# ~# F& ?8 \' ]+ c7 k  d$ |
neutron.ml2.mechanism_drivers =
* C, T4 `7 ~) P  N* M& }2 a9 p    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver
) c7 x* H- s0 M+ A* r9 O0 b& H& f2 ]
  A, X% n$ Q$ h9 B5 {  Q2.Neutron和ONOS集成实践
  u3 {" c) t1 X# B& A
: q& g  ~' n9 Q. u: `0 p我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:( E& R( U0 _; X" m0 E) Z; j; T
! n& l8 y3 `. ^$ W
ONOS平台
. o( E# J4 K+ T) ZOpenStack平台
) A, z% G, h$ Y  N7 ^2 A- c$ F- y% _4 rUbuntu 18.048 I/ N5 o$ S8 y4 A9 H7 {( w: j
CentOS 7.9' U( C2 w* S# j6 h6 E
ONOS 1.3.0
, N" T; y" p5 r+ lOpenstack Liberty(支持Kilo),由Rdo安装的All-in-one. B" p% L8 j, r2 C# u
10.0.0.29
: q# A7 V; x; ?) r! p  p( B6 u8 m10.0.0.19
$ J( U+ Y, ~  E
3 L( `( K& l* |. e9 z5 R( h友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。
- O! @+ |2 I7 a% y5 s
# [9 l; {% l9 e& M; s; N在集成之前,请确保你的相关服务是正常运行中的。如下图
5 O$ Y( F- X  B% J' R* ^1 ]& l
! }$ Q* L! Q0 u# N2 P- H
  d# ]0 E$ ?7 _; r% X 1)安装networking-onos(OpenStack Controller Node)
1 N2 T+ e9 }& p% w1 s* A5 r
/ U+ l! L% {4 B# pip install networking-onos
# U  {* V, C3 w4 f' h
" |; `9 y2 p, w0 C1 A# v* z2)配置ml2_conf.ini文件(OpenStack Controller Node)
, J7 i4 t9 f. N( \+ W
: v8 _! x* p" L: T' ^# vim /etc/neutron/plugins/ml2/ml2_conf.ini* Q4 H/ r! V/ U( r
[ml2]6 ?$ J; [9 K+ }; [  X
type_drivers = vxlan
2 q# _; f1 O" ^( C! S: Htenant_network_types = vxlan
' r" q- k& u6 _8 l8 v2 umechanism_drivers = onos_ml2( D5 u+ n# f3 J3 P* y
...
4 z$ U# ?; {" I7 r[ml2_type_vxlan]) M5 I' e  L! }# c
vni_ranges = 1001:2000
  @( ?  A7 a: q2 V( ?! H& f...
* f* H4 X1 v0 d/ P: F2 A$ T) L[secutirygroup]
3 x6 c! D  H6 s  Jenable_security_group = True( l6 [( s7 r$ F2 f" ]
...
/ Y! \2 s- T2 T. N4 S# ]2 Q; @[onos]
3 A$ n% P; a% P+ |5 p8 x( ^/ murl_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP7 H4 `1 k7 o3 D0 R1 ~1 I2 M. P' t
username = karaf
" Z4 t4 F9 a6 {password = karaf( U) T# d9 `& O) e1 D# c! n5 ]5 \
" T2 W0 j; ?; L9 V
3)更新配置文件(OpenStack Controller Node)
: F$ h+ ^9 w# A- r1 d4 S8 e% i7 Q0 A. _( S. a) }
# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head  r2 @2 t/ U! v
3 v$ N4 O0 y/ K$ g  b5 I6 ]
4)重启Neutron服务(OpenStack Controller Node)! C4 s8 W3 F: d- g, A& l3 X: U

# g: p7 F1 ^6 S6 g# systemctl restart neutron-server.service
# Y- d- J5 o8 B3 Z$ `3 W) s8 a1 h# ^( P8 r
注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log: O+ C+ e, Y% V7 ~1 e: m

  F5 `% m: N+ J$ O/ \5)在ONOS命令行中安装所需要的功能
8 `+ r1 S. l) r1 |7 m, W7 t0 B- I
onos> feature:install onos-ovsdatabase9 e% M  W% ~, L. @5 A) X7 l1 K0 ~
onos> feature:install onos-app-vtnrsc
* F" k0 Q5 u3 y5 Bonos> feature:install onos-app-vtn
) {: q) d1 @7 E' O" conos> feature:install onos-app-vtnweb
& l3 g3 S0 R9 V# s6 D- g/ Q6 j
. {' ~2 R; t* B6 @6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} 9 u# w) B: q; J* m1 U, t

- t# q! f+ r0 ^! V. l% i# n3 O' ~6 y, C# d+ |0 Z" r7 c
7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。# q5 L: I, h. I9 c- {3 X. V% ?& W
; P2 G. g3 b- c, z1 Z, m
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>- l6 S! ~( w/ ?3 Z- V9 d
使用ovs-vsctl show命令,检查设置情况。$ v! X. v' G2 J# \
# ovs-vsctl show
7 U& C8 {0 A9 Z% q. c& C( k' ]6 T2924ffa8-cad5-469c-a4c6-6785e79036ac
% U4 j6 T3 ]( N* J: v    Manager "tcp:10.0.0.29:6640"
# l5 Z8 I+ @0 o/ i
: ~+ L: o. C% l  a. {8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
+ g7 m9 y8 d" y  `- ^9 z7 f( z) C; i, P& u$ r3 `
8 @6 t# h# o( s& D0 N% }* O3 h
9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出
, ^7 N! r- ^. f4 G9 g
) {# q- c. L, }  m+ I{( [5 o2 p1 ^+ k1 K: U7 n1 F
"subnets": [3 N2 Z/ n7 }+ r& @! \
{2 C9 L+ O  A; D% H
"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",4 E/ n% _  X. v4 J5 l1 J* T7 j
"gateway_ip": "10.0.0.2",
" a5 j2 U! \% L+ H"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",. h4 Q6 O! P) i0 S- W2 h
"name": "external_subnet",* A4 M& g+ ?9 g9 {* F9 R( H
"ip_version": "INET",
: Q; j( i7 c- m# g6 p: z+ B( t"cidr": "10.0.0.0/24",2 l; S9 x' T% `2 L6 P% e# v
"shared": true,  k  O) n* S6 B0 ]
"enabled_dchp": false,6 [; H' @- k/ N. o) ~9 U
"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",$ y1 f8 S8 o9 `7 v! K5 t. l; E! v
"ipv6_address_mode": null,
+ c) ^+ F- Y; Q- B% }/ S5 r' Q"ipv6_ra_mode": null,
6 F/ ~3 X3 f- C9 T8 ~; V"allocation_pools": [5 v( S& w- P( m# r
{0 m# H% C; [+ V) g6 R
"start": "10.0.0.100",
/ }9 w5 A4 m( Y"end": "10.0.0.150"
$ C* I2 _! ?5 U* f}
  |0 e2 [; Y, z) ^4 R+ M$ @],
( _7 \4 n% _; L! N1 P"host_routes": [ ]8 @/ d5 `5 s3 S" l5 B
}
3 L: b1 [7 Z3 I0 k' G, B]9 ]" j; X$ y) w  q" y; D5 y
}
0 s' w* @& K7 h: ?$ f; x
* l/ y& e1 F' P, {( P6 c2 @- K6 F10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。 3 k7 q; T. M7 {- a9 i

  X" ]3 n6 V; I! K
' R) m8 [( T6 _/ _$ N0 a3 A 11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports
" }& V! K  U1 G# w& ^; o4 r+ h5 K8 O+ W
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui
1 S2 O4 a* g7 Y, ~/ Y$ g
- V6 G5 Y' S9 q8 _13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
; q, K9 i9 d8 n, }+ e" U% y$ N
! T0 K8 u! S/ ~" s. G' q3 f- L# r# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
2 m6 g$ h4 J& K: `( F2 }! jNXST_FLOW reply (xid=0x4):
! {; P* l% q, }) M  _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)( S3 }8 `/ g& O6 y2 A
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)
5 @9 v9 _" B5 O4 K) R  W* M: ]5 bcookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
4 b$ C* ~- I  H( scookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
) f9 _& [% n/ ~+ }/ @  ~4 P  G+ Acookie=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
+ u2 P; _# C, ^3 [. @  ucookie=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=NORMAL1 ^& N! y' `5 G! j. u& Y
cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
( p2 R' }  K3 T( h* e8 L
% s$ C# x' T7 M6 s6 ~7 w8 ?3、目前已知的集成问题/ \& Z$ z6 K% _; L( C" X# B: m, W* i
0 k6 g& Q( Y7 j8 O
1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)! t& n9 J& x  b0 ^  @. W+ l8 [4 Z( f
3 f  B/ x3 D# F4 A: k+ `
tunnel create using br-int
0 f9 V5 q( R) i* S% `management network
% Z, c- ]8 M' e5 b: Q
) E8 V/ A- E* d1 ?不支持data network3 Q# d- b; ]* B% J  {2 ^7 O
2) Buffalo SW(个人理解是指物理的网络扩展)1 I0 K/ E& c: M% r: C* ?

9 r# `# ]. t# W/ yBuffalo SW is OpenWRT
1 l5 l  p" r( L) ?( h* v1 pinstall OVS
; ~' Y4 e# f# q8 K
* f! l4 h2 C$ m: P+ Y4 v& UBuffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机), h7 Y) c5 L  ^# h4 n- I! ?
sudo ovs-vsctl set-controller, D$ E: k! c' r
, V: J- m. o, k$ S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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