前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构。本文通过一些典型流程案例来分析具体网络流程过程。

0. 环境

同 学习OpenStack之(7):Neutron 深入学习之 OVS + GRE 之 Neutron节点篇 中所使用的环境。

简单总结一下:

Compute 节点上由Neutron-OVS-Agent负责:

  • br-int:每个虚机都通过一个Linux brige连到该OVS桥上
  • br-tun:转化网络packet中的VLAN ID 和 Tunnel ID
  • GRE tunnel:虚拟GRE通道

Neutron节点上:

  • br-tun/br-int:同Compute节点,由Neutron-OVS-Agent负责
  • br-ex:连接物理网卡,用于和外网通信
  • Network namespace:用于tenant 网络DHCP服务的qDHCP由Neutron-DHCP-Agent负责,和用于网络间routing的qRouter由Neutron-L3-Agent负责

2. 几个典型流程案例

2.1 流程1: 同一个host上同一个子网内虚机之间的通信过程

因为br-int是个虚拟的二层交换机,所以同一个host上的同一个子网内的虚机之间的通信只是经过 br-int 桥,不需要经过 br-tun 桥。如下图中红线所示:

2.2 流程2: 不同主机上同一个子网内的虚机之间的通信过程

过程:

1. 从左边的虚机1出发的packet,经过Linux bridge到达br-int,被打上 VLAN ID Tag

2. 到达br-tun,将VLAN ID转化为Tunnel ID,从GRE Tunnel 发出,到达另一个compute节点

3. 在另一个compute节点上经过相反的过程,到达右边的虚机

注:本配置待不久之后的实验验证。

2.3 流程3: 虚机访问外网

1. Packet离开虚机,经过Linux bridge, 到达br-int,打上 VLAN ID Tag

2. 达到 br-tun,将 VLAN ID转化为 Tunnel ID

3. 从物理网卡进入GRE通道

4. 从GRE通道达到 Neutron 节点的网卡

5. 达到跟物理网卡相连的br-tun,将 Tunnel ID 转化为 VLAN ID

6. 达到 br-int,再达到 router,router的NAT 表 将 fixed IP 地址 转化为 floatiing IP 地址,再被route 到br-ex

7. 从br-ex相连的物理网卡上出去到外网

外网IP访问虚机是个相反的过程。

2.4 流程4:虚机发送DHCP请求

过程:

1. 虚机的packet -> br-int -> br-tun -> GRE Tunnel -> eth2 ------>eth2->br-tun->br-int->qDHCP

2. qDHCP返回其fixed IP地址,原路返回

例如:在虚机(IP为10.0.22.202)启动过程中,DHCP Server (10.0.22.201)所收到的请求及其回复:

root@network:/home/s1# ip netns exec qdhcp-d24963da--481e-adf5-fe033d6e0b4e tcpdump

listening on tap15865c29-9b, link-type EN10MB (Ethernet), capture size  bytes //dnsmasq在此TAP设备上监听

07:16:56.686349 IP (tos 0x0, ttl 64, id 41569, offset 0, flags [DF], proto UDP (17), length 287)

10.0.22.202.bootpc > 10.0.22.201.bootps: [udp sum ok] BOOTP/DHCP, Request from fa:16:3e:19:65:62 (oui Unknown), length 259, xid 0xab1b9011, secs 118, Flags [none] (0x0000)

Client-IP 10.0.22.202 //虚机eth0的IP地址

Client-Ethernet-Address fa:16:3e:19:65:62 (oui Unknown)

Vendor-rfc1048 Extensions

Magic Cookie 0x63825363

DHCP-Message Option 53, length 1: Release

Client-ID Option 61, length 7: ether fa:16:3e:19:65:62 //虚机eth0的Mac地址

Server-ID Option 54, length 4: 10.0.22.201 //DHCP Server IP地址

2.5 不同tenant内虚机之间的通信

Neutron Tenant网络是为tenant中的虚机之间的通信。如果需要不同tenant内的虚机之间通信,需要在两个subnet之间增加Neutron路由。

3. 关于GRE/OVS/Neutron的一些快速结论

1. GRE 可以隔离广播风暴,不需要交换机配置chunk口, 解决了vlan id个数限制,3层隧道技术可以实现跨机房部署,但它是点对点技术,每两个点之间都需要有一个隧道,对于4层的端口资源是一种浪费;同时,在IP头中增加Tunnel ID,势必减少vm的mtu值,同样大小的数据,需要更多的ip包来传,传输效率有影响。
2. OVS:可以针对每个vm做流量限制、流量监控、数据包分析,同时可以引入OpenFlow,使控制逻辑和物理交换相分离,并且sdn controller可以实现vxlan的跨机房大二层通信,但是可能性能是个潜在问题。
3. Neutron的优点:
       (1)提供REST API
       (2)Neutron 把部分传统网络管理的功能推到了租户方,租户通过它可以创建一个自己专属的虚拟网络及其子网,创建路由器等,在虚拟网络功能的帮助下,基础物理网络就可以向外提供额外的网络服务了,比如租户完全可以创建一个属于自己的类似于数据中心网络的虚拟网络。Neutron 提供了比较完善的多租户环境下的虚拟网络模型以及 API。像部署物理网络一样,使用 Neutron 创建虚拟网络时也需要做一些基本的规划和设计。
4. Neutron的可能问题:
    (1)单点故障:Neutron节点做为network的中心控制节点,很容易导致单点故障。生产环境中HA应该是必须有的。
    (2)性能降低:network traffic经过太多的层次,latency增加。
     (3)可扩展性不够:当Compute 节点快速增加的时候,Neutron节点也需要扩展。
 

探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇的更多相关文章

  1. 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)

    继研究了Neutron之后,继续Nova的外围研究之旅.本站是研究块存储服务Cinder. 0.验证环境 环境包括: 1.一个controller节点,运行nova-api, nova-schedul ...

  2. 学习OpenStack之(6):Neutron 深入学习之 OVS + GRE 之 Compute node 篇

    0.环境 硬件环境见上一篇博客:学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境 OpenStack网络配置:一个tenant, 2个虚机 Type drive ...

  3. Neutron 理解 (3): Open vSwitch + GRE/VxLAN 组网 [Netruon Open vSwitch + GRE/VxLAN Virutal Network]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. 探索 OpenStack 之(7):Neutron 深入探索之 Open vSwitch (OVS) + GRE 之 Neutron节点篇

    0. 测试环境 硬件环境:还是使用四节点OpenStack部署环境,参见 http://www.cnblogs.com/sammyliu/p/4190843.html OpenStack配置: ten ...

  5. 探索 OpenStack 之(13):研究 Keystone

    Keystone 是 OpenStack Identity Service 的项目名称.本文就试着尽可能深入地研究 Keystone. 1. Keystone 的功能 做为 OpenStack 云系统 ...

  6. 探索 OpenStack 之(12):cinder-api Service 处理 HTTP Request 的过程分析

    本文是上一篇 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍> 的后续篇. os ...

  7. 探索 OpenStack 之(17):计量模块 Ceilometer 中的数据收集机制

    本文将阐述 Ceilometer 中的数据收集机制.Ceilometer 使用三种机制来收集数据: Notifications:Ceilometer 接收 OpenStack 其它服务发出的 noti ...

  8. 照着官网来安装openstack pike之neutron安装

    neutron组件安装分为控制节点和计算节点,还是先从控制节点安装 1.前提条件,数据库为nova创建库和账户密码来连接数据库 # mysql -u root -p MariaDB [(none)]& ...

  9. OpenStack Havana 部署在Ubuntu 12.04 Server 【OVS+GRE】(三)——计算节点的安装

    序:OpenStack Havana 部署在Ubuntu 12.04 Server [OVS+GRE] 计算节点: 1.准备结点 安装好ubuntu 12.04 Server 64bits后,进入ro ...

随机推荐

  1. VI常用的命令

    vi filename : 打开或者新建一个文件夹,并将光标置于第一行首位 I : 表示光标在当前位置编辑文本 A : 表示光标进入下以恶字符位置编辑文件 X : 每按一次删除光标所在位置的前面一个字 ...

  2. awk-笔记

    语法形式: awk [options] 'script' var=value file1 [file...] awk [options] -f scriptfile var=value file [f ...

  3. linux安装VirualBox虚拟机

    第一步:安装VNC 1. 安装vnc yum install -y tigervnc* 2.启动vncserver [root@xxx ~]# vncserver You will require a ...

  4. 【ASC 23】G. ACdream 1429 Rectangular Polygon --DP

    题意:有很多棍子,从棍子中选出两个棍子集合,使他们的和相等,求能取得的最多棍子数. 解法:容易看出有一个多阶段决策的过程,对于每个棍子,我们有 可以不选,或是选在第一个集合,或是选在第二个集合 这三种 ...

  5. Unity Shader入门

    Unity Shader入门 http://www.cnblogs.com/lixiang-share/p/5025662.html http://www.manew.com/blog-30559-1 ...

  6. [zz]如何在C语言程序中处理汉字

    学习过C语言的人也许有时会遇到这样一个问题:如何用变量存储汉字以及对这些变量进行操作.目前许多C语言参考书中都没涉及到这个问题,程序中多为处理英文变量和英文字符串,涉及到汉字的情况也大都是在print ...

  7. angular中自定义依赖注入的方法和decorator修饰

    自定义依赖注入的方法 1.factory('name',function () { return function(){ } }); 2.provider('name',function(){ thi ...

  8. eclipse自动提示功能没了的解决办法(转载)

    eclipse自动提示功能没了的解决办法 标签: eclipse联想 2012-08-09 14:32 24687人阅读 评论(7) 收藏 举报  分类: Android(38)  版权声明:本文为博 ...

  9. 物联网平台设计心得:管中窥豹之HeartBeat

    前言 在写这篇文章之前,我曾对HeartBeat做过诸多的研究,也做过诸多的项目,在这些项目中,有客户端为了维持状态,而定时向服务端发送的HeartBeat:有服务端为了维持客户端连接状态而处理Hea ...

  10. jQuery延迟加载插件(Lazy Load)详解

    最 新版本的Lazy Load并不能替代你的网页.即便你使用JavaScript移除了图片的src属性,有些现代的浏览器仍然会加载图片.现在你必须修改你的html代 码,使用占位图片作为img标签的s ...