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

neutron之Neutron和ONOS集成实践

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-10-8 15:46:19 | 显示全部楼层 |阅读模式
Neutron和ONOS社区动态
0 H  `( E* x% k( v& K4 D, _, k, X* x' X8 s: u. g
首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。
$ X# O, n# S! d# ?0 Y9 I' t/ R  r
! o6 l! I& c& q7 zArea# X: \, l6 Y0 Y/ k. W' I
Lieutenant* c( Q$ ~: H' s. S8 O# p
IRC nick* {4 o8 N2 Y) P& E! _$ ]/ V- q- s
networking-odl; F* u/ i6 m* _& j- _
Flavio Fernandes
6 `7 F/ v* ?9 B! A- k9 J1 N. nFlaviof% q3 t& @- u+ r) j/ d+ @) n$ V9 ?
Kyle Mestery) m' o  g) ^0 p
mestery
& s/ e! i% A+ y  v: ~& l9 }5 }networking-onos* I" [# M3 J! q% a1 Y0 Z; ?
Vikram Choudhary
7 z2 ^# G- r$ cvikram5 \' {* e; s& Y/ x! A/ P& s* h

# X! H- v( h+ Y  J# H# h4 M& t是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。 如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示 # q8 A4 `5 b: [1 [" m/ G1 t

7 T. x+ B/ ^+ v( |; V" R6 M6 V! ?  x1 O. P: I. [5 l* ~, ?( R3 u
首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。
( h* l6 m9 u' G8 G
0 A- I* W3 g; A/ H& o& [4 i3 D) BName# A7 `: f. g( H* I
Functionality6 V' [- K" u9 S, n3 Y6 b
networking-onos_
  u5 r9 ~* r8 sml2
. E  ?9 c; e5 {/ w1 t- K8 [; nnetworking-odl2 L) b2 C- a8 \* k; n  k( K
ml2,l3,lb,fw
4 p$ ~8 g9 m% [! I; s' n% E+ I. D
这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。& Z  g* _% f; K8 _1 A3 m

+ D& U& S* }- v! U在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:
) O3 i1 a3 E" L$ h+ X9 i, M* i  P5 L) [8 g
neutron.ml2.type_drivers =- z# J5 M' o$ @5 w! I& E
    flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver3 R; Z$ o5 E3 Y7 m4 R1 `
    local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver
$ Y  ~$ m1 j; _/ b$ V6 z    vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver
3 u# U+ o$ T# I0 }; q- y! D8 K1 d# o    geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver
1 X; J; Q) v- Q: V    gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver
7 K9 \% O9 R3 h. C# ]( Vvxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver
& e, N6 |' P$ Q- ~# n6 B$ fneutron.ml2.mechanism_drivers =
* j/ Q8 ~  a4 B9 B; q" ~    linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver) R! T# D9 w+ E1 v, ~* q- o
4 b; U- G( w2 _* }0 e9 }1 ]
2.Neutron和ONOS集成实践
8 u% V( j; K1 f; z9 }
& K) k7 x/ l6 z. W9 Q4 O8 c9 }我的实践环境,由VMware WorkStations 16搭建的2台VM,具体如下:% w4 A( }4 S. y' T) g& ~

5 B! l. _8 y& l8 n. LONOS平台) A: K  X  X; H5 g2 Q6 \
OpenStack平台; k, i8 X* B+ i( h+ v2 g
Ubuntu 18.04
. G$ W5 d  c5 n! O& V, ~CentOS 7.9
) Y& K+ g$ P3 H9 A+ _ONOS 1.3.0& Q" F" J0 Q, X% J- N
Openstack Liberty(支持Kilo),由Rdo安装的All-in-one
4 o" X% M9 g* a  [+ S' t) V: K10.0.0.29
0 W2 p4 L8 n- S2 }9 F' S10.0.0.19
# M$ M, T* }/ p4 g# o+ {! F4 Q/ W& P5 y: p, J# d/ r/ T! _
友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。
! S* z% h$ ~: j7 P$ i$ O5 d- y: Z4 w$ T0 K+ ?# t$ q( w( I5 W7 k" q
在集成之前,请确保你的相关服务是正常运行中的。如下图
/ V6 u, K2 p! N  F. Z, b4 T6 {# w2 u

7 Z0 u. q+ m# x! X! e& x7 u 1)安装networking-onos(OpenStack Controller Node)6 ]9 ]9 a: ]" r

5 p+ q8 A4 n- t# pip install networking-onos
! v6 l  U- @$ I/ H" k3 h- X& V& G9 |( i3 n9 T+ \
2)配置ml2_conf.ini文件(OpenStack Controller Node)
, E, W4 v3 B9 ^
5 K# T/ q/ |8 G6 Q* l/ R, L# C# vim /etc/neutron/plugins/ml2/ml2_conf.ini/ U& ?; }+ z9 L+ L) \
[ml2]
" D1 O5 S( P- g4 I8 Y# n  j* {7 u$ Ltype_drivers = vxlan
6 x3 \/ k: J, H6 stenant_network_types = vxlan. H" Z- P- }: Q/ x
mechanism_drivers = onos_ml2: H% O' p! w6 v/ ]
...* [, J$ ?: f' x( S
[ml2_type_vxlan]
/ y7 p; l. A7 G: nvni_ranges = 1001:2000
$ t1 S# v' Z, I* A% ?, c...% |( o  Y3 ^% t6 s3 I
[secutirygroup]1 j% _; [* q8 J' o+ U) v( O- s8 c
enable_security_group = True  D  l7 R, n" Z
...
% m$ U: Y# Q# @: a. f[onos]6 `4 |8 I) V; ^9 M  Y
url_path = http://10.0.0.29:8181/onos/vtn      # IP请换成你自己的ONOS_IP7 G7 z, K/ ^2 {4 q, M: v
username = karaf3 f3 ]5 ?2 R' O
password = karaf) o* @* B: y9 [2 Y8 H

5 V7 B9 X: m) q7 Q% j3)更新配置文件(OpenStack Controller Node)  l  K$ T; O- F( ^
; l& F- S8 V# y; Y0 O6 h
# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" H, g% ^: m  s. m
# U* o: ]2 e% D# v/ ~1 y# j2 @
4)重启Neutron服务(OpenStack Controller Node)
0 S6 N( x4 X6 \9 M: o" I0 J6 m( T& f  `2 e# ]) v
# systemctl restart neutron-server.service, ?5 T( d+ q4 G' T8 h* b; O! w

  S, f0 G& r3 r# A: W' A# ?注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log
/ ?# v- w& O  t+ g  S2 _( ^1 X. Q4 C& T6 j1 v; o) t2 c; ~$ O
5)在ONOS命令行中安装所需要的功能8 D! s4 L* [4 v& O
) p: S% R4 |% |) K( q
onos> feature:install onos-ovsdatabase$ J  f$ ?8 c8 D, W) O$ b$ S
onos> feature:install onos-app-vtnrsc4 [4 Z  e6 ^) X+ I0 \$ f
onos> feature:install onos-app-vtn
4 j7 G% W4 u9 W/ {/ lonos> feature:install onos-app-vtnweb. Y' {) i$ u% c

5 f. ~+ x; J0 `" p/ w  Q6)检查ONOS VTN 功能 浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 你会得到一个如下面一样的空的json输出 {"subnets":[]} ' C% A5 J0 P: _$ u! Z0 q
: @& B: H: M2 f: ]2 E) ]7 t

2 V9 t+ ?6 C; c4 K6 s/ d 7)设置网桥连接(OpenStack Network/Compute Nodes) 如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。
6 ^6 C. y1 i% O, E, y+ @" [; h7 Z' e7 b, N7 X& q
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>
6 S2 \" ^# k' W! f% G. N) \使用ovs-vsctl show命令,检查设置情况。
, e2 m" @: p" j; s$ w3 i # ovs-vsctl show
) }' V) ^# ^- N$ d2924ffa8-cad5-469c-a4c6-6785e79036ac
& l, s6 A# Z0 {9 V% V+ @    Manager "tcp:10.0.0.29:6640"
& \' v, R# O+ L2 R$ D1 v! R! v% d; \, V1 g9 p+ T7 ~. H. r
8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。
8 u$ l" u) U( x8 I$ O& v" L; N6 b( l" \, E/ G5 S4 V* r. _

  {* |. ]  \4 }  v 9)使用REST client检查REST。这里,我使用的是Google的Postman插件。 输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP 正常情况下,你应该得到如下输出
' n2 n% d9 |. d
+ G- N% z5 d' l9 Z+ R! i! Y{
! S0 ^3 w) q0 q5 _* J. ~3 q"subnets": [% l% `1 Z6 q4 N: ^9 a
{' C8 A) U0 z  G( {: j3 v( \
"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",: k+ }! h! g9 W
"gateway_ip": "10.0.0.2",
+ q" B; E( M6 R% b"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",) v2 R4 d& u9 L- p9 d
"name": "external_subnet",
  r0 W% U1 g2 ~4 n! L" P) }"ip_version": "INET",% {+ n6 o* w' G9 i/ o
"cidr": "10.0.0.0/24",
/ i9 n: c* q, M  d+ s5 n7 J% X"shared": true,4 q# ?5 _) `: T7 t& I
"enabled_dchp": false,
3 E. K* Q* _" T4 }" d; X"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",; i+ H2 o8 D8 t- T. T" {8 {; O
"ipv6_address_mode": null,1 p. x" u* e/ `6 ]1 f: F
"ipv6_ra_mode": null,. t: C& t7 v3 Q
"allocation_pools": [1 ?8 f$ L" g" F! O
{5 D- N2 g" t: h% X  w( [) C
"start": "10.0.0.100",  i  T! o0 q- D5 x
"end": "10.0.0.150"
/ E; D$ A# s/ u& d+ ?}, N6 }! Y1 E2 ?4 S/ j
],. u$ P. B- L$ g$ w2 i0 P
"host_routes": [ ]
3 H( E2 Q! q# G6 D" a/ w}% x& ?3 S! d4 S) G4 f+ @* Q  g# o
]
4 Y4 e2 o8 U& X4 _$ f}- Z  K; U. g1 @) d6 z5 m
7 H5 b0 Z9 f7 S; M" [9 f5 l# ]7 V
10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。 4 a8 j( a: [9 G
; _+ h6 E) Z$ u9 X, S
! m4 R5 @6 x9 J& ?5 K2 Q6 o
11)使用REST Client,使用GET方法获取REST Port http://10.0.0.29:8181/onos/vtn/ports# a/ p# ?1 \: o9 A
8 ?* q' |5 C4 Q! W8 U
12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int http://10.0.0.29:8181/onos/ui
) q# m4 V. v9 G# R: c; @- L* D
1 h4 v( ^; t# E6 c: D; A# x13)Flow验证 由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。 由于,我部署的是all-in-one平台,因此运行一次即可。
* D) e. y; t5 C/ @7 t
! I/ Y% |" h, h% g$ Z0 W4 i0 D. r# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13
: l5 X2 }) b/ F" ?7 INXST_FLOW reply (xid=0x4):, Q+ {$ e: |/ P( I7 N& L) A+ 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). P; |/ `* R. S/ o- u, O+ x
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)
& b9 U3 E: G( V# }6 z& Ycookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL
% M  I) ^8 ]* |% }9 Icookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop
& w% D' O! M+ k( G  rcookie=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* n: o: k% l5 K. o2 P
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
. t7 s& Q. [4 A  b  x1 \" ?cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop2 P/ E; y/ @6 J3 J, c3 b9 ~

7 x) q5 K  C( J3、目前已知的集成问题7 l0 X4 b# D' B4 A) A( E2 f; n

, J) p6 p7 Y* F/ x9 y8 G1) 不支持br-tun onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)
: s2 ^2 O% ^9 i. ~2 G5 V
" G: q- i1 g2 u( itunnel create using br-int4 c% {; P& `$ X& o3 J
management network
( @  s% K7 T5 |4 D& B+ \4 Y! K% P+ p# `2 Z
不支持data network! A, P5 _$ c$ t) z% J
2) Buffalo SW(个人理解是指物理的网络扩展)5 H& _6 R2 `9 D. p& z

3 \, C! m' ~0 T5 Z! a- iBuffalo SW is OpenWRT
' y3 @5 n# g9 ?; T8 O# ?, I3 minstall OVS$ N5 C5 R0 U1 V9 T) P
6 w: U# n" d( e6 k3 p
Buffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)* c) j* g2 G% Z4 |9 i3 |+ v1 |& q9 C( |
sudo ovs-vsctl set-controller; B) H- d' |. S+ ?- |
3 `% \& K! {! z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 05:32 , Processed in 0.017136 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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