简单谈谈OpenStack中的网络隔离

前言

最近,关于xx公有云的用户网络,由于隔离问题引发安全讨论,大家顿时对啥“经典网络”、“VPC”等概念兴趣大增,大家的热议中多次提到AWS的VPC,亚马逊的AWS怎么搞的,我们不得而知,但是我们可以聊聊OpenStack的,毕竟它一直在模仿AWS嘛;

“隔离”啥

首先,我们先搞清楚,所谓“隔离”,到底是在“隔”什么;

我们知道,计算机网络,是分层实现的,不同协议工作在不同层,这些层的设计、制定都有国际标准,按着OSI的分层模型,共有七个层,大家在讨论的隔离,通常指的是第2层,也叫“数据链路层”;

数据链路层的网络包,也叫“帧”,我们常说的网卡的MAC地址,就是帧的地址,MAC,其实是“媒体访问控制”(media access control)的简称,这是数据链路层的一个子层;

那为什么要在这个二层上搞隔离呢?

因为二层的帧,其中一些帧的地址是广播地址,在同一个二层的设备都可以、也必须接收这些帧,交换机一般认为工作在二层,对这些广播包,也都要转发,所以二层通常被称为一个“广播域”,这就好比大家在一个教室里,都能互相看到,除非分隔到不同的教室;

OpenStack的玩法

openstack的neutron负责为虚拟机提供网络,而且openstack是假设多租户的,那多租户之间的隔离问题,它当然要提供支持,下面我们就看一下neutron是怎么实现的;

平坦网络

neutron中创建的网络是有“type”的,其中最基础的一种type就是“flat”,顾名思义,“平坦”就是指都在一个空间下,也就是没有做二层上的隔离,虚拟机都在同一个二层,同一个广播域;

从网上找了个示意图:

这种”平坦“的大二层网络,虽然实现、管理相对简单,但也会有诸多问题,除了安全方面,还有广播风暴等问题;

单个大二层网络,就好比整个学校的人都在一个大礼堂,大家都能看到,而且万一谁得了传染病,大家都被传染,要想隔离,可以把人分散到各个教室;

VLAN隔离网络

neutron中创建”vlan“这种类型的网络,就是主要使用的二层隔离方案,VLAN(虚拟局域网)本身就是交换机广泛使用的二层隔离技术;

示意图大概这样:

这就好比把整个学校的人,从大礼堂,分隔到了不同的教室,同一个教室的人互相可见,不同教室的人不可见;

但这种方案也有一定的局限性,首先管理相对麻烦,需要配合设置物理交换机,另外VLAN的可用数量有限制,VLAN的ID号仅有四千多个,我们假设每个租户分配1个VLAN,那最多也就能支持四千多个租户;

OverLay网络

overlay(覆盖)网络,所谓”覆盖“,大体上指”在一层上面覆盖另一层,也可以说是用一层载着另一层移动“,VXLAN是最常见的协议,它是把虚拟机的二层的帧,在宿主机上用UDP包裹起来,然后以宿主机的IP,必要的话,经过3层的路由,到达目的宿主机,然后再解封,把内包裹的二层帧,输送给目的虚拟机;

有点抽象?我们先看看VXLAN的包结构,就知道”包裹“是啥意思了:

那个”Inner Frame“就是被包裹的虚拟机的二层的包;

最终封装完的包,外层的源IP、目的IP地址,都是宿主机的,所以只要宿主机之间互通(3层可达),被封装的内层帧就可以被运输:

那这种方案有什么优点呢?

主要的:

vxlan的范围足够大,一千六百多万,租户随便用 因为是完全隔离的,租户可以随意定义自己的网络,哪怕和其他租户的IP段重叠都没有关系,比如上图中,租户A的网络,与租户B的网络 如果通过一定技术实现支持3层路由器,租户可以将自己的网络,随意组织自己的网络拓扑,比如上图中,租户A的两个网络,连接到一个路由器(可以是虚拟的)上

关于上面提的第三点,在neutron中大概是这样的:

VPC

最后,那到底啥是VPC呢?

很明确的告诉你,上面这个图就是VPC!

VPC(virtual private cloud),不是个技术专有名词,而是亚马逊AWS创造的一个产品层面的名词;

租户网络彻底隔离、IP段都能重叠、路由器、网络拓扑都能由自己定义,这还不是”虚拟私有云“吗!

(0)

相关推荐

  • CentOS系统中一键安装Openstack图文教程

    前言 首先找到一个国外的网站, http://openstack.redhat.com/Main_Page,进入到quickstart页面中 简单翻译如下: 用到的工具是一个被成为RDO的东东, 能够在基于RHEL内核的linux系统,如RedHat,CentOS,Scientific Linux下,快速实现三步安装.  一:安装RDO软件 sudo yum install -y http://rdo.fedorapeople.org/rdo-release.rpm 二:安装一个叫packsta

  • 详解OpenStack云平台的网络模式及其工作机制

    网络,是OpenStack的部署中最容易出问题的,也是其结构中难以理清的部分.经常收到关于OneStack部署网络方面问题和OpenStack网络结构问题的邮件.下面根据自己的理解,谈一谈OpenStack的虚拟网络.网络拓扑和网络流.个人理解有限,仅抛砖引玉,有问题请指正,谢谢. 一.相关概念和要点(可跳过) 1.OpenStack中nova-network的作用 OpenStack平台中有两种类型的物理节点,控制节点和计算节点.控制节点包括网络控制.调度管理.api服务.存储卷管理.数据库管

  • Openstack 网络知识资料详细介绍及总结

    Openstack 网络知识资料总结: Openstack 概念 我刚听说要去做 openstack 开发的时候,蛮激动的啊.虽然我不知道 openstack 是什么东西,但是我知道这个东西和云计算有关.云计算这东西,听着就高大上,各大互联网公司都有投人进去搞,所以大方向上是必须肯定的.于是我按捺不住了,想在自己的主机上部署 openstack,来体验下这个是什么东西.经过一顿折腾之后,终于在虚拟机里面用 devstack 把 openstack 给部署出来了(部署过程中,最坑的就是国内的防火墙

  • Fuel快速安装OpenStack图文教程

    1 介绍 1.1关于 Mirantis Mirantis,一家很牛逼的openstack服务集成商,他是社区贡献排名前5名中唯一一个靠软件和服务吃饭的公司(其他分别是Red Hat, HP, IBM, Rackspace).相对于其他几个社区发行版,Fuel的版本节奏很快,平均每两个月就能提供一个相对稳定的社区版. 1.2Fuel 是什么? Fuel 是一个为openstack 端到端"一键部署"设计的工具,其功能含盖自动的PXE方式的操作系统安装,DHCP服务,Orchestrati

  • 一步一步教你安装openstack(图文)

    openstack,安装的门槛比较高,而且相当麻烦,很多的安装文档作者省了不少安装步骤.这对初学的人带来了很大的麻烦,也许作者轻易节省一步,就会创成后面的安装失败.而且初学者由于对openstack不是很了解,错误无法排查,因此很多人都在中途放弃对openstack的学习.其实有一个安装工具可以快速的安装openstack,不需要了解openstack各个组件的之间的关系,只需鼠标轻轻一点,就可以完成对openstack的安装:而且还有诸多功能,如对openstack健康检查,查看节点日志等.

  • 简单谈谈OpenStack中的网络隔离

    前言 最近,关于xx公有云的用户网络,由于隔离问题引发安全讨论,大家顿时对啥"经典网络"."VPC"等概念兴趣大增,大家的热议中多次提到AWS的VPC,亚马逊的AWS怎么搞的,我们不得而知,但是我们可以聊聊OpenStack的,毕竟它一直在模仿AWS嘛: "隔离"啥 首先,我们先搞清楚,所谓"隔离",到底是在"隔"什么: 我们知道,计算机网络,是分层实现的,不同协议工作在不同层,这些层的设计.制定都有国际标

  • 简单谈谈React中的路由系统

    React中的路由系统 提起路由,首先想到的就是 ASPNET MVC 里面的路由系统--通过事先定义一组路由规则,程序运行时就能自动根据我们输入的URL来返回相对应的页面.前端中的路由与之类似,前端中的路由是根据你定义的路由规则来渲染不同的页面/组件,同时也会更新地址栏的URL.本篇文章要介绍的是React中经常使用到的路由,react-router主要使用HTML5的history API来同步你的UI和URL. react-router的最新版本是v4.1.1,由于4.0版本和之间的版本A

  • 简单谈谈JS中的正则表达式

    1.正则表达式包括两部分 ①定义正则表达式的规则: ②正则表达式的模式(i/g/m): 2.声明正则表达式 ① 字面量声明: var reg = /表达式规则/表达式模式: eg:var reg = /white/g: ② 使用new关键字: var reg = new RegExp("表达式规则","表达式模式") eg: var reg = new RegExp("white","g"): 3.正则表达式的三种模式 ① g

  • 简单谈谈Python中的json与pickle

    这是用于序列化的两个模块: • json: 用于字符串和python数据类型间进行转换 • pickle: 用于python特有的类型和python的数据类型间进行转换 Json 模块提供了四个功能:dumps.dump.loads.load pickle 模块提供了四个功能:dumps.dump.loads.load import pickle data = {'k1':123, 'k2':888} #dumps可以将数据类型转换成只有python才认识的字符串 p_str = pickle.

  • 简单谈谈python中的语句和语法

    python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句中,多条语句组成代码块,多个代码块再组成一整个程序.python的核心其实是由语句和表达式组成.所以在这里简单探讨一下python中的语句和表达式. 因为以后可能会接触到两个版本的python,所以这里讲一讲python2与python3的语句差异: 1.python2中没有nolocal语句. 2.prin

  • 简单谈谈axios中的get,post方法

    学习vue和nodejs的过程当中,涉及到了axios,今天为了测试,写了get和post两个方法来跟node服务端交互,结果因为header和参数弄了好久,在此记录一下,同时分享: 由于刚接触axios,在测试方法中,写的都是很简单的东西,不过能够实现基础功能,大神看到的话..非常欢迎指导.. //GET方法 axios.get(url, { params: { 'key': 'value' } }).then(function (response) { alert(''.concat(res

  • 简单谈谈Java中的方法和方法重载

    今天我们就讲一点内容,来说说Java中的方法和方法重载以及需要注意的一些地方: 方法: Java的方法类似与其他语言的函数,是一段用来完成特定功能的代码片段, 声明格式: [修饰符1 修饰符2 ....] ,返回值类型 方法名 (形式参数列表) { Java语句: - - -} 形式参数:在方法被调用时用于接受外界输入的数据: 实参: 调用方法时世界传给方法的数据: 返回值: 方法在执行完毕后返回给调用他的环境的数据: 返回值类型: 事先约定好的返回值的数据类型,如无返回值必须给出返回值类型vo

  • 简单谈谈MySQL中的int(m)

    我们在设计表的时候,如果碰到需要设置int(整型)的时候,通常会按照惯例(大家都这样写)设置成int(11).那么这里为什么是11呢?代表的又是什么呢? 以前我一直以为这里是在限制int显示的宽度,后来仔细研究和通过上网查询发现,事实并不是那样的. 确切的来说,这里的"宽度"只是一个"预期值",它所代表的仅仅是你在设计数据表结构时,想让该列日后显示的值宽度为多少,但是具体存入值的宽度多少不会受任何影响. 当然,它的作用不仅如此,在存入数据的时候,还是有一定区别的,这

  • 简单谈谈python中的lambda表达式

    最近在coding时发现使用lambda还是有诸多优点的,很多时候代码更整洁,更pythonic,所以在此简单总结一下 1.lambda是什么 举个简单的例子: func = lambda x: x*x def func(x): return x*x 两个func的定义是完全相同的,那两种函数定义方法配合map使用,将list中所有元素求平方,代码会是什么样的, def func(x): return x*x map(func, [i for i in range(10)]) map(lambd

  • 简单谈谈Python中的模块导入

    目录 模块与包 __import__ 模块缓存 imp 与 importlib 模块 惰性导入 总结 参考资料 本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句相关的概念.通常,导入模块都是使用如下语句: import ... import ... as ... from ... import ... from ... import ... as ... 一般情况下,使用以上语句导入模块已经够用的.但是在一些特殊场景中,可能还需要其他的导入方式.例如 Pytho

随机推荐