易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 1550|回复: 0
收起左侧

neutron之Neutron和ONOS集成实践

[复制链接]
发表于 2021-10-8 15:46:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
Neutron和ONOS社区动态
  e! U6 B: u7 `
1 F( L# K0 J! m' L8 }2 H+ N首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。
$ g, h# x* ]4 V( x+ U- r; k
; M, Y6 V1 K  p/ w' L$ SArea( F$ l$ b/ b; B% K. Q; v
Lieutenant. `( S# e3 u6 W; |8 n9 D
IRC nick
0 ^1 d% p- s" `+ Gnetworking-odl
# P  T4 a6 p) k' n3 AFlavio Fernandes
1 u# M3 ?& v% X& s' E) n4 X! i0 ^Flaviof) B3 j/ C' L* y2 ?* b6 A
Kyle Mestery
5 `  P& g9 @1 xmestery
- g/ E. w8 n( lnetworking-onos
0 V( S2 A2 R  X" z7 t( xVikram Choudhary" K: T; M4 Q1 h6 E
vikram
' j, \* Q3 e$ b; B5 ^/ H; f3 n  u2 x2 J# v
是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示
% V- t) v' M2 M# {; a9 j9 ]# x8 Y' K3 k3 B

4 p  t7 F2 t; @: n# O% p! Q' R 首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。
" c* T6 D& N* N; O8 L. i% d1 g; G# W. m  v. Y( ~: r, u; g3 ]- D
Name
% Y7 q. K2 m7 d. IFunctionality! r+ y, ~7 v  Y+ |' T; g- U
networking-onos_9 T) D3 [6 W3 `* ^9 X( ^9 f, t! [! A* g1 b
ml2
% z* k! J" ^8 U3 M, B! @6 O* lnetworking-odl& n3 z& q  v, Q4 B0 ~
ml2,l3,lb,fw) [! B  h6 Z/ A7 l7 k, X% i
+ H4 _: k9 C3 E, j5 i& S
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。! I* ]0 l  }/ O7 {' o' v7 ^
1 T+ n7 S( e; [  t: L7 U) j/ z/ x" h
在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
# V" K% R) _' W: t; S$ L7 Z4 @
& n/ G3 W2 n* e+ m6 Rneutron.ml2.type_drivers =
4 @' t. ^, W4 t- }) o' ]/ U    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver
/ }# g- l: D# x3 F' N    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
. b/ I# [1 d6 o# d    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver# d. p" }7 s  r2 F
    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver9 V5 c4 d4 q$ Z8 s- d0 D1 J
    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
" u  d2 E% M1 U" v6 g" Zvxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver$ S, p; A7 ~, X/ c" Y" k
neutron.ml2.mechanism_drivers =8 y  ^+ z& H( h8 N7 U/ d
    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver
( F& b* @4 w0 q6 k' |6 O5 A  z" j" w; f
2.Neutron和ONOS集成实践
4 F; d0 O4 a: a/ P: f( x; V
: K. B& F, C* n我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:+ D1 p- u. l+ ^+ s0 l) x

" X7 p) y& O8 h* i: WONOS平台: R+ ^  v$ [' E. R8 Y4 a) {
OpenStack平台, h1 I' @2 s5 X' o1 q6 @& q
Ubuntu 18.046 S) B3 M% |3 |
CentOS 7.91 L+ b+ e7 `& Y+ S2 {/ q
ONOS 1.3.0) |3 ^) p5 R+ X. w' R" k
Openstack Liberty(支持Kilo),由Rdo安装的All-in-one4 _# `/ ^' N5 e5 Z
10.0.0.29+ U! w5 Z2 d* |% h8 f
10.0.0.194 E! U! P* a/ u- c

9 P7 P0 I( H. ^9 r- x友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。  x8 @* W/ f2 U. c0 a
& m6 @6 l) q: o& D8 @7 [( U0 u5 s1 ]
在集成之前,请确保你的相关服务是正常运行中的。如下图
( p# G3 o+ n+ Q! k
! c+ ]- T; o9 \0 ^( \1 Y6 {. D9 h1 k: u
1)安装networking-onos(OpenStack Controller Node)9 P: L8 K& C  h6 E) ^+ t. A2 V
9 X# ]; ?: a9 i+ Z% C- `; z! F
# pip install networking-onos
2 g8 p4 Z! z9 |4 c7 t- b6 x1 I2 v3 j4 v' n/ T  T9 d+ E
2)配置ml2_conf.ini文件(OpenStack Controller Node)
' B. O; A8 w7 F. T2 s
5 n$ r9 G7 k( M+ A# vim /etc/neutron/plugins/ml2/ml2_conf.ini
2 N/ _! a6 j: u8 z$ N" k/ r[ml2]* l- D% l& c1 ]/ @; ~1 g4 ^# J$ @
type_drivers = vxlan
+ Y1 r# T. W0 Utenant_network_types = vxlan' Z, `% K) X* ?  P* R7 o
mechanism_drivers = onos_ml2+ E4 V( M9 d) x' \8 k. Q8 Q
...% ]1 r% H- i! L( o
[ml2_type_vxlan]
0 ~+ i! `8 O) u& `/ J2 e2 c0 U5 e" dvni_ranges = 1001:2000) \# u/ Y5 S+ q" s. Y. `) a
...
# I9 J" e- d: Y) E9 I5 G[secutirygroup]0 E/ z( w: Z  R/ e
enable_security_group = True" K( N: V; K5 q
...# d0 T+ z; H( I  y7 F
[onos]
  O4 J' ?0 s6 k9 surl_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP' `' E0 i, P, t. B8 F, ^
username = karaf
3 x( P( W" j. h! i* ~( o" Qpassword = karaf( R6 y/ j4 G0 Z0 w4 x

( Q9 k( N& A2 c1 S' E/ B/ N) C3)更新配置文件(OpenStack Controller Node)
. ~) T/ b" k( J$ B* Z9 o5 D
. L/ Y) v: Q5 C5 S# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
: W" P$ a+ V6 _5 j, X7 ~/ M) ^- D& X8 e1 l) V8 P, o
4)重启Neutron服务(OpenStack Controller Node)
. J( ?: N7 H9 T" J
; G% i7 G  H" D% x; S( p# systemctl restart neutron-server.service# H, m8 v% {3 ^- }
0 ^* n0 H4 t& e
注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log
2 G* U2 R. Z/ U" w
9 M' H" X; r5 p: L5)在ONOS命令行中安装所需要的功能
& Y8 Z6 j& D- ]0 a+ m7 _( m! A9 F' n+ `  j5 i
onos> feature:install onos-ovsdatabase: O9 q" V& N) n, V
onos> feature:install onos-app-vtnrsc8 l0 O5 Z! ~* _1 E
onos> feature:install onos-app-vtn. I; a8 V4 K3 [" J0 w7 Q
onos> feature:install onos-app-vtnweb
& d7 W& j# F+ r: a1 x& T" O0 V1 d) T) J3 b2 R3 ~1 @
6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]}
) e# {0 P/ y$ y! y; v( V& x) M" b9 i/ Q6 h/ }& I/ O
6 h; g* U* Z/ \
7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。1 B6 X$ Q. T3 [- T5 \
8 d1 {8 F) t% j; f; H
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>
2 [) M3 D, \1 b3 L" g使用ovs-vsctl show命令,检查设置情况。! p# `2 L. t& k9 i5 {: n
# ovs-vsctl show
- h5 g) T: s: |2924ffa8-cad5-469c-a4c6-6785e79036ac
. m' b6 B  }7 |" u& a+ W' M    Manager "tcp:10.0.0.29:6640"
" f0 l% Q6 T8 R  @: G) a8 G, q. ]% ^+ J$ x% x" f
8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
5 B- V: L* `7 J/ s: J2 q( u" R2 J# v: B$ U8 I3 ]8 G3 J9 E
* W, Z1 g% ^3 u2 w6 s
9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出
" `& u# x" h* r$ A. r
2 a) u+ G1 O- c' \( K9 p! p{
+ _9 m$ ]: d9 Y) r- m) }"subnets": [  U2 x# I% n) }1 H/ T6 I
{
4 @6 z; R- ~4 M6 [( c: g* l" e) ?"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",
$ s8 [/ T* x8 ^: K, a  I7 v"gateway_ip": "10.0.0.2",+ D* B. q* y2 \+ V$ K  u
"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",
0 s$ }0 t- ~* W) H5 m$ y" N# b+ q5 G. z4 |"name": "external_subnet",, Q5 a9 U$ X. _- u( a' a/ |
"ip_version": "INET",
2 s# ^& n# w  s) z$ s2 L. W"cidr": "10.0.0.0/24",
% I, q# d5 Z6 Y"shared": true,
# y# r1 Y/ A1 v"enabled_dchp": false,% }( R0 _) |! F$ w- S
"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",
: j- J; C" K8 p# G8 a: o"ipv6_address_mode": null,, Q& E& B7 j% `9 g- g% |
"ipv6_ra_mode": null,
' c) h# }8 R/ P; @& N* f! Y"allocation_pools": [- w( E) Q  F/ L! ^6 t& y. F( ]
{% V9 k% h1 G/ |+ c
"start": "10.0.0.100",  i/ H# H7 m. S
"end": "10.0.0.150"  v/ J* ^  T3 W2 G! g' L% A; B
}
, }6 _7 h* U9 q; [& d: o6 K% [],
+ i# i4 b. s5 o  |  y"host_routes": [ ]  ?" p  X/ P+ r, u  z
}  x3 F. j+ d1 [( b, K
]
4 X7 ~' T/ M7 {: f( ?/ k}+ J3 E! n* l3 N
( f& r; f; T& S' T" R
10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。
: i3 x& ?9 x; F0 u4 N
' z2 P4 V+ D3 [, B8 x" ^9 t$ S' H( N4 D- |# B3 {
11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports
% _; c, ~* V2 I! u9 r/ `- X* t. z5 o# g& b3 U# i! \: X) s5 s# T+ r
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui4 ^* O8 `# Z, |  F2 @, p( W

1 w3 a4 C8 V4 ]/ Y8 w13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
! b9 l1 R  q$ X8 B7 k; r% Y3 z5 {* k0 F3 c$ W8 N" E$ f
# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow136 m, Q4 p( q6 f: o
NXST_FLOW reply (xid=0x4):0 r" B+ z# Z* W4 r, Q% 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)
8 ~" j7 l/ Y: U! W, E/ ]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), O3 [/ i, T1 j% c, g
cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
; A+ d+ ?6 _6 F# }cookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
1 s5 \, t  D; e. L' E5 n4 Ycookie=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* w8 h  ~; Q8 O! M# k
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+ c4 O7 q0 ~8 p
cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop+ ?6 O/ z4 W. B2 O$ N

- w2 }9 F! T; u$ b3、目前已知的集成问题, x" Q( j" S8 \8 Q9 P
5 ^: q- X# t* ~) M
1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)
+ F  C6 c( v, n6 m+ G8 p6 _3 A% N2 o: r! j5 ^
tunnel create using br-int
3 i/ R1 H3 m1 n* Rmanagement network
$ O# M" ]1 a+ T. a' R; J% e. u6 E$ G8 `5 _
不支持data network0 i: l5 c; i* `6 o
2) Buffalo SW(个人理解是指物理的网络扩展)
' @" m/ D- h( f9 \0 Y3 Y5 o1 y) N  A3 L' v" R' R/ ^3 j9 V- r+ [# A) x
Buffalo SW is OpenWRT
6 g( V/ W4 m% r( [install OVS' @: K' V0 V3 u1 Y

& N+ K5 r! |6 q6 m7 ~# }1 \$ tBuffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)7 ]. n  p) {. i0 B( Z" N
sudo ovs-vsctl set-controller
" ]" a9 A- p2 ?+ y7 @- Q) d2 B
: I) w2 l% R# g) J$ r7 N
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 点击这里给我发消息

GMT+8, 2026-4-8 15:23 , Processed in 0.042024 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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