易陆发现互联网技术论坛

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

neutron之Neutron和ONOS集成实践

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

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

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

x
Neutron和ONOS社区动态5 D' z* A2 g5 U  }
8 `# t2 |0 d, d1 S& Z
首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。5 b2 j& y' _1 {" B! _

; Y% n* |+ K* H3 iArea
. g: K: H0 A( TLieutenant2 {# h5 W7 s% J6 H+ X
IRC nick6 D) {5 |$ J* i& W# a
networking-odl3 ?3 r2 m! \4 l% g
Flavio Fernandes
$ W5 M2 z( _( s% H2 P2 PFlaviof
/ k8 ~; C: Q4 h1 I8 d! U1 aKyle Mestery
4 z  z1 E# W" u* n1 Q- Y5 K5 `mestery6 a  W: e9 c6 x4 z$ ~$ [
networking-onos/ `2 v/ i* d$ Y) E2 A' U2 d
Vikram Choudhary/ w, l  N* W5 @
vikram
, ?' B# }8 l! W. a* H# X
5 K! R# `. ~( Q, h. Z& T0 y是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示
1 n3 x# {$ V) d; k$ K, ?" `' Z
$ g" G4 M9 T$ T# v
$ V( c# y; s( c/ o0 t) {: A* j 首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。9 }0 F6 ?* L; b, t

+ M. z0 F' }! c5 ~7 l- w! cName0 r% M. |1 q' x' p! O$ f9 P
Functionality1 G0 [# j' y* r) G9 ?# U) K
networking-onos_
# J6 c" Q/ @! C, ^  I5 F3 z# `: Zml2  _. W/ Y4 D2 c0 Z2 ?+ `. J2 W
networking-odl0 O: m& Y7 l# `
ml2,l3,lb,fw
! [) W1 G/ `( h& G7 x7 N& ]( M7 g' D! k% S/ O
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。" v" N, [# r* y# u8 z. A2 D4 `. Q
5 t, [& n; w% }" c
在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:5 v3 D- y' C% I# t7 N  q

# \+ U  B- W4 @. W/ h3 b# s! n- eneutron.ml2.type_drivers =, d9 F& n3 n8 c. ?! e, ]8 o' H
    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver' G7 a$ F9 x" E2 {
    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver( ^9 S$ V6 W5 S/ Z6 ?1 }5 u
    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver/ p5 v- ^( W0 }
    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver
: F. A9 v/ {0 m% z! e, h+ s8 |    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
) G3 O4 X0 w4 b# A0 K0 Evxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver
& m- K& d1 Z/ |1 ^" N4 V) Eneutron.ml2.mechanism_drivers =3 |5 X# U& F3 x; P+ l5 H9 p
    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver
  ?* P# R. o9 J( b6 h) k$ N0 M; Z# K: c( n5 [
2.Neutron和ONOS集成实践1 M1 ?/ f: T- \

/ ]( A2 g5 s  u6 s9 A2 ^我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:
! |, l( x0 M: `8 E) ]) B$ b/ i9 {* _1 J
ONOS平台
: @4 J# T) R% b, }6 W5 h- B2 }4 o+ c# AOpenStack平台5 ^) M$ K! l3 F
Ubuntu 18.041 o% c# h" p) z8 c. |+ P
CentOS 7.9
0 q$ C3 b# M1 O( [ONOS 1.3.0
/ o2 p- {; a" c1 j; R- E- aOpenstack Liberty(支持Kilo),由Rdo安装的All-in-one
3 K2 w$ G6 C0 y2 q  V/ S5 f' O$ U/ z10.0.0.29( p7 V6 ]. `1 E4 W/ L
10.0.0.19% t3 u1 e5 C/ ^0 B, r, K
, G% v: y% F+ _) ]
友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。9 e: U; P) u. b; L

4 ^& @% ]5 O4 V, Y" L9 B6 k在集成之前,请确保你的相关服务是正常运行中的。如下图 . [) q5 t' g4 L4 C: A9 f: P$ J+ v

7 r1 F5 W: A+ I* @& u; R# i$ _$ ?: J  M0 [( U
1)安装networking-onos(OpenStack Controller Node)
7 L7 o# B. f/ K; {1 P1 I" Z* D, ?: P- x2 u* K; ~# V6 J; y5 K
# pip install networking-onos0 |$ x+ L% d4 f5 D: x$ G
" X4 |5 c1 S% i" A4 s
2)配置ml2_conf.ini文件(OpenStack Controller Node)1 N% G2 a: g4 O% E# |' Y

( R* v3 o8 c0 g' N/ ^2 k# vim /etc/neutron/plugins/ml2/ml2_conf.ini+ i/ ^8 J" {3 @9 C: T9 f* C
[ml2]
; w  ^+ e. q- i8 J/ i) O; Wtype_drivers = vxlan
) }8 @# ?$ R% h- @& k( Ftenant_network_types = vxlan
8 j0 _- m* w/ z, b  `, \# s3 Nmechanism_drivers = onos_ml2, n* R" z8 X% J6 n
...
: f: X2 h5 w' Q9 O6 E7 |% y$ z[ml2_type_vxlan]
: q2 ^% b0 F$ ]% l' wvni_ranges = 1001:2000
; K' R3 m0 E8 e6 I8 K...  G- q) N% s# G) ]
[secutirygroup]
; O, m8 t, S2 D6 d  l1 Tenable_security_group = True1 H- y0 c& U. _3 Q# t* a
...
* J5 \! i9 Y9 o1 m" Z( n0 e[onos]
4 o8 Q$ a4 g# `6 B* V5 @4 _  K) _# p2 _( murl_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP3 c( x: g; l  k% \1 Q  v5 j
username = karaf; D4 i9 J) I; o
password = karaf
- N* u! ]7 S( f
+ \+ U3 U! K, q6 @3)更新配置文件(OpenStack Controller Node)4 a! L1 J' o5 h" j+ `

8 B1 A; C' m$ @$ X& f6 J# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head3 O8 m1 a% ^, ~. j& Z
+ j# o3 ]5 ]% x7 s2 \: ~3 w
4)重启Neutron服务(OpenStack Controller Node)
; }: V# Z2 W' F
0 H' Z: w) l2 D; I% T# systemctl restart neutron-server.service
# B! h- J2 C4 [0 a+ ~- R( @+ ?: f' o
注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log
9 J6 Q8 D( I8 D
) V+ W# v% a! L& @5)在ONOS命令行中安装所需要的功能
% k3 ?$ [; k/ x4 x! k" o4 o0 Z" j! k0 [* t, V+ p
onos> feature:install onos-ovsdatabase
$ k; I$ ]! }$ S/ w# `onos> feature:install onos-app-vtnrsc( \/ |4 {5 z/ T1 U
onos> feature:install onos-app-vtn5 ~' g& N" w+ S  A% V
onos> feature:install onos-app-vtnweb
9 h$ ^9 j. B- A3 {+ W9 U8 F* n7 {1 b
6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} : t$ \4 q9 u$ H8 m4 V! r& P

( I$ }, V. x, F9 i. n* H# Y8 @: @5 `3 `! h( u# Q. v) [
7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。% l$ t! S! L, C' b+ f' |  A4 ~7 S

& j8 i) T; }! _5 k1 Y# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p># X* U  m& c) t0 ?, I
使用ovs-vsctl show命令,检查设置情况。
3 U: R- c9 h. J' \ # ovs-vsctl show
' J- r" K4 N! C6 k2 B& K2924ffa8-cad5-469c-a4c6-6785e79036ac
+ N4 k4 D- O# C: c5 f( I    Manager "tcp:10.0.0.29:6640"5 y" T! t% m1 h" j7 M5 C, u
. {$ ]8 T$ z; Z' `
8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。 ' T) o# ?4 w7 M3 I2 x1 x. B
4 B5 s$ I+ s7 y$ X
* D. ]0 A  h. k- U0 Y2 o  ^
9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出% R! d+ j& g, b: i% l1 z& r1 W

) u1 ^: o7 v7 y5 ^0 r{  E7 p# h' S+ j" ?
"subnets": [
+ r+ x1 L; k7 J! u8 Y{
% v7 k6 g4 p& T"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",
! G7 d$ Y8 f2 X"gateway_ip": "10.0.0.2",
' \) T9 e2 b7 C5 |9 C5 m"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",
+ F' r: h9 [  h"name": "external_subnet",5 v, h- s3 L7 G2 p# W  g$ }% z9 c
"ip_version": "INET",
+ r0 d: ]/ o. \8 _"cidr": "10.0.0.0/24",1 M' Y' ?4 N0 S& D$ X5 k; Q, R
"shared": true,4 k+ U  q1 Z+ o- @
"enabled_dchp": false,: Y$ H9 m# O" }6 F
"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",
# k* {$ _8 b7 Z) N5 n& M, y; x3 o* j+ Z1 c"ipv6_address_mode": null,. Q, _; ]7 ~7 |. g; [9 t
"ipv6_ra_mode": null,
9 i+ e4 X, X5 k! c# H"allocation_pools": [2 v6 \( {4 X, q2 q
{
  Y. ^2 [% `  p. U"start": "10.0.0.100",
$ ~+ e& k# a+ B% F, @! Y- y2 _"end": "10.0.0.150"
9 j& F2 ]/ r1 m; R4 }}# s1 D! z6 O- e5 ^# `; b7 O
],
4 g9 q! t& L: Y7 J' `0 Z% R"host_routes": [ ]1 ~+ d+ o' K, c+ E% k: ~
}
' H; N, k4 `; ~# _# N' ?]
7 c2 I7 }  _+ J# v}2 q; Z2 x" v; E. [5 y+ e* L( n
* O- _7 u  {5 t
10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。 - f  r0 U. b% }
7 _! G+ T7 \) s5 r! U9 J% i

' U. r+ N  m7 U" t9 S2 i# {  h1 ] 11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports+ h) \- M5 Y$ P9 w/ N) @- Q

7 y# q% z4 P: E12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui
, C$ x* M( c5 n1 s* z, A+ K' M5 @; `" I
13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
" ~* `$ n" k2 j$ e* o" R$ @# V4 ?& J4 Y2 `
# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
* A, U* n# p& x' z5 N- j4 cNXST_FLOW reply (xid=0x4):+ j: D! w+ n8 K
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 r1 Z1 S5 b; i3 l: |( N* fcookie=0x82a481adf93d8421, duration=747.201s, table=0, n_packets=4, n_bytes=168, idle_age=424, priority=10,arp,in_port=8 actions=resubmit(,24)3 ~, E  Y8 v5 o! ]0 k- ~$ r0 z
cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
; P$ T; o- n! W; ^9 i& S0 E' l2 m2 Wcookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
9 j( m6 U& `' z" o, _# D$ Gcookie=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
8 [, o; |' w+ @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
$ i$ ^8 Z. y) ]- q6 J; g. Xcookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
9 T# G3 S- x* w( A5 P' ~
# c* n. C) V7 S6 q; N+ k  k$ F4 R3、目前已知的集成问题
9 z8 j) I) S7 E. d
6 N2 `; {. {$ N6 b7 U! a1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)5 M' u# A: G+ B* L
) C- h- P# O1 I+ b. \1 J
tunnel create using br-int
- @; B" S9 Z2 ~3 P3 B& pmanagement network
( z  G3 }, @9 V+ n
+ S6 U1 F, N% p+ [6 l不支持data network7 W" Y% P# w1 f! E! ~
2) Buffalo SW(个人理解是指物理的网络扩展)# S) K" _; K4 \- X

+ M; p" V! x9 @' cBuffalo SW is OpenWRT0 w% Q, h; _. V. a: g
install OVS# b' r! ]5 c* ]) _; C

4 p0 V2 \2 ]5 A! H* w/ KBuffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)9 X! `6 [- ?4 }5 e) G2 N
sudo ovs-vsctl set-controller
1 o  `3 E( s% \8 t
) N4 `! i4 _  X( v, U+ [1 L
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:20 , Processed in 0.051757 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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