目录
前言
名词介绍
云网络实践
总结
云网络是IT和CT融合的产物。云网络并不是要重建一张新的网络来取代现有的网络基础设施,而是在现有网络基础上通过网络虚拟化等技术重构。前面讲到,云计算驱动云网络的诞生,云网络其实是CT(Communication Technology,通信技术)与IT( InformationTechnology,信息技术,这里主要是云计算)融合的产物。其次,云网络其实一种是网络服务,也是一张面向企业租户和应用的虚拟网络。最后,云网络是数字经济的连接,连接计算、存储、数据库等等,也连接企业/IDC/总部/分支/IoT终端/个人移动端等等。云网络和传统网络的最大区别是云网络具备共享/弹性/自助服务/按需等云的特征[1]
在云计算时代,云网络是基石,企业上云,网络先行,在企业上云的过程中,根据业务特性利用云网络的能力来构建业务的数据链路,为云上业务的数据传输提供安全可靠的保障是一项不可或缺的能力,在使用云服务的时候,经常会遇到云网络的问题,如何规划好云网络以及使用云网络产品,是本文重点介绍的部分。
B站是典型的混合云/多云架构,不仅仅使用了多家云服务商来提供服务,同时也有自己的自建数据中心。云上的业务类型也分布比较广,包括在线业务、离线业务还有游戏的业务,使用的云产品基本上也覆盖了IaaS、PaaS以及SaaS,其中以IaaS和PaaS为主。这些云产品统一通过内部的多云管理平台来管理,当然也包括云网络产品。在混合云/多云的架构中,整个云网络基础设施包括IDC网络,跨地域网络以及混合云网络三大部分,分别映射为传统网络的IDC网络,IDC互联网络,接入网络[1],而构建这些云网络是依赖云上的云网络产品,包括:VPC、负载均衡、物理专线,虚拟网关、NAT网关,弹性IP等。在构建和迭代符合业务特性的云网络过程中,一般会遇到以下问题:
如果存在跨云的业务交互,如何打通跨云的网络;
如何构建云上云下的混合云网络;
业务方语义下的网络需求如何转换成云网络产品和网络环境。
以下针对云网络产品,B站的混合云/多云的网络架构以及如何解决业务和云网络基础设施中间的GAP问题进行介绍。
云互联
我们可以基于该产品构建全球化的网络,它主要用来在不同的地域的VPC之间、VPC与IDC之间搭建云上云下一体化的私有网络
物理专线
提供了基于运营商的专线接入公共云的能力
私有网络VPC
用户可以在云上掌握的私有网络环境
子网Subnet
可用区粒度云实例的网络连接功能,一个私有网络包含一个或多个子网,这些子网默认连通
ACL
提供子网粒度的入方向和出方向的访问控制功能
安全组
提供云主机粒度的入方向和出方向的访问控制功能
弹性公网IP
是一个静态的云外网络IP地址(这里云外网络既可以是公网Internet,也可以是企业内部局域网),可以通过外网直接访问,可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡等资源灵活地绑定及解绑 。将弹性IP和子网中关联的云服务器绑定,可以实现云服务器与云外网络互通
负载均衡
将访问流量根据转发策略分发到后端多台云服务(云主机实例)流量的分发控制服务
NAT网关
VPC公网网关,是一款企业级针对公网访问的安全网关产品,提供NAT代理(SNAT和DNAT)功能
对等连接
两个不同VPC在网络层面建立的一个专属的数据通道,主要用于2个VPC之间简单互联的场景
VPN
基于互联网链路,通过加密通道将企业IDC、企业办公网络等和云上VPC安全可靠来的连接起来的服务
B站的网络架构如何形成的
首先我们介绍一下多云之间以及云和本地IDC的组网方式,包括线性网络、环形网络、网状网络和星型网络[3]:
线性网络
线性网络主要思想是把各个云厂商串联起来,该种组网方式架构简单,易于扩展,但是因为是串行互联,任何两个非相邻的云之间需要互通,都需要中间的厂商节点,一旦中间有厂商出现网络问题,会影响到所有经过这个厂商节点的网络流量,故障影响大,是一种不建议超过两个云服务商互联的组网方式
环形网络
环形网络主要思想是把多云两两之间通过专线进行互联形成一个“环”,相对于线性网络,环形组网方式降低了一个厂商故障所影响的故障半径,但是非相邻的云厂商之间无法直接互通,都需要经过中间的厂商节点。
网状网络
网状网络是在环形网络的基础上,两两云之间都通过专线拉通,任何两个云厂商之间都有专门的物理专线进行通信,并且专线故障所影响的也是所连接的两个厂商,但是网状网络需要建设的专线是最多的,建设成本高。
星型网络
星型网络主要的思想是把多云跟一个专线供应商连接,专线供应商作为中间POP点,所有云的互访都需要经过这个POP点,任意一条专线故障,只会影响到所有跟该专线直连的云,对于其他云无影响,同时专线的建设成本和云厂商的数目成正比,相对来说成本可控。
B站在一开始使用公有云的时候,就是多云的模式,至于为什么使用多云。随着业务上云以及本地IDC的建设,越来越多的业务存在和IDC高速通信的需求,比如计算资源在云上,数据存储在本地IDC的场景。基于网络的高带宽低时延的需求,基本上B站和每个云服务商都拉通了物理专线,通过物理专线和厂商的专线POP点打通,然后通过虚拟网关与云上的VPC网络打通,实现IDC和云上的互联。如果把B站的IDC当做”专线供应商“的话,那么B站的混合云/多云的网络架构就是上面提到的星型网络架构。
多云之间以及云和IDC之间的互联网络确定后,我们如何规划和建设云内的跨地域或者跨VPC互连,这里需要介绍2个云产品:
云互联(不同的云厂商叫法不一致,比如:云企业网,云连接等),我们可以基于该产品构建全球化的网络,它主要用来在不同的地域的VPC之间、VPC与IDC之间搭建云上云下一体化的私有网络,对于需要互通的VPC只需要添加到云互联实例中,就可以自动打通。对于有需要跟IDC互通的VPC,只需要把VPC和专线的虚拟网关实例加载到同一个云互联实例中就可以自动实现网络打通。
对等连接,主要用来构建两个VPC之间的连接,是点对点的,并且不具备传递性,一般用来实现VPC之间的简单互通,它的功能云互联都能实现,但是在某些场景下采用对等连接会更方便理解和维护。
下面基于物理专线,云互联,对等连接等绘出简易的网络架构图。
以IDC为中心的星型网络虽然整体架构比较清晰,但是从图上也可以看到,多云之间没有直连的通路,要想实现跨云访问只能:
公网访问
走专线经过IDC先下云再上云
从B站的业务部署规范来看,基本上业务是在同厂商内部闭环的,不会存在大量的跨云访问,上面两种方式基本上可以满足业务的一些特定场景下的需求同时架构也比较简洁且容易维护。
上述的网络架构对于云管和网工都是比较清晰的,但是对于业务方来说,并不清楚云上的网络情况,也不知道这些云产品对应的具体含义,如何在业务上云的过程中屏蔽业务网络的细节,只需要业务关注自己项目的网络需求,这些需求可以用很简单的语义表达出来,为此从云管的角度,把云网络分为了基础网络和项目网络,所谓基础网络就是上述描述的宏观上的网络架构,包括跨云网络、混合云网络以及跨地域网络等,而项目网络是业务项目在云上的网络边界,具体包括VPC,子网,NAT以及安全组等。下面详细介绍一下项目网络以及如何使用项目网络提高业务上云的网络需求的沟通效率。
项目网络
所谓项目网络,是从业务视角出发的,基于项目粒度而定义的网络环境,包括VPC、Subnet、EIP、Nat网关以及安全组等。定义项目网络主要是基于项目粒度的网络环境,从用户的角度来看,一般一个新项目上云,会对网络有如下需求:
资源规模大概需要xxx个IP
需要能够访问外网
需要能够和IDC内网互通
安全组需要设置白名单
针对这些既定的需求,我们把这些配置的集合定义为项目网络
项目网络的构成
1.选择VPC
一般情况下,对于大型项目,比如资源规模到1000量级的虚拟机,会单独划分VPC,对于小规模的项目,是在一个VPC内部通过划分子网的方式来区分的。通过基础网络的定义后,对于每个VPC我们会定义它的网络环境,这个网络环境描述的是跟IDC的网络连通情况,当前B站定义的网络环境字段包括:
直通
隔离
游戏(因为游戏比较特殊,单独定义)
如果需要跟idc互通,业务只需要选择具备直通属性的VPC即可,如果需要跟IDC进行网络隔离,选择”隔离“网络环境的VPC,如果是游戏业务,直接选择专有的VPC即可。
2.分配子网
业务在选择资源规模的时候会选择对应的规模数字,这个数字是2的指数,比如:32、62、128、256等,当业务选择规模数字后,系统会自动的从VPC的CIDR中分配子网网段,比如业务规模业务选择的是256,那么会在选定的VPC内部自动创建/24的子网,并且自动和项目进行绑定,后续该项目创建的云资源都会在此子网内部分配私网IP,当业务规模增加时,如果子网可用IP数不够,也可以直接横向扩容子网。
3.创建安全组
当业务如果没有特殊需求,可以选择默认安全组,默认安全组会设置堡垒机和监控采集机器的白名单,提供这些基础组件的访问,业务方也可以自己设置业务白名单,自定义安全规则,系统会自动按需创建安全组,后续创建的云主机都会绑定该安全组。
4.选择公网访问
如果需要访问公网,可以选择给项目选择NAT网关,并且为项目单独选择一个对外的公网IP,当然也可以单独为项目创建一个NAT网关,对于提供公网访问的场景,业务直接申请公网类型的负载均衡就可以实现,当然也可以选择给对应的服务器绑定弹性公网IP。
以上的云网络产品的配置共同构成了项目网络,当一个项目上云的时候确定了项目网络后,借助平台,后续可以直接创建业务需要的各种云资源,比如云主机、负载均衡、数据库等,这些资源都是在既定的项目网络环境中的,受项目网路环境约束,项目网络的架构如下:
下图是为项目绑定云账号时业务自行配置项目网络的平台页面。
实践案例
这套基础网络和项目网络的划分目前在游戏业务上完全落地了,因为对于游戏业务来说,会经常存在新项目的上线,并且每个游戏项目都是独立的,不存在跨云的访问,所以新项目的云网络环境的是否可以快速构建对资源交付的效率有着很大的影响,下面以某个游戏上线为例来说明整个网络的规划和平台自动化的过程。
对于游戏项目来说,由于主体限制一般需要独立的账号部署资源,因为一些基础组件部署在IDC,游戏业务存在需要访问IDC的情况,由于游戏的特殊性,比如存在代理游戏,需要开放云上服务器给第三方登录,如果直接打通云上游戏VPC和IDC互通,会存在很大的安全风险。为此我们有两种方案可以解决这类问题。
方案1:访问控制
一般会想到通过ACL或者安全组的形式来控制机器的出入向访问
以安全组为例(ACL因为是无状态的,所以出入向都需要设置对应的策略,配置更加复杂),由于安全组是有状态的,所以云上一般的用法是只需要设置入向规则就行,出向默认全部放开,但是,由于需要限制服务器访问idc,所以需要主动设置出向规则,如下,最后4条是必须添加的默认规则,如此才能控制云上服务器能直接访问IDC的内网其他服务或者机器
授权策略 |
优先级 |
协议类型 |
端口范围 |
授权对象 |
备注 |
---|---|---|---|---|---|
允许 | 1 | TCP | 目的:IDC服务端口 | IDC服务IP段 | 允许访问IDC某个IP段的端口 |
允许 | 2 | TCP | XX | XX | |
... | ... | ... | ... | ... | |
拒绝 | 97 | 全部 | 目的:-1/-1 | 10.0.0.0/8 | 拒绝其他访问其他内网 |
拒绝 | 98 | 全部 | 目的:-1/-1 | 172.12.0.0/12 | 拒绝其他访问其他内网 |
拒绝 | 99 | 全部 | 目的:-1/-1 | 192.168.0.0/16 | 拒绝其他访问其他内网 |
允许 | 100 | 全部 | 目的:-1/-1 | 0.0.0.0/0 | 允许访问公网 |
可以看出该方案虽然能达到目的,但是有一定的配置和维护成本,同时从一定程度上来讲,底层其实是连通的,只不过通过一些策略拒绝了出向的访问,没有从本质上解决问题。
方案2:代理转发
主要思路是单独创建VPC,并且该VPC和IDC通过物理专线打通,然后创建LB,配置IDC的服务VIP作为后端,同时通过对等连接打通业务VPC和该VPC,由于对等连接没有传递性,业务VPC默认不能直接访问IDC,按照这个思路:
先配置基础网络,按照预估规模,创建一个专门的VPC,我们暂且称为SVPC(Special VPC),并且加入到云互联中,IDC侧放通路由,允许SVPC和IDC互通,同时通过云厂商的对等连接产品,打通游戏的VPC和SVPC。并且定义游戏VPC的网络环境为”游戏”。至此,基础网络的部分已经配置完成。
接下来只需要游戏业务方在平台上按照游戏项目的需求提交创建项目的申请,填好网络规模、安全组以及访问公网的需求,就可以自动创建绑定项目的项目网络。
本文简单的介绍了我们在多云建设和管理中的一些实践,也仅仅是云网络技术和场景中的一部分,云网络是一个系统化的工程,包括云数据中心网络、跨地域网络、混合云网络以及云网络安全
企业上云前,好的网络规划会避免后续很多管理和运维的问题,否则后续要想再做网络架构的调整,人力成本和业务风险都会受到很大的挑战