欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

简单谈谈OpenStack中的网络隔离

程序员文章站 2022-10-05 18:45:23
前言 最近,关于xx公有云的用户网络,由于隔离问题引发安全讨论,大家顿时对啥“经典网络”、“vpc”等概念兴趣大增,大家的热议中多次提到aws的vpc,亚马逊的aws怎么...

前言

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

“隔离”啥

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

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

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

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

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

openstack的玩法

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

平坦网络

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

从网上找了个示意图:

简单谈谈OpenStack中的网络隔离

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

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

vlan隔离网络

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

示意图大概这样:

简单谈谈OpenStack中的网络隔离

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

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

overlay网络

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

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

简单谈谈OpenStack中的网络隔离

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

最终封装完的包,外层的源ip、目的ip地址,都是宿主机的,所以只要宿主机之间互通(3层可达),被封装的内层帧就可以被运输: 简单谈谈OpenStack中的网络隔离

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

主要的:

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

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

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

最后,那到底啥是vpc呢?

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

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

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