今年继续介绍一本阿里人写的书,按照“Life is Random”的原则,这次还是按照片中书脊的从左到右顺序,第二本就是《云网络》,由于牵涉的内容过多,分享将分成上下两次,本次分享主要覆盖的内容包括云网络整体概述、VPC、EIP、NAT网关、PrivateLink私网连接、SLB负载均衡。
按照本书的推荐序一,中国工程院刘韵洁院士的说法:产业互联网需要“确定性”“低时延”“高安全”等特性的网络支撑,这对“尽力而为”的传统IP网络架构提出了巨大的挑战,需要构建面向未来的的网络基础架构。
那么这本《云网络》可以看作是这样一个针对产业互联网使用需求的面向未来的网络基础架构的使用说明书。与此相关的内容主要分成两部分,一部分是3-7章有关云上网络产品的介绍,另一部分则是第9章有关云网络解决方案的内容。此外,对于云网络内部的架构设计、运维体系本书也有着墨,不过这部分的内容更多还是放在另一本和云上基础架构有关的《企业数字化基石》里,后面对这本书我也会找时间给大家介绍,这次分享的重点更多还是放在云网络使用者的角度。
在2009年阿里云成立之初,召开了《第一届中国地方网站发展论坛》,当时的阿里云的主要客户都是一些中小网站,因此当时的云上网络架构设计思路主要还是围绕着如何满足这些中心型网站的快速构建和便捷运维来进行设计的,当时采用了一种被称为“经典网络”的网络架构模型,所有的租户都在一个大二层网络,通过“安全组”来进行租户之间的网络隔离。当时的这种网络架构被称为云网络的Beta版。后来随着上云用户对云上环境隔离的要求越来越高诞生了云网络的1.0架构,在这种架构下阿里推出了【VPC】(虚拟专有云)作为租户网络的容器,不过VPC是相互隔离的,假如要实现VPC之间的互联互通则要通过【高速通道】进行打通。假如用户有多个VPC要互联,则需要在每个VPC之间都建立高速通道。这种架构对于有着复杂网络需求的大中型企业来说有些过于繁琐。因此诞生出了云网络2.0架构,采用了【CEN 云企业网】集中管控所有VPC、云上和云下数据中心、分支机构的网络互联。在此之后又诞生了能够更好支持5G、边缘计算的云网络3.0架构,鉴于目前3.0架构还在演进的过程中,本书的内容更多还是围绕面向企业上云需求的云网络2.0展开。
首先让我们来看下云网络2.0 架构中最重要的服务VPC。
在VPC设计时主要考虑满足三个方面的需求:一是云上多租户之间的网络隔离问题,二是用户要从VPC内部便捷访问其他云服务的问题,三是企业线下数据中心要和云上实现互联互通的问题。
一个典型的VPC如下图所示:
(上图来自阿里云官网)
一个VPC就像一个完全独立的局域网,VPC内部主要由如下组件构成:
- 虚拟交换机、在VPC内部可以有多个子网,每一个虚拟机交换机对应一个子网,虚拟服务器ECS和其他网络服务的通信通过虚拟交换机进行转发。当一个VPC跨越多个可用区(阿里云某个数据中心)时,不同的可用区需要对应不同的虚拟交换机,也就是说虚拟交换机无法跨越可用区的边界。
- 虚拟路由器、在VPC内部连接多个虚拟交换机,在不同的虚拟交换机之间转发跨子网的网络流量。在现有架构中每一个VPC有且仅有一个虚拟机路由器。
- 路由表、在虚拟路由器内部如何进行数据转发由路由表决定,路由表分为主路由表和子路由表,每个VPC内有且有一个主路由表,主路由表决定了在默认情况下如何进行数据转发。对于某个特定的虚拟交换机可以为其关联子路由表,该交换机的网络转发将优先按照子路由表的规则进行转发。
可以通过IPSec VPN或高速通道、智能接入网关等阿里云服务将本地网络接入阿里云实现与VPC的互联。
(上图来自阿里云官网)
为了保证VPC在实现互联后的网络访问控制有两个方法,一个是利用虚拟交换机层面的【网络ACL】来实现,另一个是借助于可以精确到每一个ECS的【安全组】来实现更精细化的管控。网络ACL是一个无状态的访问控制列表,而安全组是一个有状态分布式网络防火墙。
为了满足企业用户的各种管控需求,VPC有如下特色功能:
- 共享VPC、可以将VPC跨账号共享给其他阿里云账号,不同账号下的云服务可以通过共享VPC来实现跨账号网络通信,因此可以通过共享VPC作为一个多账号资源共享通信的载体来使用。
- 流日志、可以收集VPC内部的网络通信数据来形成流日志供网络分析和故障排除使用。
- 流量镜像、对于需要更细致流量分析的用户可以使用流量镜像功能,将感兴趣的部分流量镜像发送到目标地址。
在VPC诞生之前,云上的虚拟服务器ECS都工作在当时的【经典网络】下,经典网络是一个所有租户共享的大二层网络,经典网络下的ECS有两个IP地址,一个是大二层网络的内网地址,一个是互联网公网地址。经典网络的这种设计延续到了VPC中,VPC中的ECS也可以拥有两个IP地址,一个VPC内部的私网IP,一个互联网公网IP。这种互联网公网IP和服务器绑定的模式其实并不是特别的灵活,因此阿里云又拓展出了一种互联网服务【弹性公网IP】,不像公网IP与服务器的绑定关系,弹性公网IP可以随时与ECS绑定和解除绑定。
弹性公网IP依据其服务能力有如下分类:
- 多线EIP、多线EIP通过BGP协议与多个运营商直接相连,不存在跨运营商导致访问体验变差的情况。
- 任播EIP、任播EIP通过anycast协议将EIP地址在多个运营商的POP点进行通告,让一个IP地址有了多个“分身”,用户可以通过访问任意一个“分身”来访问该IP后的服务,正是因为有了该特性,任播EIP特别适用于对抗DDoS,目前任播EIP只在非中国大陆的地域提供。
- 精品EIP、假如部署在中国香港的服务器要对中国大陆的用户提供服务,一般情况下都需要绕行运营商的国际互联网出口,甚至有可能需要绕道美国来访问香港的服务器。精品EIP则支持中国大陆用户直接通过专门的精品线路直接访问香港地区的服务。
- 单线静态EIP、当不需要同时对多个运营商都提供良好支持时,同时对成本又比较敏感的用户可以选择单线静态EIP。
EIP支持绑定到单个ECS上从而让该ECS实现互联网访问,假如需要同时为多个ECS提供互联网访问时,则可以使用NAT网关。
(上图来自阿里云官网)
按上图所示,NAT网关可提供两种类型的服务:
- SNAT、当云上的服务器需要主动对互联网发起访问时,可以使用SNAT(源地址NAT)将内部ECS的私网地址替换成NAT网关绑定的EIP。
- DNAT、当外部的用户需要访问VPC内部的某些ECS时,可以将NAT网关绑定的EIP地址DNAT(目标地址NAT)映射为ECS的私网IP,这里支持IP地址的整体映射和单个端口的映射。
EIP和NAT网关都需要通过公网来提供服务,假如某些阿里云上的SaaS服务商希望通过VPC之间的内部连接来为其他用户提供服务则可以考虑使用【PrivateLink私网连接】服务。
私网连接允许用户在自己的VPC内通过私网访问阿里云服务、第三方服务或自己发布的服务,这些服务都部署在服务提供方的VPC内。
(上图来自阿里云官网)
PrivateLink私网连接分为服务使用方组件和服务提供方组件。服务使用方和服务提供方可以是同一个阿里云账号也可以是不同的阿里云账号。
对于服务使用方来说最重要的组件是终端节点。终端节点是服务使用方VPC中的服务入口。访问该服务入口的流量实际上发送到了与该终端节点关联的弹性网卡上。而该弹性网卡实际上连接到了服务提供方所在VPC中的一个SLB(负载均衡)上,有关SLB将在下面进行介绍,这里只需要知道这是一个高可用的服务入口就可以了。
对于服务提供方来说最重要的组件是终端节点服务,终端节点服务代表了一个服务提供方提供的服务资源,为了处理服务请求,服务提供方只需要提供一个SLB来作为服务入口,在SLB后面的服务器数量或者规格则完全由服务提供方自行决定。
PrivateLink私网连接的终端节点和终端服务节点只能在相同的可用区创建,服务使用方无法跨可用区来创建终端节点。
相对于直接使用公网提供服务,PrivateLinke主要有如下优势:
- 安全访问、私网连接通过内网来提供和使用服务,流量本身不会离开内网,甚至不会进行跨机房的传输,因而具有更好的私密性。
- 保持监管合规性、金融服务、医疗保健行业和政府部门的敏感数据保护要求敏感数据不能进入互联网,通过使用私网连接可以满足对应行业的合规要求。
- 单向访问、私网连接只提供单向的服务,服务提供方无法通过私网连接主动访问服务使用方。
- 低时延、高可靠、由于通过高可靠的内网提供和使用服务,因此可以得到低时延高可靠的网络服务保证。
- 降低网络管理复杂度、当服务提供方通过私网连接PrivateLinke提供服务时对使用方的网络拓扑和网段规划没有任何要求,即便地址完全冲突也不影响使用。
在PrivateLink私网连接的服务提供方要提供服务时,需要用到【SLB负载均衡】服务来承载服务请求。负载均衡SLB是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务来扩展系统的服务吞吐能力,可以消除系统中的单点故障,提升应用系统的可用性。
阿里云SLB目前包含两种服务,分别是【CLB传统型负载均衡】和【ALB应用型负载均衡】。其中CLB传统型负载均衡能够提供包括TCP、UDP、HTTP、HTTPS协议的负载均衡服务、ALB应用型负载均衡能够提供包括HTTP、HTTPS、QUIC协议的负载均衡服务,QUIC是基于UDP的可靠传输协议,已经被IETF采纳作为最新的HTTP3.0的传输协议。
CLB就是最初的SLB,ALB是最近为了满足更精细的HTTP/HTTPS协议控制和支持最新的QUIC协议才上架的,在ALB上架后为了区分才将原先的SLB改名为CLB,并将ALB和CLB一起统称为SLB,所以先让我们来看下CLB传统型负载均衡:
(上图来自阿里云官网)
- 监听、这里的监听是负载均衡的服务入口,只有创建了监听才能将请求进行转发处理。CLB支持创建TCP、UDP、HTTP、HTTPS类型的监听。
- 后端服务、这里的后端服务负责最终对服务进行处理,后端服务节点可以是ECI弹性容器节点、ECS虚拟服务器。
- 健康检查、为了防止将服务请求转发到无法正常提供服务的节点,需要定时对所有的后端服务节点进行检查,及时将不能提供服务的节点从集群自动移除。
- 转发规则、基于不同的算法对服务请求转发到后端服务,包括完全随机、对不同处理能力的后端节点加权转发等。
ALB应用型负载均衡就像其名字一样被设计专门用来提供应用层的负载均衡,相对于CLB的HTTP/HTTPS的功能,ALB具有更强的性能和HTTPS卸载能力、并支持基于HTTP协议内容进行高级路由,支持包括基于HTTP头、Cookie、字符串匹配等方式来配置转发规则,并支持通过开放白名单来使用QPS限速、流量镜像、可编程脚本等高级功能。
(上图来自阿里云官网)
通过上图可以看到ALB应用型负载均衡可以基于HTTP头中的key-value值、cookie内容、主机头来将请求转发到不同的后端服务进行处理。
在创建ALB实例后,将得到一个ALB的入口域名,为了更好的标识服务的提供方和便于记忆,用户需要使用自己的域名CNAME替换掉该域名再对外提供服务。
ALB的入口域名至少对应两个VIP/EIP,基于高可用的考虑,这两个VIP/EIP要分布在不同的可用区。
(上图来自阿里云官网)
在ALB面向公网提供服务时每个可用区有一个EIP和一个VIP处理服务请求,在ALB面向私网提供服务时每个可用区有一个VIP负责处理请求。
(上图来自阿里云官网)
未完待续……