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

neutron之Neutron和ONOS集成实践

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-10-8 15:46:19 | 显示全部楼层 |阅读模式
Neutron和ONOS社区动态
0 E$ W. W* M1 D( f
. g, k9 l& V+ U首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。$ H( [: k' \* A2 {# ^7 O- N3 g

5 V, m1 D. R9 iArea
  `- U. H5 N& b8 u0 A4 j# xLieutenant
' \, P% _. f& n$ P7 l7 oIRC nick
" A5 g' b- {+ ynetworking-odl
1 Z7 B( O9 q7 q9 O* zFlavio Fernandes
& `7 i) H1 k3 \  kFlaviof
. {: P" g5 ]$ @' P; Z. {Kyle Mestery' f. V: S1 _# s
mestery5 C) t6 U& m# s8 _0 k) q
networking-onos: k; N1 f, _$ Y$ u+ W
Vikram Choudhary; Z+ C6 l3 J& ~
vikram  I7 c6 M! A0 w: X

7 Q/ [  l/ Q" {( r5 h6 G是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示
8 q: g$ i7 K; u0 o: Y; \- C# \9 M0 V. K1 W- f% w) e

' }+ v# x' x' I' A 首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。5 c' X# I/ o# o' Z& ?6 d
, A9 C" p" E8 Z9 f
Name
% P" O1 X  K6 t2 ]8 g* d- U; YFunctionality
1 K/ D4 r% r% ^: k$ [networking-onos_# y" `6 M3 z# T# }& w
ml2
; m3 H& P/ K2 ^' F; a5 hnetworking-odl
: v' }& z# n$ bml2,l3,lb,fw
& m" l+ x) W7 }4 t0 x% Z+ [7 M. ?- j( v7 C
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。5 m: j7 Q- B/ u* j

; X7 @, ^# _2 P- A. q在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
) m4 r" ^' m" N: L
6 g4 N( w0 B1 Y+ p3 z( c; p8 |neutron.ml2.type_drivers =
- p% u* d" c0 Y: O; P9 B    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver; |( r: M. ]4 }& I0 T+ W
    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
$ V1 ^" S2 B5 m    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
  g) {! P+ M9 U& H) n/ r+ D( T    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver% K1 B* P6 y. e' S% O
    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
8 H7 V! X4 U7 i: f2 }vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver
# o* x) \, c/ \2 Dneutron.ml2.mechanism_drivers =
7 F0 u* f" {: k    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver
1 W& r1 O3 N- c1 [& r4 q# \8 C  {7 Q8 Y" G. f+ q1 G& \* F7 B
2.Neutron和ONOS集成实践3 c+ j- R$ S" q. e: P/ N1 I8 H
' {' y6 N/ z& E' a& s) [2 f" t
我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:
0 _( W( S8 {- T" k0 U! u
* _6 C" v8 h6 S% o3 EONOS平台% u- g9 e  z5 S" x6 y9 V# l
OpenStack平台
. o8 k, f( g2 n+ ^7 Y: ?- cUbuntu 18.047 o; r2 [7 g; I1 f4 u8 m4 J
CentOS 7.9) \( U! h4 r. ?% @$ z, ~
ONOS 1.3.0
  J/ L5 e! S6 A) C) ?5 AOpenstack Liberty(支持Kilo),由Rdo安装的All-in-one
# F) u/ \# O' ?* o" H10.0.0.29
$ \) ~, u% U% t  G+ {: o4 ?* @* c0 G10.0.0.19* c( U' G$ i7 {: \4 \1 H
; s7 H8 ]$ L1 P" u6 g. C6 C- d
友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。( w# P6 V8 W# b3 k0 a8 G- Q

/ e9 S' X' l' k1 O' C在集成之前,请确保你的相关服务是正常运行中的。如下图
" t; W( e9 ^/ Q
/ q0 e' z7 D( }  `9 E  m) I' x3 @& p. C7 |3 S7 v% p% ]) e
1)安装networking-onos(OpenStack Controller Node)
8 F6 r% G$ m! T- h) g
1 ~0 `& ^7 X, q' E* b8 ]# pip install networking-onos
1 P2 [( O, Y8 v- O- L% |! w- n3 K7 m& ?+ w/ I
2)配置ml2_conf.ini文件(OpenStack Controller Node)
$ G: l" p+ l1 V/ s
7 c. l7 @6 j( w. Y5 m  A# vim /etc/neutron/plugins/ml2/ml2_conf.ini/ |8 q/ o* O2 ]7 Y' Q
[ml2]1 i& g8 H- S' R0 q0 _
type_drivers = vxlan
7 n: E- ?- l. U7 H; g4 mtenant_network_types = vxlan
% s5 H" y# T, D2 b+ s3 kmechanism_drivers = onos_ml2' V  D* H0 u  ?* f! H
...
$ d* J8 X- F$ j[ml2_type_vxlan]
" \# G% I* k7 V9 y4 bvni_ranges = 1001:2000  {! i9 D$ H3 g0 J7 p( t. [" S  \
...$ D3 ]! T' y5 K
[secutirygroup]/ G: q; |8 [# {" N/ k
enable_security_group = True
' I) F' \1 L2 \, ?- z+ T...
3 ~! Z; d: h5 e[onos]0 T: A5 Z0 R; {% ~+ N
url_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP  r& }0 e1 j2 i/ ], c' S
username = karaf
- J8 [4 N% C1 q- m1 qpassword = karaf
% l$ |. @5 D5 F/ }/ G
" d5 M) z/ A! |$ ^3)更新配置文件(OpenStack Controller Node)* ~# V+ c! m/ y# \3 {

* m( i* W2 q5 h9 q; c0 I# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
: C: ^6 M" {' H) X# v7 e& ]
/ `6 J& s8 p6 ]% A- l 4)重启Neutron服务(OpenStack Controller Node)+ v5 S( ^; ?4 G2 s  D+ U
' X: ^# z8 A: j' d; O& D( Z
# systemctl restart neutron-server.service! Y* Y9 [% V1 Q9 H" N# g5 J

! B" X6 r: v6 n  L8 W注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log& _$ Z9 T. h; Y" q
2 r# u. L& c& r0 Q2 p& L
5)在ONOS命令行中安装所需要的功能: B  t8 @( w+ o- R0 t- W' j

7 o% Q; I( K" U9 I4 F  Nonos> feature:install onos-ovsdatabase
$ `6 K$ _- E# k- ?- w1 S- G5 xonos> feature:install onos-app-vtnrsc
; ^9 P0 ]9 G0 t- b& v4 ionos> feature:install onos-app-vtn! A, s4 I3 \* ], e$ X
onos> feature:install onos-app-vtnweb5 g# A8 U3 \8 ?) [/ L
" i) x9 {+ p! F$ W! V5 d$ h, u
6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} 9 L( V2 g; Y5 Y
4 l# R  G; D- ~8 D

# G( h( @' S" r; T! k" W) G& m1 l 7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。; ^- e; e- V. {+ n  L
, H" v9 b, N- m; E+ g1 s1 W. P
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>
$ p) D% d. ~% `5 l3 A, R使用ovs-vsctl show命令,检查设置情况。1 [! i# w/ _0 p
# ovs-vsctl show
) Y. m. N: G/ H( t' b3 k3 U. ]2924ffa8-cad5-469c-a4c6-6785e79036ac
3 P& M4 J0 N# D. S; d2 a) ]    Manager "tcp:10.0.0.29:6640". l5 ?; @1 `2 W3 c3 i! ?: y1 f. u

/ W1 v- r  ^# E: E3 v% X& g" f8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。 ! {  g1 u6 m9 c: Z$ k* K
: d4 L3 O  e) p' u1 `. z

9 W# p& ]6 R7 _& p0 n 9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出6 A+ V, {. ]+ A4 X' ^- Z- s; r2 ^' a
  ]( V0 }+ |, l# d* l7 q$ ]
{
0 V% ]% N! B( B7 @7 A+ p$ S( u"subnets": [
! v; J* [- {) v{
. `9 u0 [5 w1 _2 J' P/ a"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",
9 k0 r$ }1 Q5 t"gateway_ip": "10.0.0.2",
6 T8 ^* m( |# T$ A& e"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",
% _8 ~  D& U, ~* E"name": "external_subnet",
6 ~6 A9 D+ c7 d"ip_version": "INET",) G) b/ h5 L$ ~8 h/ b, b3 R
"cidr": "10.0.0.0/24",' S6 G9 ^: u6 S8 S( H. X4 H- w
"shared": true,
; b# y) g! ?+ t) x# m"enabled_dchp": false,
: v0 ^- u, q' ]1 V. ^" ^& X  N"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",
- \# t; \, x- J. w) E0 _"ipv6_address_mode": null,9 d: g1 h: w9 n  p
"ipv6_ra_mode": null,
4 E6 }8 K6 j" P; R6 M; e"allocation_pools": [
% D, W  r7 W9 b3 O# W{6 \' p' }3 I' t: d; d
"start": "10.0.0.100",1 B" r" {3 @/ a& I/ R9 B. r& b
"end": "10.0.0.150"
. h- s% _9 |8 n7 w& T}
4 b+ L$ t; _+ d- e8 e],9 S( }" s' C. b( N3 c" X
"host_routes": [ ]. j' d, j2 q$ `+ j
}
- v# d- c* w# _9 g6 ~$ f]
5 j7 E% F% h" x1 m$ w( H; q4 c}
4 A2 k7 h1 [# s: Y1 G. C. v0 t( k) B, A3 V
10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。
+ K- ?3 `; L5 i* j0 j, T' K1 X! \1 K* y
( T7 h2 Y' l9 j. ]& H
11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports
( X& r$ A& g2 ]) L1 @8 r6 I* F/ G3 G' S2 Y2 J. o  u0 M6 C* f' @
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui- C  Y) [1 b# ?( ?1 A- F& R, w

  a3 N. h6 {- B% u% Z; V$ j13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。1 v" F: l7 E% B# E

- o; I4 L  q/ {2 m6 Z* h# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
3 {. X0 W7 h, l1 S/ p: w* P5 JNXST_FLOW reply (xid=0x4):
  _: K& S8 `/ c" N# kcookie=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)
- S9 K3 c! _: n0 a+ _# lcookie=0x82a481adf93d8421, duration=747.201s, table=0, n_packets=4, n_bytes=168, idle_age=424, priority=10,arp,in_port=8 actions=resubmit(,24)! h3 L/ a) b$ P
cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
2 W) G  o7 Y; s' F) B* |! i. u3 z+ H4 Tcookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
( ?* \1 X$ c) y' 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
$ _6 n  s5 ~( U" h) Gcookie=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=NORMAL7 v5 r4 c- y  h' p6 V# d* f
cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop( u" o- b; r1 ~3 X
9 a$ P2 r$ e+ s# x+ E  r4 M- X& t% e( v
3、目前已知的集成问题% \- y+ K0 u; z& s5 |) C% ?) j

7 w/ [0 `9 x# O3 t2 a1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)$ W  `( k! ?6 s2 y" p6 D

+ Z4 G/ f7 ]- D" Atunnel create using br-int' i3 _5 k/ T. h+ g3 j- ]
management network
& |4 f. Z5 C0 {+ \/ X& S' i
2 L) f) c% ?  Z1 _; Z; j# K不支持data network# A8 b: ^, o$ n% l) [$ f1 m- @  v9 D
2) Buffalo SW(个人理解是指物理的网络扩展)
: `; f: z2 O4 U: t& I& x0 M( D2 D# S" q) L9 b! j9 P6 E/ u
Buffalo SW is OpenWRT  v  c$ n+ M; i. }2 Y
install OVS
+ F5 A* d7 n0 a9 a5 X; s$ T- F* h! k* a9 J4 @5 \
Buffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)! K7 b: J& V# w6 P) H
sudo ovs-vsctl set-controller
' n* n# C1 U8 y/ S+ B2 a; D- H* ~) R/ o: l: c( [5 X" F; x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:23 , Processed in 0.022322 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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