分享

openstack Neutron入门

pig2 发表于 2015-3-19 17:02:02 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 3 90591
本帖最后由 pig2 于 2015-4-3 15:52 编辑
问题导读

1.什么是neutron?
2.neutron能干什么?
3.Neutron包哪些组件?
4.Neutron几种网络模式、几种ip?





Neutron是什么?


openstack的网络组件
Neutron能干什么?


Neutron: 管理虚拟环境下的网络


基础网络概念

1.什么是L2,L3
openstack中我们经常看到L2、L3那么,它的作用是什么?

L2其实是指七层网络协议中的第二层数据链路层,它的传输是以mac地址为基础

L3指网络层:是以ip地址为基础
网络层属于OSI中的较高层次了,从它的名字可以看出,它解决的是网络与网络之间,即网际的通信问题,而不是同一网段内部的事。网络层的主要功能即是提供路由,即选择到达目标主机的最佳路径,并沿该路径传送数据包。除此之外,网络层还要能够消除网络拥挤,具有流量控制和拥挤控制的能力。
个人总结:数据链路层数据传输在寻找mac地址,网络层数据传输则是寻找ip

2.交换机、路由器、DHCP

什么是交换机:
工作在数据链路层,交换机拥有一条很高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口,目的MAC若不存在,广播到所有的端口,接收端口回应后交换机会“学习”新的MAC地址,并把它添加入内部MAC地址表中。

什么是路由器
为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet 的主体脉络,也可以说,路由器构成了Internet的骨架。它的处理速度是网络通信的主要瓶颈之一,它的可靠性则直接影响着网络互连的质量。因此,在园区网、地区网、乃至整个Internet研究领域中,路由器技术始终处于核心地位,其发展历程和方向,成为整个Internet研究的一个缩影。

什么是DHCP
在一个使用TCP/IP协议的网络中,每一台计算机都必须至少有一个IP地址,才能与其他计算机连接通信。为了便于统一规划和管理网络中的IP地址,DHCP(Dynamic Host Configure Protocol,动态主机配置协议)应运而生了。这种网络服务有利于对校园网络中的客户机IP地址进行有效管理,而不需要一个一个手动指定IP地址。

3.什么是iptables
  防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘


4.什么是Dnsmasq
提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。

5.混杂模式(Promiscuous Mode)
是指一台机器能够接收所有经过它的数据流,而不论其目的地址是否是他。

6.什么是网络叠加模式
1.一个数据包(或帧)封装在另一个数据包内;被封装的包转发到隧道端点后再被拆装。
2.叠加网络就是使用这种所谓“包内之包”的技术安全地将一个网络隐藏在另一个 网络中,然后将网络区段进行迁移。

7.什么是VLAN
VLAN,是英文Virtual Local Area Network的缩写,中文名为"虚拟局域网", VLAN是
一种将局域网(LAN)设备从逻辑上划分(注意,不是从物理上划分)成一个个网段(或者
说是更小的局域网LAN),从而实现虚拟工作组(单元)的数据交换技术。
VLAN这一新兴技术主要应用于交换机和路由器中,但目前主流应用还是在交换机之中
。不过不是所有交换机都具有此功能,只有三层以上交换机才具有此功能,这一点可以查
看相应交换机的说明书即可得知。



8.什么是VXLAN
VXLAN全称Virtual eXtensible LAN,是一种覆盖网络技术或隧道技术。VXLAN将虚拟机发出的数据包封装在UDP中,并使用物理网络的IP/MAC作为outer-header进行封装,然后在物理IP网上传输,到达目的地后由隧道终结点解封并将数据发送给目标虚拟机。

9.什么是GRE
GRE 是 L3 层的遂道技术,本质是在遂道的两端的 L4 层建立 UDP 连接传输重新包装的 L3 层包头,在目的地再取出包装后的包头进行解析。

10.什么是Tap/Tun
在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。

11.什么是网桥

网桥工作在数据链路层,将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)。它可以有效地联接两个LAN,使本地通信限制在本网段内,并转发相应的信号至另一网段,网桥通常用于联接数量不多的、同一类型的网段。
12.什么是namespace
namespace划分隔离不同租户的网络的,同一个租户的同一内网的虚拟机连接同一个namespace里面。

13.什么是Open vSwitch
Open vSwitch的目标,是做一个具有产品级质量的多层虚拟交换机。
OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。
OpenvSwitch的组成
ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-based switching。
ovsdb-server:轻量级的数据库服务,主要保存了整个OVS的配置信息,包括接口啊,交换内容,VLAN啊等等。ovs-vswitchd会根据数据库中的配置信息工作。
ovs-dpctl:一个工具,用来配置交换机内核模块,可以控制转发规则。
ovs-vsctl:主要是获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库。
ovs-appctl:主要是向OVS守护进程发送命令的,一般用不上。
ovsdbmonitor:GUI工具来显示ovsdb-server中数据信息。
ovs-controller:一个简单的OpenFlow控制器
ovs-ofctl:用来控制OVS作为OpenFlow交换机工作时候的流表内容。

OpenvSwitch简单命令:

ovs-vsctl show 查看状态




更多内容:

OVS操作总结

openvSwitch安装与使用

Open vSwitch 使用

基于 Open vSwitch 的 OpenFlow 实践【教程】

#######################################

开发人员必读openstack网络基础1:什么是L2、L3

开发人员必读openstack网络基础2:交换机、路由器、DHCP

开发人员必读openstack网络基础3: iptables详解

开发人员必读openstack网络基础4:Dnsmasq、网络混杂模式

开发人员必读openstack网络基础5:网络叠加模式VLAN、VxLAN、GRE

开发人员必读openstack网络基础6:什么是Tap/Tun、网桥

开发人员必读openstack网络基础7:到底什么是Open vSwitch





openstack Neutron网络

1.Neutron 早期网络解决方案


•Flat模式
1)指定一个子网,规定虚拟机能使用的ip范围,也就是一个ip池(

  • 分配ip不会超过这个范围,也就是配置里面的fixed_range,比如10.0.0.1/27【ip有4段、32位,27表示前面的ip二进制表示的前27位是网络号,然后后面5位是主机号】,那么可用ip就有32个;
  • 这个网络是可以改变的,比如配置好节点nova.conf和interfaces后,nova-manage network delete 10.0.0.1/27 1 32;
       nova-manage network create192.168.1.0/24 1 255
);
2)创建实例时,从有效ip地址池接取一个IP,为虚拟机实例分配,然后在虚拟机启动时候注入虚拟机镜像(文件系统);
3)必须手动配置好网桥(br100),所有的系统实例都是和同一个网桥连接;网桥与连到网桥的实例组成一个虚拟网络,nova-network所在的节点作为默认网关。比如flat_interface=eth1;eth1的ip为10.0.0.1,其它网络ip在10.0.0.1/27内。flat interface-->br100-->flat network
4)此后,网络控制器(nova-network节点)对虚拟机实例进行NAT转换,实现与外部的通信。
注意:目前好像配置注入只能够对Linux类型的操作系统实例正常工作,网络配置保存在/etc/network/interfaces文件。

flat.png


Flat 模式是最简单的一种联网模式。每个实例接收一个来自池的固定 IP。所有实例均默认附加到相同的桥 (br100)。桥必须进行手动配置。联网配置在实例引导前插入到实例中。在这种模式中,没有浮动 IP 特性。

•Flat DHCP模式
与Flat模式一样,从ip池取出ip分配给虚拟机实例,所有的实例都在计算节点中和一个网桥相关。不过,在这个模式里,控制节点做了更多一些的配置,尝试和以太网设备(默认为eth0)建立网桥,通过dhcp自动为实例分配flat网络的固定ip,可以回收释放ip。
1)网络控制器(运行nova-network服务的节点)运行dusmasq作为DHCP服务器监听这个网桥;
2)实例做一次dhcp discover操作,发送请求;
3)网络控制器把从一个指定的子网中获得的IP地址响应给虚拟机实例;
4)实例通过网络控制器与外部实现互相访问。

1.png


  1. 这种模式下与 Flat 模式不同的地方在于有一个 DHCP 进程,每一个运行 nova-network 进程的节点(网络控制节点/nove-network 主机)就是一个单独的网络。Nova 会在 nova-network 主机建立网桥(默认名称 br100,配置项 flat_network_bridge=br100),并给该网桥指定该网络的网关 IP,同时 Nova 在网桥处起一个 DHCP 进程,最后,会建立 iptables 规则(SNAT/DNAT)使虚拟机能够与外界通信,同时与一个 metadata 服务器通信以取得 cloud 内的信息。
  2. 计算节点负责创建对应节点的网桥,此时的计算节点网卡可以不需要 IP 地址,因为网桥把虚拟机与 nove-network 主机连接在一个逻辑网络内。虚拟机启动时会发送 dhcpdiscover 以获取 IP 地址。虚拟机通往外界的数据都要通过 nova-network 主机,DHCP 在网桥处监听,分配 fixed_range 指定的 IP 段。
复制代码



•VLAN网络模式
OpenStack的默认网络管理模式,没有设置--network_manager=nova.network.manager.FlatDHCPManager或者FlatManager的时候默认为vlan。为了实现多台机器的安装,VLAN网络模式需要一个支持VLAN标签(IEEE 802.1Q)的交换机(switch)。
在这个模式里,为每个项目创建了VLAN和网桥。所有属于某个项目的实例都会连接到同一个VLAN,必要的时候会创建Linux网桥和VLAN。
每个项目获得一些只能从VLAN内部访问的私有IP地址,即私网网段。每个项目拥有它自己的VLAN,Linux网桥还有子网。被网络管理员所指定的子网都会在需要的时候动态地分配给一个项目。
1)网络控制器上的DHCP服务器为所有的VLAN所启动,从被分配到项目的子网中获取IP地址并传输到虚拟机实例。
2)为了实现用户获得项目的实例,访问私网网段,需要创建一个特殊的VPN实例(代码名为cloudpipe,用了创建整数、key和vpn访问实例)。
3)计算节点为用户生成了证明书和key,使得用户可以访问VPN,同时计算节点自动启动VPN。
4)vpn访问。

2.png


VLAN模式的目的是为每个项目提供受保护的网段,具有以下特点:
  • NAT实现public ip
  • 除了public NAT外没有其它途径进入每个lan
  • 受限的流出网络,project-admin可以控制
  • 受限的项目之间的访问,同样project-admin控制
  • 所以实例和api的连接通过vpn



Flat与vLAN的比较
在两种Flat模式里,网络控制器扮演默认网关的角色,实例都被分配了公共的IP地址(扁平式结构,都在一个桥接网络里)。


vLAN模式功能丰富,很适合提供给企业内部部署使用。但是,需要支持vLAN的switches来连接,而且相对比较复杂,在小范围实验中常采用FlatDHCP模式。
实例操作区别:
VLAN 模式
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。VLAN 是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。
VLAN 模式与 Flat 模式的区别
在 Flat 模式下,管理员的工作流程应该是这样的:
1.为所有租户创建一个 IP 池:
  1.   nova-manage network create --fixed_range_v4=10.0.0.0/16 –label=public
复制代码
2.创建租户
3.租户创建虚拟机,为虚拟机分配 IP 池中的可用 IP

在 VLAN 模式下流程如下:

创建新的租户,并记下租户的标识
1.为该租户创建独占的 fixed_ip 段:
  1. nova-manage network create --fixed_range_v4=10.0.1.0/24 --vlan=102  --project_id="tenantID"
复制代码
2.租户创建虚拟机,从租户的私有 IP 段内分配 IP 给虚拟机
3.因此,与 Flat 模式相比,VLAN 模式为网络增加了:将网络与租户关联和为网络分配一个 VLAN 号。

1.png

两种ip:

固定IP(Fixed-IP):分配给虚拟机实例使用
浮动IP(FloatingIP):分配给虚拟机实例的外网地址,通过NAT方式实现。

三节点网络介绍及插件分布

113053D91-0.png


分三个网络:

External Network/API Network,这个网络是连接外网的,无论是用户调用Openstack的API,还是创建出来的虚拟机要访问外网,或者外网要ssh到虚拟机,都需要通过这个网络
Data Network,数据网络,虚拟机之间的数据传输通过这个网络来进行,比如一个虚拟机要连接另一个虚拟机,虚拟机要连接虚拟的路由都是通过这个网络来进行
Management Network,管理网络,Openstack各个模块之间的交互,连接数据库,连接Message Queue都是通过这个网络来。


Controller节点:
neutron-server,用于接受API请求创建网络,子网,路由器等,然而创建的这些东西仅仅是一些数据结构在数据库里面



Network节点:
neutron-l3-agent,用于创建和管理虚拟路由器,当neutron-server将路由器的数据结构创建好,它是做具体的事情的,真正的调用命令行将虚拟路由器,路由表,namespace,iptables规则全部创建好
neutron-dhcp-agent,用于创建和管理虚拟DHCP Server,每个虚拟网络都会有一个DHCP Server,这个DHCP Server为这个虚拟网络里面的虚拟机提供IP
neutron-openvswith-plugin-agent,这个是用于创建虚拟的L2的switch的,在Network节点上,Router和DHCP Server都会连接到二层的switch上



Compute节点:
neutron-openvswith-plugin-agent,这个是用于创建虚拟的L2的switch的,在Compute节点上,虚拟机的网卡也是连接到二层的switch上


#################################################################
网络模型比较

OpenStack nova-network 网络模型
在 OpenStack 网络组件没有独立出来之前,OpenStack 最初的 nova-network 网络模型
image2.png


Nova-network网络的缺点:
存在单一网络瓶颈,缺乏可伸缩性
缺乏合适的多租户隔离。
不支持floating ip

为什么创建Neutron项目?
  • 更丰富的拓扑结构
nova-network只提供了一组静态的网络拓扑,所以创建Neutron的动机之一就是提供创建丰富的拓扑结构的能力,包括多层网络,以及重建现实世界的拓扑结构。
  • 具体技术不可知性
nova-network只提供了静态的部署选项,只有VLAN可以使用,而VxLAN, GRE等技术也是用户所需要的。
  • 可扩展性OpenStack
网络应提供易于扩展的能力,方便各厂商进行支持。
  • 高级服务的支持
nova-network中提供的唯一的高级服务是cloudpipe,为tenant提供VPN服务。Neutron提供LBaaS,VPNaaS,FWaaS。


OpenStack Neutron 网络模型
OpenStack nova-network 独立成为单独的组件 Neutron 后,形象的网络模型的多平面网络、混合平面私有网络。如图 3,图 4,图 5,图 6。
图 3. 多平面网络

image3.png
1.支持vlan
2.不支持floating ip



图 4. 混合平面私有网络

image4.png
1.具有两个ip
2.支持了floating ip

图 5. 通过私有网络实现运营商路由功能

image5.png

1.增加Provider Router
2.但是租户不能定义自己的路由


图 6. 通过私有网络实现每个租户创建自己专属的网络区段
image6.png

1.租户定义自己的网络
2.sdn网络比较灵活





2.Neutron功能

Neutron 网络创建过程
Neutron 网络目的是为 OpenStack 云更灵活地划分物理网络,在多租户环境下提供给每个租户独立的网络环境。另外,Neutron 提供 API 来实现这种目标。Neutron 中用户可以创建自己的网络对象,如果要和物理环境下的概念映射的话,这个网络对象相当于一个巨大的交换机,可以拥有无限多个动态可创建和销毁的虚拟端口。在 Horizon 上创建 Neutron 网络过程如下:
  • 首先管理员拿到一组可以在互联网上寻址的 IP 地址,并且创建一个外部网络和子网。
  • 租户创建一个网络和子网。
  • 租户创建一个路由器并且连接租户子网和外部网络。
  • 租户创建虚拟机。


1.png

创建虚拟网络、子网、路由、端口

网络Network
一个L2二层网络单元
租户可通过Quantum/Neutron API 创建自己的网络
子网Subnet
一段IPV4/IPV6地址段
为Instance提供私网或公网地址
路由器Router
三层路由器
为租户的Instance提供路由功能
端口Port
虚拟交换机上的端口
管理Instance的网卡


openstack Neutron组成

Inside-the-Architecture-of-Neutron.png


Neutron Server
实现Neutron API和API扩展
管理Network,subnet,port
管理port的IP地址
ML2 agent
运行在每个计算节点上(compute node)
连接虚拟机到网络端口
DHCP agent
负责DHCP配置,为虚拟机分配IP
开始/停止dhcp服务器In multi-host mode, run on each compute node (deferred)
Start/stop dhcp server
Maintain dhcp configuration
L3-agent
负责公网浮动ip地址和NAT
负责其他三层特性,例如负载均衡等
每个network对应一个L3 agent
Metadata-agent
提供元数据服务Neutron L3-agent,dhcp-agent, nova metadata API server





Neutron原理



1130532H4-1.png



API client:
租户例如admin、demo租户(个人创建)创建私有网络、外部网络会使用各种命令、界面操作
比如创建网络
  1. neutron net-create ext-net --router:external True \
  2.   --provider:physical_network external --provider:network_type flat
复制代码
创建路由
  1. neutron router-create demo-router
复制代码

Neutron server

提供Neutron API->插件实现->Nova compute创建网卡、路由等等


Neutron插件

Open vSwitch
Linux Bridge
Cisco NX1000
Nicira NVP
Ryu
NEC OpenFlow
Floodnight







网络与表的关系
1.png




#####################################################
Neutron 所做的工作分析

1.查看ovs:
  1. ovs-vsctl show
复制代码

1.png


2.查看命名空间
  1. ip netns show
复制代码
2.png

3.查看路由

  1. ip netns exec qrouter-6a4fc6ce-4830-4849-b634-a5b9e149919f /bin/bash
复制代码



  1. ip addr
复制代码
3.png


  1. netstat -rn
复制代码

chakanip tables.png






  1. ps -ef | grep dnsmasq
复制代码
注释:
DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。

nterface=lo --pid-file=/var/lib/neutron/dhcp/bdefa006-c9d0-4a45-a865-d7bfe3b84b01/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/bdefa006-c9d0-4a45-a865-d7bfe3b84b01/host --addn-hosts=/var/lib/neutron/dhcp/bdefa006-c9d0-4a45-a865-d7bfe3b84b01/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/bdefa006-c9d0-4a45-a865-d7bfe3b84b01/opts --leasefile-ro --dhcp-range=set:tag0,192.168.1.0,static,86400s --dhcp-lease-max=256 --conf-file=/etc/neutron/dnsmasq-neutron.conf --domain=openstacklocal
root     33961 33209  0 21:21 pts/0    00:00:00 grep --color=auto dnsmasq


通过系统日志,检测运行运行
  1. tail -f /var/log/syslog
复制代码








已有(3)人评论

跳转到指定楼层
chistpest 发表于 2015-11-23 11:09:37
谢谢搂住,学习了
回复

使用道具 举报

jiangttyy 发表于 2016-1-12 11:35:36
你好,我按照官在openstack集成ryu。但是重启neutron报错。
neutron/server.log:TRACE neutron ValueError: Multiple plugins for service L3_ROUTER_NAT were configured
我的neutron.conf:
          core_plugin = ryu        service_plugins = router
请问是哪地方错了?能给点思路吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条