Openstack Neutron原理1.Neutron架构Neutron是Openstack的网络组件,整体架构如下:8 H% I: M* e- W' q
' }) J, h: {3 w& i& @简单来说就是:
1、neutron通过plugin和agent提供的网络服务,提供对网络、子网、端口、防火墙等的管理。
2、plugin位于neutron server,包括core plugin和service plugin。
3、agent位于各个节点,负责实现网络服务。
4、core plugin提供L2功能,ML2是推荐的plugin。
5、使用最广泛的L2 agent是linux bridage和openvswitch。
6、service plugin和agent提供扩展功能,包括dhcp, routing, load balance, firewall等。
2.外网访问原理借助一张图说明如何使用Openstack构建虚拟网络且支持物理外网互通。
' ]5 d% L" ~/ Z9 P
为这个Tenant创建一个private network,不同的private network是需要通过VLAN tagging进行隔离的,互相之间广播(broadcast)不能到达,这里我们我们用的是GRE模式,也需要一个类似VLANID的东西,称为Segment ID
为private network创建一个subnet,subnet才是真正配置IP网段的地方,对于私网,我们常常用192.168.0.0/24这个网段
为这个Tenant创建一个Router,才能够访问外网
将private network连接到Router上
创建一个External Network
创建一个External Network的Subnet,这个外网逻辑上代表了我们数据中心的物理网络,通过这个物理网络,我们可以访问外网。因而PUBLIC_GATEWAY应该设为数据中心里面的Gateway,PUBLCI_RANGE也应该和数据中心的物理网络的CIDR一致,否则连不通。之所以设置PUBLIC_START和PUBLIC_END,是因为在数据中心中,不可能所有的IP地址都给OpenStack使用,另外的可能搭建了VMware Vcenter,可能有物理机,所以仅仅分配一个区间给OpenStack来用。
将Router连接到External Network
7 ?9 E9 j& n C, Q( n
经过这个流程,从虚拟网络到物理网络即逻辑上联通了。
基于Dashboard创建网络根据上面的原理我们基于控制台进行操作。
1.创建外网(1) 使用管理员账号进行登录,左侧菜单进入管理员->网络->网络,点击创建网络5 L4 Z' n+ w% g6 T9 M* ~, S8 u
# `- O, N: R% i: q& h(2)编辑外网信息
选择Flat类型作为供应商网络类型
/ }. g2 k9 J* d) j3 y
其中物理网络的值必须与/etc/neutron/plugins/ml2/ml2_conf.ini里面定义一致
[ml2_type_flat]flat_networks=physnet1- 1
- 2$ _/ M" U# t3 ^& P5 U9 L# C
(2)编辑外网子网信息
根据物理网络配置编辑外网的子网信息
. r" j! n* O' S2 ~6 _* A8 W* M
(3) 编辑子网详情
不需要激活DHCP,分配池的地址选择物理网络可分配的范围
( o. k& y% n( L2 k5 e3 X2.创建内网(1)使用管理员账号进行登录,通过管理员->网络->网络,点击创建网络
(2)编辑内网信息
选择VXLAN作为供应商网络类型
M4 g' G+ d p( t* D6 e* u) c( ?4 s: R7 R; H: w
(3)编辑内网子网信息
内网信息自定义即可
" i2 i! H! C& q0 O1 v7 G8 d8 z
. Z% R5 a% c+ {' j" \' e1 W(4) 编辑子网详情9 F& }! [6 [4 P J; v# Y" R
内网信息自定义即可
w6 h) A+ @+ J& f" G% e
创建完成后,可以看到两个网络信息+ C- Y s: m/ f, E' a
3.创建路由与接口(1)使用管理员账号进行登录,左侧菜单进入管理员->网络->路由,点击新建路由
外部网络选择我们上面新增的外网
# c; Z, L. a) X* x( d1 h5 S新增成功后,可以看到相关记录:
6 w! H# t" v0 L
* _2 V p' m0 \# P5 F, q2 N6 Q(2)点击名称所在列,查看具体信息如下
可以看到网关分配的IP为192.168.1.1.199
# F& V+ Q- x( m6 D
选择接口的TAB,可以看到路由目前的接口信息,状态为运行中就是正常的。
4 J' p, `- h0 y4 |# S& S2 U. M: @
; T9 ?8 e/ u( _0 J6 ^- ?) D5 i, ^(3) 在接口列表点击增加接口
选择上面新建的子网
e+ O) }) G6 w# d0 p. u3 e
- K r# Q: J+ K* L3 H新增成功后,在路由的接口列表可以看到外部网关以及内部接口的运行状态# E+ P- F. ^; t3 E. B! T( s
4.分配浮动IP为了让虚拟机能够访问物理网络,需要从外网分配一个IP
使用管理员账号进行登录,左侧菜单进入管理员->网络->浮动IP,点击分配IP给项目,资源池选择上面的外网,浮动IP可以自定义,也可以不填写,按照外网的子网分配地址池分配。
. o5 i; W% Q5 l, s8 a新增成功后,左侧菜单进入项目->网络->网络拓扑可以看到目前外网与内网的连接情况
9 A4 X( |' h1 C* B' r
5.创建安全组上面我们分配了一个浮动IP,需要定义入口安全组,实现物理网络访问虚拟网络,以ssh的22端口为例,配置一个安全组.
左侧菜单进去项目->网络->安全,点击右侧按钮``创建安全组
/ h- H6 Y+ z, W
新增安全组完成后,在该安全组所在行,点击管理规则
T* E! ?! o8 k: a5 Y9 W U# v% Z2 r
编辑规则如下,点击添加即可。
/ i9 u F& H4 w/ N) B6 r! r( B
创建虚拟机实例1.上传镜像(1) 登录后,左侧菜单进去计算->镜像,点击右侧按钮创建镜像
/ D& P7 G+ {* L: J/ f" u5 Y) U y9 g8 ~. W: j
选择本地镜像文件,编辑基本信息如下,点击创建即可。
: u K D9 w, H0 ?8 Y+ j5 |
2.创建实例(1) 登录后,左侧菜单进去计算->实例,点击右侧按钮创建实例4 `9 |5 A9 r$ i0 P
% W5 ^9 j& g- Q: K) l$ o. j
(2)选择镜像
* v0 ~9 a5 L4 ~# d
1 o! L2 R" B$ \, a! I8 V) e(3)选择实例类型 c: m& `7 f& Q! |' L
, y5 d8 Q+ M( v7 H# Z- s(4)选择网络
选择内网
) e( {( u* k; L7 g4 t$ g* N
(5)选择安全组
选择创建的22端口规则的安全组, Y$ c4 c# Q$ O8 l, {$ }
% P% l" i7 Y+ U8 i( K& H(6) 点击创建实例等待创建
3.绑定浮动IP创建成功后,在实例所在行的动作列,选择绑定浮动IP,选择上面创建的浮动IP,成功后实例的IP地址有一个内网地址跟外网地址。# T6 r8 B8 o7 N$ k0 t% d" A4 z$ ~
4.验证网络互通(1) 在物理网络通过ssh登录虚拟机
1 s/ c% W% S4 S" L5 d6 t, w1 x6 H8 V( k @& A
(2)在虚拟网络ping外部物理网络
! U( y4 V8 I' a4 `, U0 g查看路由跳转
9 Q4 c8 b% K3 n3 l网络拓扑如下:) k9 _2 M3 o% S8 G0 X