易陆发现互联网技术论坛

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

neutron之Neutron和ONOS集成实践

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

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

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

x
Neutron和ONOS社区动态! l- t$ O! B* {5 P
& H9 c4 {9 ~4 C- A3 z
首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。
2 }6 r; F0 q* |( G. J; a. F+ _  X" e- _
Area
- }  J. r7 B' JLieutenant# l7 J& r' Q: P& e, B
IRC nick
/ y* J( Q7 r# g0 d+ _; t/ S/ pnetworking-odl2 m. W4 k4 H, c4 k4 H
Flavio Fernandes8 T$ m# H, p8 c5 c- d5 h; a& n% E8 B
Flaviof8 `# u1 x, S2 ^' ?2 }
Kyle Mestery4 J3 q- D. m; ]8 R4 \# l3 ?! C
mestery
+ O( _0 l$ j3 h( qnetworking-onos
; H) O3 e4 c# u+ @8 E0 {9 }* RVikram Choudhary
0 k: S% z# O. `vikram' z1 L5 K, J/ d8 e1 N

2 O2 G& @8 A2 L! J是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示 ' a# g- I2 Z/ R! J

, G4 u( S% a) n& p- s  n0 A+ Z# I% |2 p/ j/ q7 Z/ y/ e& |
首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。5 ^6 c' H8 }2 C$ a
5 f8 H3 K5 q: H! @
Name
: h: j4 P) z( ^; ^; e  b5 tFunctionality" N- b) f( _* X* O# C
networking-onos_: N3 {4 W  U1 h0 w3 l' y1 c5 ^
ml2
" \, y( y" E+ Y0 N2 v2 rnetworking-odl
: r) u3 k% R5 I0 E1 d: r3 zml2,l3,lb,fw) {8 M) }4 e; ~# o, f& f
9 e' k! X+ G! h+ H( O! p9 A
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。: q- v; w: f8 J2 A  K  l& Y

; v* ?+ u* m; y4 l, g2 D# S在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:7 Y/ x! w3 {; J: a

6 w3 L! o' N( Z5 |5 B" H% g+ sneutron.ml2.type_drivers =
8 N+ y" R5 u, A    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver1 y/ {+ i, r+ f8 \% `
    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver0 I2 m; F0 }5 m- p
    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
/ Y) y' ?- M5 A3 Q7 E* N    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver8 X' r1 x) b* N0 Q  o; O. E
    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
& C; X, R9 W. {8 w5 J' G7 X% B' yvxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver6 h/ Y6 e0 R7 h8 f- w
neutron.ml2.mechanism_drivers =) s% @; n' I9 h6 V' R
    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver& E3 c' s& Y( U
8 [' L& `2 b1 d6 y4 q  t. e
2.Neutron和ONOS集成实践
  ?4 H5 _3 Z! S0 b* g% [/ F: w
我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:
$ o+ ^# Y: Y( p, a( V8 {! [
& {7 r) P0 t, ^: K. X5 w, V" V+ qONOS平台" `/ {$ u, C& L1 D
OpenStack平台' H' L% @0 a' ?  f& `
Ubuntu 18.04" J) m" o8 B6 O% V/ E$ N; F: l
CentOS 7.9/ x: n" @% \% \) @$ d; _6 d
ONOS 1.3.0) o* v2 s3 G7 n4 [: {
Openstack Liberty(支持Kilo),由Rdo安装的All-in-one, B( R& U# T7 j$ W/ ~6 @
10.0.0.29
# g' |; q4 `* p) @10.0.0.19
+ {6 i/ W- y! ]' V+ }9 p
& Q3 _/ A5 h4 d2 l) g& M友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。* _; P  K: w( p# t' G6 m8 J

5 F$ N" n. K9 S6 y; E在集成之前,请确保你的相关服务是正常运行中的。如下图   _/ Q. M; V) b6 X
8 U8 J0 ?3 |$ ?/ @: H4 k* [: r
3 Z! l9 p8 H; N- F  z! r* p
1)安装networking-onos(OpenStack Controller Node)* C3 s/ r' [# g' w$ G- \' F1 l
$ H- @/ f1 n: o: e) R
# pip install networking-onos/ F5 q( s5 M) a  V
4 H, ^3 t4 I1 W( p% ?6 _
2)配置ml2_conf.ini文件(OpenStack Controller Node)+ p8 `3 g/ k+ l7 _& K
* ]+ v" i. |# m  F: O' G
# vim /etc/neutron/plugins/ml2/ml2_conf.ini
" y7 L: x' M. c, k5 H. f3 c[ml2]
/ Q4 V. e/ j& W$ Mtype_drivers = vxlan" q( r- f7 A: Q, n+ d7 D; F% k* e" C
tenant_network_types = vxlan
: n, c* a' j' J9 h+ V( U* Bmechanism_drivers = onos_ml25 }, _& R( f* R0 |: N
..., ]7 x( l% X, c4 c4 B: _: N6 ?
[ml2_type_vxlan]! ~, d% n, W' r9 d
vni_ranges = 1001:20008 ]# f4 }8 ^" t3 n7 {) L0 k+ x) r
...
/ I; r" g2 \. N! g[secutirygroup]" r; I- U$ h7 P+ S  g
enable_security_group = True
( ]. ^& @0 A8 @. ?2 p& T$ w...
' ], ^4 V8 Q3 `( t[onos]
" }4 M5 J3 a  R! x1 N; Z+ T# C( Zurl_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP
( u* v2 `+ w! `/ K( s1 r7 U) J  Yusername = karaf! A$ _' T; v; E; Y1 ^% W6 Z
password = karaf/ d. c4 B' M- q" ]  f

% g/ ^, i: `( J6 Y# r3)更新配置文件(OpenStack Controller Node)# ~! D% b; m5 B6 v2 L. U8 D
! L9 `/ k, R& q) l. f( |' G4 [$ T8 M
# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
$ p/ Z9 Y. X- J$ W/ \9 ?8 p0 O
: B( ^/ p7 O+ V. l 4)重启Neutron服务(OpenStack Controller Node)# k. [( [! x- j& P# q% n, t

- R" ^, i" i. v: \# systemctl restart neutron-server.service
1 d; O. K9 b3 h2 k2 ~! m0 W$ A: ]
注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log7 ]2 ?3 D& {& H- s- G- f

0 s' a4 Q( ~6 ~$ m7 m/ v, b5)在ONOS命令行中安装所需要的功能
$ X+ N% z5 a- ?1 n3 ?5 i: |
. h+ F5 `5 _- _) u4 |onos> feature:install onos-ovsdatabase
+ |& C# O. e. Y7 M2 ronos> feature:install onos-app-vtnrsc, r- [5 x' A6 \% t5 L
onos> feature:install onos-app-vtn; t7 a7 `, P$ {/ U, }3 B
onos> feature:install onos-app-vtnweb3 }, k  I' a4 S6 r' x& T
: L* O+ a- t! N" P
6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} + D: C3 M4 X0 S7 w* `
, k; g; i* I# V" F. [

: t  F& t  e6 q 7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。  w0 f) q  |7 b  j6 q, Y
- q: K* v. c, j% T+ ^+ \7 s
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>
+ _, b+ y  p4 I0 n0 B使用ovs-vsctl show命令,检查设置情况。% s$ i1 e/ S  L& W0 Z
# ovs-vsctl show
) G: W' r, ?. m& X$ q2924ffa8-cad5-469c-a4c6-6785e79036ac$ D' J1 X( D' L! R- G
    Manager "tcp:10.0.0.29:6640"& g8 q0 P2 g$ [6 e" r' w
9 p+ g9 D2 \3 z$ k9 [, z
8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
0 L$ N2 }, ?* r0 j1 L
4 _1 j/ t. v- V6 c
" x3 h9 l* E6 d$ ^8 @, e" T 9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出( @2 R9 ^  R: i' r0 ^

" \) d$ ]0 F% `7 o4 I; P% k* |3 J{
2 D5 `, R5 V4 z"subnets": [5 f% `5 E% b: [5 Z% X
{
1 u. t# _1 E8 t% n6 C"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",
, j$ z# O/ B0 p. p* a1 K" @"gateway_ip": "10.0.0.2",
; @7 l( j; A5 ~+ k; `9 X"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",' e# }( p$ E+ [
"name": "external_subnet",
) ^8 [1 t4 U# U' Y- ~: g  }"ip_version": "INET",
6 W" W: y* B$ |9 t$ V% i"cidr": "10.0.0.0/24",
# F3 f! f) `4 Q"shared": true,
( K( O$ x7 m+ [) _"enabled_dchp": false,
: }3 U# j$ T1 W' V. t"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",! T8 \* D* E+ R
"ipv6_address_mode": null,
/ ~7 T' G% y1 L2 y0 x# L" i5 G"ipv6_ra_mode": null,; B) H8 ^' }- v! Y" K0 J) ]
"allocation_pools": [
# E3 }+ ^6 k$ v- X, ]{$ T5 S5 p7 G( [2 x/ S
"start": "10.0.0.100",
  p) [3 ^0 L+ q0 X% ["end": "10.0.0.150"2 T' Q0 B' K8 K4 E% l6 l
}- C1 \& o9 c4 a; v
],
  K, i# k5 h7 k2 D6 ["host_routes": [ ]
+ y: G: ^2 v, P+ a+ u" `. w}. I9 F' D3 g* T2 E% {
]. ^9 [5 B' J) n. ?! g$ F+ O/ J' Q
}- t; V1 X. f/ }) I6 `

5 C- c- R& o' d: x9 u7 g1 \. T7 M10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。 " n  e5 E7 U# N  J  P
1 h4 K4 j! g6 ]8 {& ~

5 Z% W8 l' U; q# y5 ~' y 11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports
! N; Z/ s. d$ U. L$ b
+ Y/ m7 y9 Y9 Q) S; z2 Y12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui1 Q3 U8 p, U% Q0 r

2 d3 D" ^) e) h, }) o13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
1 u4 L9 M. k8 Z. }+ v5 x2 V  Z3 H0 O9 [% v2 n/ f% h
# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
( u9 r- }; }# J  CNXST_FLOW reply (xid=0x4):  R1 _- Y2 f1 x! A
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). Q' @! T4 `$ ^  z1 v2 T
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)2 r  I4 @9 \- P" p3 h1 U: `
cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
' S. O- Y( i/ w2 c  jcookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop- I7 b+ G0 M/ k9 f$ N/ R& L
cookie=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=NORMAL8 _( W5 Z% W8 d, q; m
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$ z1 z. _1 j, e0 l
cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop- b$ t' l1 n' a& Y

# O4 @( m" c' J% b$ c" f0 i* _3、目前已知的集成问题! [, @) i# m* Z  K( L' {
8 f  X. H% Y6 m# I
1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)
3 R( Z' K4 F2 r! e$ B
( U) r9 h" z# H4 Q( {! B! J. Qtunnel create using br-int& J) ]6 U# s) m! C1 R* _( B( s
management network! \8 y' j' s1 y! P1 O" ]7 u' A  a$ v

' t5 f7 W0 N+ a不支持data network" R7 M5 O; c" W) u
2) Buffalo SW(个人理解是指物理的网络扩展)! Y3 k9 M& t3 J. y% a+ g+ E

6 G. c% M6 N, p  E9 }9 d1 EBuffalo SW is OpenWRT
9 G& a" i$ H/ ]/ _3 ^, c3 x, rinstall OVS6 v- \4 u$ d# w  }6 J/ N4 X6 p

' S" f( m% Y$ C( @' _. CBuffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)! s7 S2 W/ p5 Q, A& K$ r8 ?% H
sudo ovs-vsctl set-controller
1 X0 c3 r; R6 z# c. k% P+ o5 C/ W4 g& f# [  V0 b; d+ K+ W! s
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-9 00:37 , Processed in 0.053569 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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