让人懵懂的云网络,里面原来是这些

Posted vigor2323

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让人懵懂的云网络,里面原来是这些相关的知识,希望对你有一定的参考价值。

在云里面,虚机是虚拟出来的,容器是虚拟出来的,存储是虚拟出来的,网络也是虚拟出来的。

很多人不明白,网络是怎么虚拟出来的?都虚拟了什么?

本文大致讲一下云内的网络是什么样的。

注:本文是针对IT人的科普文章,读者最好有一定的网络基础知识,比如最好知道这些术语:交换机、路由器、网关、负载均衡。 注:本文只是帮助建立起最基本的概念,所以无意说太多。

让人懵懂的云网络

一、云网络里都有啥

我们先从最能直观感受的VPC来说,然后说说里面的子网和其它。

1、VPC:用户拥有的网络

VPC(Virtual Private Cloud)的正规叫法是“虚拟私有云”,但更多被人们称为“虚拟私有网络”或“虚拟网络”。

之所以这么叫,是因为VPC给了用户一个完整独占的网络(Network),然后在这个网络上,用户创建子网、VM、存储等虚拟资源,才形成一个私有的云。

不同的VPC在网络上是完全隔离的,他们可以使用同样的IP段,而不用担心IP冲突的问题。

创建VPC很容易,比如在AWS,点击“创建VPC”就可以了。

在AWS创建一个VPC

在某云平台,创建VPC的设置界面为:

在某平台创建VPC

可以看到,里面要填的网段地址,是所有可能的私网IP网段,虽然都在一个云里,你完全不用考虑别人是不是已经占用了什么网段。你只需要考虑的是:如果你申请了多个VPC,而且又要它们互通,那就要规划一下,不要让它们有IP冲突。

创建VPC时要选择的“地域”,就是人们常说的Region,是指一朵云内的某个地域(通常是不同物理地点,比如北京、上海、深圳、杭州等地)。

一朵云里可以有若干个Region,不同Region的物理资源(计算、存储、网络)是完全独立和不共享的。

一个Region里面可以创建多个VPC。

一个VPC内又可创建多个子网(Subnet)。

一个子网内,可以有多个虚机(VM)。

在一些云平台里,如果你不创建VPC而是直接申请虚机,云平台会自动给你创建VPC及子网。

2、子网:虚机的栖息地

子网(Subnet)独占VPC中的一个IP地址段,和同一VPC中其他子网不共享。

虚机(VM)总是位于某个子网,并从中获得IP地址。一个子网内的多个VM可以分布在多台宿主机上。

创建子网很简单,选择所在的“可用区”,定义IP段(即CIDR)和网关地址就可以了。

创建子网

这里面又出现一个新概念:可用区,这就是人们常说的AZ(Available Zone)。

可以简单将AZ理解为机房,即一个Region有多个机房,每个机房就是一个AZ。不同AZ使用不同的电力和制冷,使用独立的计算、存储和网络资源(但网络是互通的)。这样,即便一个AZ不可用了,另一个还是可用的。

一个子网内的不同虚机,可以在一个AZ中,也可以在不同的AZ中。

下图示意了Region、AZ、VPC、子网的简单逻辑关系。

Region、AZ、VPC、Subnet的关系

子网内的VM缺省是可以互相通信的,原因是它们都接在虚拟交换机vSwitch)上。

具体而言,VM通过虚拟网卡(vNIC)和虚拟网线(veth pair)接在vSwitch的虚拟端口(vPort)上。

在有的云平台上(比如阿里云),并不向用户展示子网的概念,而是直接用虚拟交换机指代子网。

VPC、子网、vSwitch和VM的简单逻辑关系示意如下:

VPC、子网、vSwitch及VM

vSwitch是由OVS(Open vSwitch)技术实现的,OVS是分布式技术,分布在多台宿主机上。

OVS提供分布式虚拟交换机功能

注:本文主要介绍的是VM,对于容器,可以和VM一样,获得独立的同子网IP,也可以规划新的IP段,本文不再深入介绍,可参考文末链接17。

子网内部的通信就是二层通信,如果要和子网外部通信,就需要虚拟路由器vRouter)了。

3、虚拟路由器:子网和外部通信的途径

在同一子网内的VM,都是在二层通信的。当子网内VM需要访问其他子网(同一VPC或是不同VPC)的VM,或者访问外部网络,就需要三层互通。

虚拟路由器vRouter)就是干这事的,还记得创建子网时要填的那个“网关地址”吧,“网关地址”就是vRouter的一个接口地址。

创建VPC时,云平台会自动给你一个vRouter,不用专门去创建这个。

和vSwitch一样,vRouter也是通过虚机实现的;而且和OVS一样,vRouter也有分布式解决方案,叫DVR(Distributed Virtual Router)。

VPC由于是虚拟私有网,所以VPC之间天生就是互相隔离的,想让两个VPC互通,需要在它们之间建立“对等连接”,然后就能互通了。当然,前提是两个VPC的地址空间没有重叠。

通常情况下,“对等连接”不能跨Region,如果一个VPC要连接不同Region的另一个VPC,要在云平台中配置“云连接”来实现,这个我们后面会讲。

比如在某平台,建立“对等连接”,选择要互通的VPC即可;

创建VPC示意

虚拟路由器示意

刚才说的都是互通,下面我们看看怎么隔离。

4、网络ACL和安全组:云原生的安全控制

云网络内置了两种比较简单灵活的安全控制方法,一种是针对子网的网络ACL,一种是针对虚机的安全组。两者的控制位置和方法略有不同,可以组合使用。

比如可以对某子网建立如下网络ACL规则,拒绝所有对TCP 445端口的入站访问,也即,没有任何流量可以访问该子网内任一VM的TCP 445端口。

拒绝所有445端口的TCP入站连接

从逻辑拓扑上讲,网络ACL位于路由器和子网之间。

网络ACL的逻辑示意

另一种隔离机制是安全组

用户可以建多个安全组,每个VM可以选择划入多个安全组,然后该VM就受这些安全组策略的保护了。

将某VM实例绑定到某安全组上

安全组Security Groups)可以指定具体的入向和出向流量规则,如下图所示。

新建安全组规则

一个安全组里的VM,可以不在一个子网里,也可以不在一个VPC中,如下图所示。

安全组逻辑示意

简单地说,网络ACL是针对子网的,安全组是针对虚机的。

安全组以前多使用Linux bridge中的iptables实现,现在多使用OVS的流表技术实现。

在有的云平台中,将网络ACL和安全组合二为一提供给用户,不再区分这两种概念。

5、微隔离:更精细更通用的隔离

微隔离(Micro-Segmentation)是更细粒度的网络隔离技术,能够对物理机、虚拟机、容器之间东西流量进行隔离。它的原理是安装agent,然后通过主机防火墙(如iptables)进行控制。对于物理机和虚拟机,这很容易做到,对于容器,agent以k8s网络插件的形式出现,实现对各容器的网络转发和控制。

微隔离主要分为策略控制中心和策略执行单元,前者是大脑,下发策略,后者执行策略。前者实现可视化和集中管理能力,按角色、业务功能等多维度的标签对需要隔离对象进行分组,后者执行流量监测和隔离。

不过,要了解一点,微隔离并不是云厂商提供的服务,也并不是云原生的,通常是第三方实现的。

6、vFW和vLB:虚拟防火墙和虚拟负载均衡

有人说,都有了网络ACL了,还需要虚拟防火墙vFW)吗?

网络ACL是针对子网的保护;vFW是针对VPC的保护,保护的层面不一样。

而且,专业性不同。网络ACL是无状态的,不能跟踪网络协议的状态,仅仅用于放行或拦截IP/端口,不能做到比较高级和专业的应用层防护。而vFW可以做到和传统防火墙一样强大的功能。

vFW通常是用虚机实现的,出于性能考虑,可以用硬件防火墙替代vFW,将硬件下挂在VxLAN网关(此网关也可以用硬件)下使用。

有的厂商将自己的网络ACL称为vFW,要注意区分开来。

虚拟负载均衡vLB)也是用虚机实现的,提供第四层负载均衡,通常底层使用LVS(Linux Virtual Server)技术。

此外,云原生中还有第七层的LB,通常是API网关干这事(比如通过nginx)。

下图是在云内创建vLB的图示:

vLB的创建示例

增加vFW和vLB后,云网络的示意图为:

增加vFW和vLB后的VPC逻辑示意

7、网关:通往外部世界

网关Gateway)可以实现子网和外部网络的连接。

网关有多种,比如NAT网关、互联网网关、专线网关、VPN网关等。

NAT网关 (NGW) 用于没有公共IP的VM访问互联网,互联网网关 (IGW) 用于有公共 IP 的VM访问互联网。

以NAT网关为例,用户在控制台创建“NAT网关”并给网关绑定一个EIP弹性公网IP),然后,做一下NAT设置,就可以让子网内的VM连接互联网了。

NAT网关实例示意

网关可以用虚机实现。出于性能考虑,有些厂商会用硬件网络设备实现,比如L3GW(Layer 3 Gateway),或者在服务器上安装智能网卡(SmartNIC或称FAC,function accelerate card)实现。

8、云连接:把云网络和企业DC连起来

云连接(Cloud Connect)不仅提供跨Region的VPC连接,更提供云上和云下的连接,比如公有云和企业DC的连接。

常见的云连接有两种形式:VPN云专线(Direct Connect);前者走互联网,后者走物理专线;前者通过VPN网关,后者通过专线网关。

企业如果有私有云,可以通过云连接,让公有云和私有云打通形成混合云。

下图是本文所介绍网络组件的集合图示。

含云连接的云网络示意图

其中,Region1和Region2通过云专线建立连接;Region1通过云专线,Region2通过VPN,和企业的DC建立连接。

二、虚拟网络背后的技术

虚拟网络的背后,有很多技术,本文主要介绍SDN技术和VxLAN技术。

1、SDN

传统的网络设备是分布式和去中心化的,每台设备可以通过自主学习和人工配置,可以知道如何转发数据包,而不需要一个集中式的控制设备。

我原以为网络就应该是这样的,但当我弄明白SDN之后,大吃一惊,居然还能从分布式又走回集中式?这大概就是否定之否定吧。

SDN像是控制各网络设备的大脑,它去命令各设备如何转发数据包,而不再需要各设备自己学习。这个大脑的实体就是SDN控制器。

SDN为什么要把分布式改为集中式呢?我觉得,搞软件的人实在懒得去一台一台设备登录上去搞配置了,太麻烦,要想真正地自动化,要想真正地全局统筹,就得用软件集中管理。

所以,SDN这个词本身就是软件定义网络(Software Defined Network),用软件的方式把大量复杂难搞的硬件网络设备安排地明明白白。

在虚拟网络里,vSwitch和vRouter这些设备,通常都不用登录上去敲命令(虽然也可以这么做),而是通过云平台配置。云平台通过API和SDN控制器交互,SDN控制器计算并下发转发表到vSwitch和vRouter,完成配置。

SDN原理示意

说到这里,还要介绍一下常见的Overlay概念,所谓Overlay,是在传统的物理网络(Underlay)基础之上,构建出一个虚拟的逻辑网络。从技术上讲,Overlay的二层数据包封装在物理网络的三层报文中传输,到达目的地之后再解封装得到Overlay的二层报文。实际上,这就是一种“L2 over L3”的隧道封装技术。这方面的协议比较多,主要有VxLAN(L2 over UDP)、NVGRE(L2 over GRE)、STT(L2 over TCP)等,但VxLAN占明显优势。

总之,当你看到或听到“逻辑网络”、“业务网络”,你应该知道这说的就是Overlay,当你看到或听到“物理网络”、“底层网络”时,就知道这说的是Underlay

2、VxLAN

VxLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网)是实现Overlay网络的主流技术,正是通过VxLAN,才实现了VPC(包括子网)的完美隔离。

大体而言,就是VM之间交互的数据包,在离开vSwitch时会加上封装,形成隧道,不同子网带有不同的隧道号标识。解隧道封装的时候,看到隧道号不对,就会抛弃,这样不同子网内的虚拟机无法进行直接通信(除非做了路由),这就实现了隔离。

VxLAN不仅解决了隔离的问题,还解决了传统二层技术(如VLAN)难以解决的大规模二层互连的问题,由于通过三层传输,虚机的部署和迁移就不受二层物理网络限制了。

VxLAN是怎么将L2 over在L3之上呢,答案是:将以太网帧封装在UDP包中。

VxLAN的包结构

如上图所示,Overlay的二层数据帧被封装在三层的IP包中(精确的说,是四层的UDP报文中),封装的头部是VxLAN Header,里面的主要内容就是24bit的VNI(VxLAN ID),每个子网都有一个VNI,这样即便是同一台主机上的两台VM,即便处于同一IP段,只要他们在不同的子网,就无法通信,因为子网的OVS看见不同的VNI就会抛弃掉。

做封装和解封装的端点被称为VTEP,它同时也就是VxLAN隧道的起点和终点。VTEP通常是由OVS实现的,子网中VM向外发出的二层报文,会由OVS进行封装,做成UDP包发出;同时OVS会在UDP特定端口监听,收到VxLAN报文后,如果VNI正确,则去掉封装,将封装前的二层报文转发给相应的VM。

对于裸金属(云管理的物理机)而言,由于它没有OVS,它的Overlay通信要通过VxLAN网关(承担VTEP功能)实现,或者可以在物理机上插一块智能网卡,由智能网卡做VTEP。

VTEP有软件和硬件两种,前面讲的OVS就是软件VTEP,也有用硬件交换机做VTEP的。如果VTEP由软件完成,这种Overlay就叫Host Overlay;如果由硬件设备完成,就叫Network Overlay;如果都有,就叫混合Overlay。

对于Host Overlay而言,物理交换机网络中的Leaf和Spine仅进行IP报文的高速转发,不处理VxLAN报文。

Overlay和Underlay示意

上图中,VM1和VM2要通信的话(无论是否在同一子网),由OVS封装成VxLAN报文,由leaf和spine交换机进行物理传输;对于在同一台宿主机上的VM3和VM4,如果它们在同一VPC的同一子网,OVS就直接转发了(不走VxLAN);如果是同一VPC的不同子网,也不用走VxLAN,由vRouter和OVS转发;但如果在不同VPC,就也要走VxLAN,因为不同VPC的隔离就是靠VxLAN实现的。

三、结语

如果你从来没接触过云网络,现在应该有一个大致的了解了。

简单地讲,就是软件工程师们,在物理网络之上,用纯软件的方式,又做了一个虚拟的网络。

这样,软件工程师摸的最少的网络硬件,也可以随心所欲地用软件定义了。

文|卫剑钒

参考链接:
1. 公有云相关概念——region和AZ、VPC、安全组、公有云网络架构 https://www.cnblogs.com/yunjisuanchengzhanglu/p/16164376.html
2. 一文搞懂AWS Region, VPC, VPC endpoint,AZ, Subnet 基础篇上 https://zhuanlan.zhihu.com/p/360701963
3. 浅谈VPC二三,秒懂秒透 https://www.sdnlab.com/20510.html
4. 云产品相关网络概念学习Regison/AZ/VPC https://blog.csdn.net/qq_24433609/article/details/122846124
5. 这些基本概念都不懂,还谈什么你会VXLAN? https://www.sohu.com/a/561265642_657867
6. 数据中心——Vxlan基本概念2 https://blog.csdn.net/m0_49864110/article/details/125265373
7. 我非要捅穿这 Neutron https://www.cnblogs.com/jmilkfan-fanguiju/p/10589719.html
8. OpenStack Neutron实现网络虚拟化 https://www.jianshu.com/p/7dc785c6c826
9. Neutron的VLAN实现模型 http://www.javaxks.com/?p=53958
10. OpenStack 安全组原理详解 https://iswbm.com/168.html
11. Linux VXLAN http://www.senlt.cn/article/121754251.html
12. OpenStack入门篇之VXLAN原理 https://www.cnblogs.com/linuxk/p/9455486.html
13. 深度好文:vxlan介绍 https://baijiahao.baidu.com/s?id=1709356306036351889&wfr=spider&for=pc
14. OpenStack OVS实现安全组(五) https://blog.csdn.net/qq_20817327/article/details/107032223
15. 数据中心网络架构浅谈(三)https://zhuanlan.zhihu.com/p/30119950?utm_source=wechat_session&utm_id=0
16. 网络ACL简介 https://support.huaweicloud.com/usermanual-vpc/acl_0001.html
17. 一文看懂Amazon EKS中的网络规划 https://aws.amazon.com/cn/blogs/china/understand-the-network-planning-in-amazon-eks-in-one-article/

以上是关于让人懵懂的云网络,里面原来是这些的主要内容,如果未能解决你的问题,请参考以下文章

云网融合 — 云网络的边界

云网络的守护神:主动链路监控

华为云网络测量如何“悬丝诊脉”

带你熟悉云网络的“电话簿”:DNS

云网络运维必备神器:全链路故障诊断与分析

云网络的守护神:主动链路监控