《百喻经》中有这样一个故事:有个富翁见到别人的三层楼高大壮观、宽敞漂亮,很是羡慕,于是叫来工匠建造这样的房子。但是当工匠开始丈量土地、打造土坯、准备建楼时,富翁却表示不能理解,说“我用不着下面的两层楼,现在只要你给我造第三层”。当时的人听了,都觉得好笑:“这世上哪有空中楼阁啊”?这个段子你觉得好笑吗?还是无趣?
说回当代,有个5W1H分析法,相信很多人都听过。度娘说,这是1932年美国政治学家拉斯维尔开始提出的,对一件事物要从何因、何事、何地、何时、何人、何法(Why、What、Where、When、Who、How)等六个方面提出问题进行思考,才能全面把握。
回到21世纪20年代、天朝、如火如荼的IT本行,我国经济迅猛发展、科技奋起直追;从企业到个人、从首富到草根,普遍心浮气躁,希望一步登天、一夜暴富、一口吃成胖子。不对不对,是一下瘦成闪电。IT发展本就日新月异,新技术、新概念、新事物层出不穷。笔者注意到很多从业者对待IT技术和产品,都抱着速成心态,对What、Why一知半解,但却信心满满地认为自己能快速把产品搭起来(How),用起来。看官稍微想一下,这跟那个只要三层楼的富翁比,谁是小巫,谁是大巫呢?
当然,这第一、二层的What和作为地下地基的Why,掌握起来费时费力费脑,就像建造1、2层楼花钱费事也是一样的。所以笔者对富翁们表示充分理解、不觉得好笑。本系列文章争取在笔者能力范围内,简单直观地科普一些What方面概念,希望读者尽量轻松地掌握全貌,以便在锤炼自己的know-how时看到森林、知道方向,有章法、不露怯。多说一句,AWS服务手册很全、准确性很高,如果Know What、Know Why掌握了,Know How还是相对容易的。
本文说的是云网互联,不需要读者懂云,但要懂点网。如果您看来下段描述的传统网络,也是一头雾水,那也不用浪费时间往下看了,毕竟网络基础的水也挺深。
最后声明,本人能力一般、水平有限、贻笑大方、敬请谅解。特别是哪些对云网的5W都了如指掌的专家,全当饭后消遣就好了。当然如有谬误,欢迎指正,以免误人子弟。
传统企业网一般是一栋大楼、一片园区以至于全国多地数据中心互联组成的,里面有各种设备和软件,接入了很多员工。
上图是个典型的企业网络,如您对企业网络环境有了解,那么图中内网环境是私有IP地址空间、公网环境就是互联网、DMZ区是内外网的缓冲地带、对外的服务器一般放在这里、内网里的服务器群主要对内服务、多地之间专线互联需要路由器交换机一堆复杂网络设备、员工通过办公网访问内网、上外网要走NAT转换、客户通过互联网访问DMZ中的对外访问、外出员工通过互联网回来需要VPN等等,应该是比较熟悉的。
如果您对类似环境心知肚明、讲的头头是道,如果您打算/正在/已经上云、但对云中网络了解不多,那看完本文,您会有一些收获的。
林子大了什么鸟儿都有,领域深了就有专用术(hei)语(hua)。对传统网络熟悉的小伙伴,对于专线、互联网专线、子网/掩码、交换机、路由器、接口、路由等概念肯定不陌生(如果陌生、全当我没说),到了公有云,就像从百货商场转到超市,虽然大同、可是小异也不少。这儿给初入云的网络老鸟普及一下黑话。
VPC
企业网络不管大小,一般使用统一的私有网络空间。也就是说整个网络内部的IP地址均不重叠,均有可能互通。较大复杂网络环境还会进行专门的IP空间规划设计。这样一个统一的网络空间,一般是一个IGP域,也常被叫做一张网络。
云中理念有些不同,一般会在云中每个区域(比如AWS北京、AWS宁夏)都建一个、甚至几个独立的私有网络空间,这个叫做VPC。实际上,AWS为每个用户、在每个区域都设置了一个默认的VPC,重叠使用172.31.0.0/16这段IP地址。通常情况下,客户在云中不同区域部署不同的应用,相互之间没有关系,所以使用多个重叠的私有空间也没什么不便。
但是,传统企业上云往往作为内网的延伸,不同的VPC之间、与内网之间都需要通信。此时就需要提前对VPC及IP地址空间做好规划,保证地址不重叠。让后再设法打通相互间的路由。
子网(Subnet)
云中子网跟传统子网概念基本相同,可粗略对应为三层交换机的一个VLAN,有自己的网址和掩码,路由表、网络ACL、流日志也都长在上面。
每个子网都可以开启流日志,会把包含五元组统计的xflow日志写入到云存储S3中。需要注意的是,开启流日志、设置ACL都会对网络性能带来不小影响,除非必须,一般都不做。
网关(Gateway)
传统语义里的网络设备,像路由器、交换机、NAT、VPN等,在云里一般都叫网关。比如NAT Gateway,VPN gateway,Internet Gateway, Direct Connect Gateway,Transit Gateway等等。前两个语义自明,Internet Gateway基本就是互联网出口路由器。后两种下文专门介绍。
路由(Route)
传统网络中理解的路由,是路由器/三层交换机的一组配置数据;因为云中淡化了路由器、交换机的概念,所以把路由表定位成了一个独立对象,包含一组路由表的对象。这个对象可以关联到子网/网段上,表示这些网段可使用其包含的路由表。
特别说明的是,上图右侧AWS的路由对象里,除了代表默认路由的0.0.0.0/0路由项之外,一般还包含一个target是local的路由表项,使得同一VPC里的所有网段可以互通。这种表述方式在传统网络里也是没有的。
除此之外,子网互通的路由设法跟传统网络是一致的:要上公网,就把默认路由指到Internet Gateway上,有这个路由的子网就叫做公有子网;没有公网IP的虚机要上公网,就把默认路由指到NAT Gateway上。当然,这个NAT 网关得先起到能上公网的公有子网里。
弹性IP地址(Elastic IP)
您对公网地址、私网地址一定不陌生,还恍惚记得公网地址是一个叫做IANA的组织负责的,把10.0.0.0/8、172.16.0.0/12, 192.168.0.0/16三段保留下来,不会分配到公网中。所以企业内部组网的IP规划都选在这三个空间内。否则万一跟公网IP地址冲突、基本NAT也无法访问。
云中组网,VPC内同样使用这些私网地址。需要公网访问的,可以使用公网地址,这个概念跟传统网络中是一样的。只是AWS公网地址资源较为丰富,如果您愿意,可以让您的每台虚机都使用公网地址,也不收额外费用。
不过,云中有个弹性IP地址的新概(hei)念(hua),不少上云新手都把弹性IP地址等同于公网地址了。虽然技术上弹性IP地址确实是公有IP地址,但是含义还是有两点关键区别的。
实践中,因不熟悉两者区别,大量使用弹性IP带来繁琐操作及成本浪费的,公有IP变化影响业务生产的情况,还是经常遇到的。
云主机IP和网卡
云上开的虚机,大家都叫云主机。不管开在公有子网还是私有子网,默认都给云主机通过DHCP分配一个私网IP,绑定在主网卡上。不知您注意到没有,即便是在公有子网上开的具有公网地址或者弹性地址的云主机,登进去用ifconfig看,也只能看到私网地址(敲黑板啦)。只有在AWS控制台上、或者通过特定方法取元数据,才能看到公有地址。
透过这个现象,网络老炮们不难猜出,其实公有地址/弹性地址在云的底层实现上,还是配置在公网出口路由器的NAT表里面的。弹性地址和公网地址的区别,也只是云平台的底层业务逻辑不同而已(跑题了哈)。
老炮们可能还会疑惑:自有网络里我可以给服务器配多个IP、可以加多块网卡,可以设置浮动IP、HA切换自动飘过去,上了云还行吗?黎叔负责任地告诉大家,在云里:
所有这些都是不允许的。哈哈!开个玩笑,所有这些都是可以的,而且比物理服务器上设置更简单容易,起码不用开机箱、插拔网卡。只是有一点需要注意,这些操作要在AWS控制上或者通过AWS命令行/API执行,只通过ip add命令在操作系统内增改是不生效的。
所以,老炮们用多台云主机DIY一套HA数据库,是可以搭建起来的。只是这种场合大部分人都选用云中托管服务。
安全组Security Group
上面提到,一般不建议在子网上设置太多的ACL(哦,忘了说一句,AWS里的黑话叫NACL),那网络访问控制咋整呢?
这里AWS又整出了一句黑话,叫做安全组。其实这个安全组基本就是本机防火墙策略,也就是针对云主机的ACL列表。这个概念在云中非常基础、也非常重要。用云新手十个中有八个在这上面栽过跟头,因为AWS的安全组默认没有策略,也就是默认云主机是完全不通的。Ping不通、80等服务端口也统统不通。
据说有的云是默认全通的,虽然开始方便,但方便惯了,很可能忘了设置,被黑、被挂马在公网上是分分钟的事儿。这个跟企业内网环境差别很大(不好意思又扯远了哈)。
安全组的概念比较好理解,就是从哪些IP范围来,到哪个端口的流量允许进来,没配置的一律不让进。把设定的安全组绑到哪些云主机上,策略就对哪些云主机生效。而且,一个安全组可以绑到多台虚机、一台需要可以绑上多个安全组,还是比较方便灵活的。
很多人不太了解的是上图中红框内写法。从哪儿来,不是设IP范围吗?写成IP V6虽然眼生,还可以理解。写成sg-xxxx是个什么鬼?其实只是一种非常方便和有效的写法,指的是允许sg-xxxx这个安全组绑定的所有云资源进来。这样,云主机动态伸缩时连通关系就可以既简单又严谨了。
这里的云,指的是公有云。本文以AWS公有云为例,相信是具有典型和普遍意义的;这里的网,指的是上述传统企业网络。云中VPC是独立的私网,企业网也多为独立私网,这些私网都可以设法通过NAT上公网,也可以设法把内部服务开放给公网访问。这样,无论私网还是公网上的用户,都可以访问发布到公网的服务。私网中的应用,当然也可以访问发布到公网的服务,如下图各虚线路径所示。
既然这样,干吗还要搞什么云网互联呢?这个看似不是问题的问题,其实是值得考虑一下的。不同的原因,带来的不同的互联方案。稍微想一下,需要额外搞云网互联的动机,大致又两个:
一是担心数据安全,毕竟公网上啥人都有,通过公网的流量要是包含机密信息,被人偷听怎么办?内网服务暴露到公网,被人黑了怎么办?基于这样担心的,大多选择云网VPN互联的省钱方式。
二是担心公网带宽不足、时快时慢。公共毕竟是公用的,啥时塞车企业控制不了,要是需要带宽时塞车了,影响关键业务可不行。这种大带宽、高SLA要求大多选择拉专线互联,反正不差钱。
要做云网互联,先要把云内私网互联搞搞清楚。VPC是局限与云中的某个区域的独立网络空间,相同区域的多个VPC之间,不通区域的VPC之间怎么互联呢?
AWS云大致提供三种互通的方法,分别叫做终端节点、对等连接、中转网关。实现互通效果程度不同。
终端节点(Endpoint)
除了VPC内的私网云资源外,AWS还提供很多公网云资源,比如AWS的云存储S3就是公网访问的。VPC内的云主机访问自己的云存储,就得从公网转一圈儿。同样,VPC内的云主机访问另一VPC暴露到公网的服务,也得从公网转一圈儿。如果您不差钱,不在乎性能,这样绕着走也没什么。而且很多云用户就是这么绕着走的。但您要是追求完美,还是有既省钱、又高效、又安全的办法的。这就是设置终端节点和终端节点服务(Endpoint Service)。方法就是把需要别的VPC直接访问的访问设置为终端节点服务,在对方的VPC里为终端节点服务和AWS的公网服务设置个终端节点,原理上是在VPC上长个网卡/网关连着对端服务。
对等连接(VPC Peering)
终端节点方式允许VPC通过内网访问其他VPC发布的服务,但并不是两个VPC内任意虚机可以互通。而且可以是跨区域、跨AWS账户互通的。
中转网关(Transit Gateway)
VPC Peering实现了两个VPC的互通,如果N个VPC都要互通咋办?只能两两之间设置VPC Peering。需要n*(n-1)/2个VPC Peering。如果n=10,要设45个;n=20呢,要设190个。傻了吧?之所以这么傻,笔者认为是以前多VPC互通的需求并不多。
随着传统企业大规模上云,此类需求当然会增多。所以AWS新推出了Transit Gateway。这个东西基本上就是个路由器,哪些VPC需要互联,相互之间路由怎么设置,您随意。有了Transit gateway,云中VPC互联,基本上跟传统网络互联一样、随您设置了。
主要担心服务和数据安全,对网络带宽和质量要求不是很高的情况下,使用VPN实现云网互联是高性价比的选择。这是在云中VPC和企业网这两个私有网络之间,透过现有的互联网专线、在互联网上搭建一个VPN通道实现的。
客户网关就是传统的VPN设备、支持VPN的路由器或者软件,如果云端也部署云主机,自行安装VPN软件的话,就是传统的VPN方案,跟云没有一毛钱关系,网络老炮们对此应不陌生。
当然,云端的VPN软件,您也可以从AWS云市场中选用熟悉的思科、Juniper之类的VPN软件,实现一键安装部署。大部分客户更常见的选择是,使用AWS提供的VPN网关服务。
使用专线实现云网互联相对复杂,云上概念和云下施工都较复杂,是本文Know What的重点。
先说云下看得见摸得着的部分,这个需要一定的广域网集成经验,大多数传统客户也是请集成商协调运营商搞的。
上面过程可能耗时上月、花费不菲,但敲黑板了,这个与AWS没有一毛钱关系,AWS文档也不会提。与AWS的云网互联操作及费用,是从AWS指定的某市某区某楼某层某处的这个路由器开始的:
对了,路由器及相关设备占的机房和机柜不属于AWS云,您可能需要自己找这个IDC租机位。还有,要是您所需带宽小于1G,还得找AWS授权的网络合作伙伴接线。
到此为止,物理网络施工完成。下面是云内逻辑部件及服务,还是比较复杂,概述如图:
这里涉及到的AWS术语包括VPG、TG、DXG、VIF、DX Connection,笔者糊涂了一阵的是TG和DXG的区别:他们都能跨AWS账户、跨区域实现VPC和DX连接,啥时候用哪一种呢?
鲁迅说,凡是需要研究、才能明白。他从历史中研究出来吃人的道理,我研究半天,发现用DXG连接多个VPC时,实现的是VIF到VPC的连通,而两个VPC之间是不通的;而TG作为云内路由器,就没有这个缺陷。而且DX要连TG,必须使用中转VIF和DXG才行。
如需进一步协助或服务,请留言,泰岳云业务会提供详细资料及专业服务。