2.3 网络
2.3.1 云网络平台——洛神
阿里云操作系统叫作“飞天”,云网络平台称为“洛神”。作为飞天系统的核心组件,洛神平台支撑超大规模租户、超大规模虚拟机的高性能云网络。在飞天的基础架构里面,最上层是各种云产品,包括大家熟悉的RDS(Relational Database Service)、ECS(Elastic Compute Service)、VPC(Virtual Private Cloud)、SLB(Server Load Balancer)等,支撑这些云产品的是飞天的三个基础组件,即存储系统“盘古”、资源管理“伏羲”和云网络平台“洛神”。也就是说,洛神除支撑阿里云的网络云产品之外,还支撑其他云产品的网络基础设施。
洛神平台由很多网络设备组成,主要可以分为两类:虚拟交换机和各种网关设备。虚拟交换机负责ECS 的虚拟网络接入,网关设备提供了丰富的网络功能和服务。洛神平台架构如图2-25 所示。
图2-25 洛神平台架构
从系统架构上看,洛神平台由三大模块组成,即数据平面、控制平面和管理平面。
数据平面负责云网络中数据包的处理,它就如同物理世界中的网线和路由交换设备,把数据包高效率、低延迟地从发送端送到目的地。类似地,洛神的数据平面包含各种不同角色的组件,包括支持各种不同类型计算形态的虚拟交换机、用于数据中心互连的DCN 网关、用于云网络连接公网网关、用于云上云下互连的混合云网关、提供负载均衡能力的负载均衡网关、提供端接入能力的智能接入网关。为了提高这些组件的转发性能,洛神不仅使用了软转发技术,而且还对软硬件结合甚至纯硬件技术进行了广泛应用。
控制平面则控制如何处理数据包,它是洛神的业务大脑。从技术上看,洛神的控制平面是一个层次性的分布式控制系统,最底层的设备控制器主要负责控制和管理数据平面的各种组件,同时在每个区域都存在一个虚拟网络控制器,在全局存在一个全球路由控制器。区域的虚拟网络控制器负责本区域的云网络的管理与调度,全局路由控制器则负责协调调度各个区域的资源形成一张全球的云网络。基于虚拟网络控制器和全局路由控制器之上的则是NFV 控制器,其完成虚拟网络高级功能如VPN 等产品的编排和抽象。
洛神的管理平面是网络运维和运营的中枢,它管理着海量的网元以及用户,这里的海量指的是千万级虚拟机和百万级网元。为了做到这一点,洛神的管理平台是基于大数据以及机器学习技术实现的,它对网络运行当中产生的海量数据进行实时/ 离线计算、数据建模,来驱动网络资源的提前规划、网络系统的日常维护以及网络产品的智能运营。整个管理平面包括一套高性能、分布式的数据分析系统,由它分析出来的数据被提供给智能运维系统和智能运营系统,完成资源规划、网络建设、系统变更、实时监控、故障逃逸、产品运营等整个网络产品生命周期的工作。最终实现“在无人值守状态下执行网络变更”“先于用户发现问题”“高效、简单地完成故障逃逸”等丰富且全面的产品特性和用户运营效果。
下面将重点介绍基础的云网络核心技术:网络虚拟化技术和网络功能虚拟化(NFV)技术。
2.3.2 网络虚拟化
网络虚拟化技术是伴随着服务器虚拟化技术不断发展的,网络虚拟化重点解决了以下问题:
- 虚拟机虚拟网卡如何实现,以及它如何与外界物理网络设备进行交互。
毕竟ECS 实际上是一台虚拟机,不可能每台虚拟机都对应一块真正的物理网卡。
- 随着数据中心规模的不断扩大,传统二层组网方式逐渐暴露出一些技术短板,诸如VLAN 标签域存在数量上限4096、核心交换机MAC/ARP表项过大引发性能损耗、虚拟机跨三层网络无法热迁移等问题,严重阻碍了云数据中心规模发展。引入网络虚拟化技术,在基础网络上构建租户专有网络并构建大二层网络,是解决上述问题的一个有效方法。
如图2-26 所示,我们可以参考计算虚拟化、Overlay 的一些技术演进来了解网络虚拟化。网络虚拟化本质上是一个对虚拟机原始指令和报文进行封装/解封装的过程,让物理机系统虚拟机系统能承载,基础网络能承载虚拟网络。那么,虚拟机管理器(VMM)如何截获虚拟机网络I/O 指令,翻译成物理机内核协议栈的I/O 指令下发至网卡驱动? Overlay 技术如何基于传统IP 协议完成封装、交互和解封装,从而使得虚拟机能跨局域网甚至数据中心进行互访和迁移?这些问题通过网络虚拟化技术均可以得到完美解决。
图2-26 常见的虚拟化场景
下面将介绍三种网络虚拟化技术:网卡虚拟化、虚拟交换技术和最常见的Overlay 技术——VXLAN。
1. 网卡虚拟化
SR-IOV(Single Root I/O Virtualization)是基于网卡的虚拟化解决方案,可提升性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe 设备,并且在硬件中实现可以获得与服务器几乎一样的性能。一个SR-IOV 设备具有一个或多个PF,PF 是标准的PCIe 设备(比如网卡)。每个PF 都可以创建多个VF,VF 是“轻量级”的PCIe 设备,每个VF 都拥有独立的收发数据包的关键资源,如收发队列、DMA 通道等,并且与其他VF 共享其他非关键的设备资源。把一个VF 分配给一台虚机,该虚拟设备就具备了直接使用该VF 进行数据发送和接收的能力,并且可以直接进行I/O 操作。
2. 虚拟交换技术
虚拟机虚拟网卡是网络虚拟化的前端,其如何与物理网络设备进行交互,以及如何与其他虚拟机进行交互是实现虚拟化网络的关键。业界通用的实现方案是在物理服务器上部署一套虚拟交换机(vSwitch)作为虚拟机和物理网络的中继设备,提供基础二层转发能力和部分高级特性。
虚拟交换机有大家熟知的VMware ESXi vSwitch、开源的OpenvSwitch 和Linux Bridge,以及阿里云自研的第一代和第二代虚拟交换机AVS。下面重点介绍业界比较流行的开源虚拟交换机:OpenvSwitch(OVS)。
(1)OpenvSwitch
OpenvSwitch 是一个虚拟交换机软件,支持Xen/XenServer、KVM 以及VirtualBox 多种虚拟化技术,也支持802.1Q、网卡绑定、NetFlow/sFlow、GRE和VXLAN 隧道等功能。
OpenvSwitch 主要组件有datapath、vswitchd 和ovsdb,其中datapath 是负责数据交换的内核模块,它负责从网口读取数据,并快速匹配FlowTable 中的流表项,如果匹配成功,则直接转发,否则上交vswitchd 处理,它在初始化和端口绑定时注册钩子函数,把端口的报文处理接管到内核模块中;vswitchd 是一个守护进程,它是OVS 的管理和控制服务,通过UNIX Socket 将配置信息保存到ovsdb 中,并通过NetLink 和内核模块交互;ovsdb 则是OVS 的数据库,其中保存了OVS 配置信息。
如图2-27 所示,OpenvSwitch 数据包转发流程如下:
① 设置标准以太网接口模式为混杂模式,从以太网接口中截获数据包,提取出关键字段。如果能够匹配流表,则转入⑦,否则转入②。
② 通过调用upcall 函数,使用NetLink 协议封装数据包并上传到用户空间。在vswitchd 模块中对NetLink 消息解封装后,在ovsdb 中进行查表匹配,如果能够匹配流表,则转入④,否则转入③。
③ 通过 OpenFlow 协议与控制器通信,控制器下发流表项,vswitchd 模块通过解析流表项得到相应的动作,同时将流表项存储到ovsdb 中。
④ 将匹配的流表项组织成内核FlowTable 中的表项结构,并通过NetLink协议将流表项下发至内核的FlowTable 中。
⑤ 通过调用reinject 函数,使用NetLink 协议封装数据包,重新发回至内核中。
⑥ 重新通过datapath 模块进行流表项查找匹配。
⑦ 根据查找结果,指导数据包的转发。
图2-27 OpenvSwitch 数据包转发流程
如图2-28 所示,OpenvSwitch 可以建立网桥,将物理网卡和虚拟机TAP设备进行桥接,像交换机一样进行二层转发,为虚拟机和网络设备建立桥梁。虚拟机之间在学习到对方的ARP 信息后,可以正常通过OVS 和物理交换机进行数据转发。
图2-28 OpenvSwitch 网桥
(2)虚拟交换机演进
早期的虚拟交换机大多为纯软件实现,与Hypervisor 软件混合部署,为虚拟机提供基础转发功能,满足了早期发展需求。但是随着业务规模的扩大,以及用户需求的差异化,其缺点也凸显出来。
- 资源成本 :vSwitch 运行在宿主机上,需要独占 CPU 以及使用部分内存存取转发状态和相关配置,这就导致宿主机可售卖的CPU 和内存资源变少,造成了一定程度上的资源浪费。
- 虚拟化开销:无论虚拟机接收还是发送报文,都需要CPU执行memcpy的内存拷贝操作,而CPU 的内存拷贝开销是非常大的,特别是在大带宽场景下,严重制约了vSwitch 的转发性能。
- 流量无法隔离:虚拟机的流量和宿主机本身的流量(如存储流量)会互相争抢,因为大家走的都是内核网络协议栈的收发流程。当存储流量大时,必然会影响到虚拟机自身的网络流量转发。
由于纯软件虚拟交换机无法摆脱性能的限制,也使得最近几年业界开始聚焦在智能网卡(SmartNIC)上。通过将vSwitch 的部分功能或全部功能卸载转移到网卡上,利用网卡CPU 或者网卡硬件转发来提高网络性能。例如,OpenvSwitch 通过Linux TC(Traffic Control)Flower 模块可以将datapath 下沉到物理网卡,提升云了转发效率;阿里虚拟交换机基于软硬件一体化方式,使用神龙 MOC 卡实现快速转发,转发性能提升数倍,达到千万 PPS,如图2-29所示。
图2-29 阿里云自研的AVS 演进
3. VXLAN 技术
(1)背景
介绍完虚拟网卡和虚拟交换技术,大家了解了虚拟机虚拟网卡和宿主机、虚拟交换机、网络设备交互的流程,同时我们也需要更多思考在数据中心层面如何承载更多的虚拟机业务。传统数据中心内部二层网络多采用VLAN 技术进行租户和业务隔离,但随着业务的发展,VLAN 4096 个VLANID 规模已无法满足大规模云计算中心业务及应用组网的需求,不断扩展的虚拟机规模容易使TOR 交换机的MAC/ARP 表项面临溢出的问题,同时难以实现跨三层的虚拟机二层互通及迁移场景。
而云计算业务发展对数据中心网络的需求是:
- 允许应用在任意(拥有空闲计算资源的)服务器上灵活部署而不受物理网络的限制,提升业务的敏捷性。支持包括站点灾难恢复、业务迁移在内的场景。
- 跨集群甚至跨多个计算中心的可迁移性。
- 按需进行虚拟网络部署,而无须重新配置物理网络;支持多租户环境下的大规模网络部署。
考虑到采用传统VLAN 技术部署应用存在的局限性,以及VXLAN 技术相关特性,根据云计算背景下数据中心内部二层组网需求,业界引入VXLAN技术在数据中心及城域网等场景下进行部署,试图从拓展二层子网数量、满足多数据中心场景等维度实现大规模虚拟机部署,同时VXLAN 作为OverLay隧道技术配合其他DCI 技术(如EVPN 等)能够灵活实现跨三层的二层扩展,充分满足云业务对网络承载的需求。
(2)介绍
VXLAN(虚拟可扩展局域网)是一种Overlay 网络技术,将二层数据帧封装至UDP 报文进行转发,可以跨三层网络创建一个完全虚拟化的基础二层云网络,内层的虚拟机可以跨三层物理网络访问其他虚拟机。目前洛神平台的VPC 基础隧道技术就是基于VXLAN 演化而来的,VXLAN 技术也是目前业界最流行的云网络Overlay 技术。
(3)VXLAN 报文解析
VXLAN 在内层原始以太帧基础上加了8 字节的VXLAN 头,外层分别是UDP 头、IP 头、MAC 头,共50 字节的封装报文头,如图2-30 所示(具体字段及属性参数可参见RFC 7348)。
图2-30 VXLAN 报文组成示意图
(4)VXLAN 实现原理
a. VXLAN 基本概念
在VXLAN 技术实现中,涉及的基本概念有VNI(VXLAN Network Identifier)、VTEP(VXLAN Tunnel End Point)、VXLAN Segment、VXLAN Gateway 等。
- VNI 作为VXLAN 标识,主要用于标识不同的VXLAN 域。
- VTEP 可由支持 VXLAN 的硬件设备或软件来实现,其主要负责对VXLAN 报文进行封装/ 解封装,包括ARP 请求报文和正常的VXLAN数据报文,在一端封装报文后通过隧道向另一端VTEP 发送封装的报文,另一端VTEP 接收到封装的报文并解封装后根据封装的MAC 地址进行转发。所有VM(虚拟机)加入VXLAN 实际上是通过VTEP 加入一个VXLAN 关联组播组的方式来实现的:每个VTEP 上都会维护一张表,记录属于同一个VXLAN 域内VM 的MAC 地址,以及其所属主机的VTEP 的IP 地址。
- VXLAN Segment 表示实现 VM 之间通信的 VXLAN 二层 Overlay 网络,在这个网络内VM 可以互相通信并实现灵活迁移。
- VXLAN Gateway 一般被放置在应用场景的边界,对内终结 VXLAN,对外通过DCI 相关技术如EVPN 等实现跨数据中心、跨地理区域的大二层及以上网络互通。
b. VXLAN 控制平面和数据平面
VXLAN 控制平面(VNI、内层MAC、外层VTEP_IP)主要通过映射表的方式实现。对于不认识的MAC 地址,VXLAN 依靠ARP 协议及组播交互的方式来获取路径信息,同时VXLAN 还有自学习功能,当VTEP 接收到一个UDP 数据包后,会检查自己是否收到过这台虚拟机的数据,如果没有收到过,VTEP 就会记录源VNI 、源外层IP 地址、源内层MAC 地址的对应关系,避免组播学习。
在数据中心内部有控制器部署的场景下,可由控制器负责所有映射表的收集汇总并提供给各节点通过单播查询获取映射关系。
VXLAN 采用UDP 封装报文在VTEP 之间构建了基于隧道的数据平面,VTEP 可以为物理实体或逻辑实体,实现数据报文跨三层甚至跨数据中心的转发,但需注意转发途经的网络设备MTU 值的调高,保证相应的VXLAN 数据包顺利通过。VXLAN 利用IP 多播封装广播报文和多播报文,可以限制虚拟网络的广播域,从而控制广播泛洪;可以对不同的数据流使用不同的UDP 源端口实现ECMP(等价多路径负载均衡)。
c. VXLAN 发现和地址学习过程
如图2-31 所示,在VXLAN 网络模式下,主机之间的转发过程如下:
① VM-A(MAC-A、IP-1)和VM-B(MAC-B、IP-2)通过VTEP 连接到VXLAN 网络(VNI 10),两个VXLAN 主机加入IP 多播组239.1.1.1 ;VM-A以广播的形式发送ARP 请求。
② VTEP-1 封装报文,打上VXLAN 标识为10,外层IP 头DA 为IP 多播组(239.1.1.1),SA 为IP_VTEP-1 ;VTEP-1 在多播组内进行多播。
③ VTEP-2/VTEP-3 分别解析接收到的多播报文,填写映射表(内层MAC地址、VNI、外层IP 地址),同时相应的VM 对接收到的VM-A ARP 请求进行判断处理。
④ VM-B 发现该请求是发给它的,于是发出ARP 响应报文。
⑤ VTEP-2 接收到VM-B 的响应报文后, 把它封装在IP 单播报文中(VXLAN 标识为10),然后向VM-A 发送单播报文。
⑥ VTEP-1 接收到单播报文后,学习内层MAC 地址到外层IP 地址的映射,解封装并根据被封装内容的目的MAC 地址转发给VM-A。
⑦ VM-A 接收到VM-B ARP 应答报文,ARP 交互结束。
VXLAN 单播数据流转发过程如图2-32 所示。
按照ARP 协议完成协商应答后,VTEP-1 和VTEP-2 上都会形成一个VXLAN 二层转发表,大致如表2-1 和表2-2 所示。(不同厂商表项可能略有不同,但最主要的是其中的元素)。
表2-1 VTEP-1 VXLAN 二层转发表
表2-2 VTEP-2 VXLAN 二层转发表
单播数据流转发过程如下:
① VM-A 将原始报文上送到VTEP。
② 根据目的MAC 地址和VNI,查找到外层的目的IP 地址是VTEP-2 IP地址,然后将外层的源IP 地址和目的IP 地址分别封装为VTEP-1 IP 地址和VTEP-2 IP 地址,源MAC 地址和目的MAC 地址分别为下一段链路的源MAC地址和目的MAC 地址。
图2-31 VXLAN 发现和地址学习过程
图2-32 VXLAN 单播数据流转发过程
③ 数据包穿越IP 网络。
④ 根据VNI、外层的源IP 地址和目的IP 地址进行解封装,通过VNI 和目的MAC 地址查表,得到目的端口是e1/1。
⑤ VM-B 接受此原始报文,并回复VM-A,回复过程同上。
通过VXLAN 技术,虚拟化平台可以跨三层网络甚至跨数据中心建立,虚拟机之间通过大二层进行互访。同时基于VXLAN 技术和虚拟交换技术、SDN技术的结合,也提供了大规模租户网络隔离方案、可行的虚拟机热迁移方案、ARP 代理和单播方案,为大规模云计算中心构建打下了基础。
2.3.3 NFV 关键技术
NFV 即网络功能虚拟化,通过使用x86 等通用性硬件以及虚拟化技术,承载多功能的软件处理;通过软硬件解耦及功能抽象,使网络设备功能不再依赖专用硬件,充分灵活共享资源,实现新业务的快速开发和部署,并基于实际业务需求进行自动部署、弹性伸缩、故障隔离和自愈等。洛神平台提供了NFV 平台,各业务网元可通过该平台进行构建,如VPC 网络、弹性IP 地址、流量控制、NAT 网关、SLB 等,下面章节将重点展开介绍。
1. VPC 网络
随着云计算的不断发展,对虚拟化网络的要求越来越高,例如,要求具有弹性、安全性(Security)、可靠性(Reliability)和私密性(Privacy),并且还有极高的互联性能(Performance)需求,因此催生了多种多样的网络虚拟化技术。
随着虚拟化网络规模的扩大,这种方案中的网络隔离性、广播风暴、主机扫描等问题会越来越严重,同时私网IP 地址限制、用户无法自定义网络编排等也给用户体验带来了影响。为了解决这些问题,阿里云引入了虚拟专有网络(Virtual Private Cloud,VPC),为用户提供可靠、安全、可编排的网络服务。
(1)VPC 概念
VPC 是基于阿里云构建的一个隔离的网络环境,专有网络之间逻辑上彻底隔离。专有网络是用户自己独有的云上私有网络。简单来说,就是用户的云上网络不再是和其他用户共享的网络,而是有自己的独立网络配置空间,对其他用户是不可见的。
举个例子,A 用户使用了192.168.0.1 这个IP 地址,B 用户也可以使用,但A 用户的任何网络配置都不会影响B 用户,因为这两个用户都处于各自的虚拟专有网络中,互不影响。
用户可以完全掌控自己的专有网络,比如选择IP 地址范围、配置路由表和网关等,用户可以在自己定义的专有网络中使用阿里云资源如ECS、RDS、SLB 等。
用户可以将自己的专有网络连接到其他专有网络或本地网络,形成一个按需定制的网络环境,实现应用的平滑迁移上云和对数据中心的扩展,如图2-33所示。
图2-33 专有网络互联
(2)组成部分
每个VPC 都由一个路由器、至少一个私网网段和至少一个交换机组成,如图2-34 所示。
图2-34 VPC 组成元素
- 私网网段。在创建专有网络和交换机时,需要以CIDR 地址块的形式指定专有网络使用的私网网段。
- 路由器。路由器(vRouter)是专有网络的枢纽。作为专有网络中重要的功能组件,它可以连接VPC 内的各个交换机,同时它也是连接VPC和其他网络的网关设备。每个专有网络创建成功后,系统都会自动创建一个路由器,每个路由器都关联一张路由表。
- 交换机。交换机(vSwitch)是组成专有网络的基础网络设备,用来连接不同的云资源。创建专有网络后,可以通过创建交换机为专有网络划分一个或多个子网。同一专有网络内的不同交换机之间内网互通,可以将应用部署在不同可用区的交换机内,提高应用的可用性。
(3)原理描述
基于目前主流的Overlay 技术——VXLAN,专有网络隔离了虚拟网络。每个VPC 都有一个独立的VNI,一个VNI 对应着一个虚拟网络。一个VPC 内的ECS 实例之间的数据包传输都会加上隧道封装,带有唯一的VNI,然后送到物理网络上进行传输。不同VPC 内的ECS 实例因为所在的VNI 不同,本身处于两个不同的路由平面,所以它们之间无法进行通信,天然地进行了隔离。
基于Overlay 技术和软件定义网络(Software Defined Network,SDN)技术,阿里云研发团队在硬件网关和自研交换机设备的基础上实现了VPC 产品。
(4)逻辑架构
如图2-35 所示,VPC 包含交换机、网关和控制器三个重要组件。交换机和网关组成了数据通路的关键路径,控制器使用阿里云自研的协议下发转发表到网关和交换机,完成了配置通路的关键路径。整体架构里面,配置通路和数据通路互相分离。交换机是分布式的节点,网关和控制器都是集群部署且是多机房互备的,并且所有链路上都有冗余容灾,提升了VPC 产品的整体可用性。
图2-35 VPC 逻辑架构
2. 弹性IP 地址
IP 是 Internet Protocol 的缩写,它是为计算机互联而设计的协议,是 TCP/IP 网络模型的基础协议,是现行网络体系中重要的传输媒介。IP 地址分类有多种方式,比如在日常使用中,常将 IP 地址分为私网地址和公网地址,由于公网地址资源的匮乏,常通过 NAT 的方式访问公网地址;按协议族可分为 IPv4地址和 IPv6 地址。
在云上,一台弹性计算服务器(ECS)的网卡代表着其转发能力,而服务器上配置的 IP 地址代表着其业务能力。IP 地址是弹性计算服务器访问外部或被外部访问的主要方式。在早期的经典网络中,云上服务器有两张网卡,其中公网网卡可以配置一个公网 IP 地址访问公网域,私网网卡可以配置一个私网IP 地址访问私网域。而在 VPC 中,相比经典网络,IP 地址具有更多的类型和特性,包括私网 IP 地址、弹性公网 IP 地址、弹性公网 IP 地址的网卡可见模式、IPv6 地址等,后面将详细讲解。
(1)私网 IP 地址
私网 IP 地址,顾名思义,它是一个私网地址域里的地址。在 VPC 中,大部分私网 IP 地址遵循 RFC 1918 中地址的分类,采用以下三个地址段作为 VPC的私网地址段。
- 10.0.0.0 ~ 10.255.255.255(10/8 位前缀)
- 172.16.0.0 ~ 172.31.255.255(172.16/12 位前缀)
- 192.168.0.0 ~ 192.168.255.255(192.168/16 位前缀)
用户在创建 VPC 时,可以选择这三个地址段中的一个作为 VPC 的私网地址段。在创建弹性计算实例或者弹性网卡时,会根据其所属的 VPC 和交换机分配一个私网 IP 地址。不同于物理网络,云上的私网 IP 地址都是由 SDN 控制器来管理的,直接在弹性计算服务器内配置一个未分配的 IP 地址是不能直接访问 VPC 的。使用私网 IP 地址不可以直接访问公网,如果要访问公网,则需要绑定弹性公网 IP 地址或者 NAT 网关等。私网 IP 地址可以用于以下场景中:
- 负载均衡。
- 同一 VPC 内弹性计算实例之间内网互访。
- 同一 VPC 内弹性计算实例与其他云服务(如 OSS、RDS 等)之间内网互访。
- 通过高速通道连通的不同 VPC 的弹性计算实例访问。
不同于很多云服务提供商的实现,阿里云上的云服务是可以使用私网 IP地址作为其实例地址的。这使得云计算不需要绑定公网 IP 地址即可访问对应的云服务,既让用户的网络环境更加安全,又降低了使用成本。
(2)网卡多 IP 地址
网卡多 IP 地址指的是为单张网卡分配多个私网 IP 地址,网卡上原来分配的地址被称为“主 IP 地址”,而附加的 IP 地址被称为“辅助 IP 地址”。辅助 IP地址必须与网卡所在的交换机网段相同,IP 地址既可由用户指定,也可由系统分配。
辅助 IP 地址除了具备基本的私网访问能力,还可以:
- 绑定弹性公网 IP 地址。
- 通过 NAT 网关访问公网。
- 负载均衡后端 IP 地址。
在大多数场景下,为一张网卡分配一个私网 IP 地址足以满足大部分需求,但在有些场景下,用户希望为网卡分配更多的 IP 地址,用于承载更多样的业务。
在云原生“大火”的当下,用户在弹性计算服务器上部署 Kubernetes 集群,构建云原生容器网络,需要为弹性计算服务器或弹性网卡配置更多的 IP 地址。当然,用户可以通过自定义网段或 Overlay 方式来配置多个 IP 地址。但是这些自定义的网段是不能使用云上各种各样的服务的,特别是 Overlay 方式增加了一层 Overlay 的外层包封装和解封装,对性能影响较大。而相应地,基于网卡多 IP 地址是产品化的方案,网卡多IP 地址几乎可以使用网卡主 IP 地址所有的云上特性,同时又有与弹性网卡相当的性能。辅助 IP 地址相比于弹性网卡是一种轻量级的实例,API 性能会好很多,同时弹性网卡受 PCI 地址的限制,单弹性计算服务器最多只能有 26 个,因此在部署容器类业务时有更大的优势。
(3)弹性公网 IP 地址
弹性公网 IP 地址(Elastic IP Address,EIP)是可以独立购买与持有的公网IP 地址资源。目前,弹性公网IP 地址可被绑定到专有网络类型的弹性计算实例、专有网络类型的私网 SLB 实例、NAT 网关、高可用虚拟 IP 地址、弹性网卡、辅助 IP 地址等多种资源上。
弹性公网 IP 地址的优势如下:
- 独立购买与持有 :可以单独持有一个弹性公网 IP 地址,作为账户下的一个独立资源存在,无须与其他计算资源或存储资源绑定购买。
- 弹性绑定:可以在需要时将弹性公网 IP 地址绑定到所需的资源上 ;在不需要时,将之解绑并释放,避免不必要的计费。不同于经典网络的公网 IP 地址,对弹性公网 IP 地址可以灵活地进行绑定和解绑,更换所绑定的弹性计算实例,便于业务平滑迁移。
- 可配置的网络能力 :可以根据需求随时调整弹性公网 IP 地址的带宽值,修改即时生效。弹性公网 IP 地址本质上是一种 NAT IP 地址,它实际位于公网网关上,通过 NAT 方式映射到被绑定的资源上。EIP 与云资源绑定后,云资源可以通过 EIP 与公网通信,因此,弹性公网 IP 地址不同于经典网络的公网 IP 地址,它在被绑定到弹性计算实例内部后是不
- 能直接查看的。
(4)公网直通 IP 地址
正因 IPv4 地址资源匮乏,所以将私网 IP 地址通过 NAT 封装成公网 IP 地址访问公网是一种比较合理的方式。但由于 NAT 本身对数据包是有损转发的,所以对于应用层数据载荷中存在的 IP 地址或端口协议,仅对网络层和传输层的 IP 地址和端口进行NAT 转发是不够的,比如 H.323、SIP、FTP、SQLNET、DNS 等协议,当载荷里的IP 地址或端口不能被 NAT 封装时,这些协议便不能正常工作。业界常用的解决方案是 NAT ALG,而 NAT ALG 方案本身需要保存会话,同时需要修改更多的数据,系统复杂性较高,性能也会有一定的损耗。
前面提到,EIP 本身是一种 NAT IP 地址,虽然解决了弹性需求的问题,但由于没有 NAT ALG 的功能,对一些协议并不支持。另外,EIP 本身在弹性计算服务器系统内不可见,在一定程度上增加了管理复杂度。
为了解决 NAT IP 地址的不足,满足 VPC 下 NAT ALG 的需求,阿里云推出了EIP 网卡可见模式——既保持了 EIP 的弹性能力,又可以不经过 NAT 直接配置在弹性计算服务器里。这样就从另一个角度解决了 EIP 因为 NAT 而产生的缺陷,提升了用户体验,如图2-36 所示。
图2-36 普通模式与EIP 网卡可见模式
此外,为了给容器等业务提供更多直通 IP 地址,阿里云还推出了多个 EIP的网卡可见模式,解决在容器应用场景下 NAT 带来的问题。
(5)IPv6 地址
随着互联网的急速发展,IPv4 地址资源基本消耗殆尽,2011 年 2 月 3 日,ICANN 宣告 IPv4 的公网地址已经全部分配,43 亿个 IP 地址总量已经远远不能满足行业的发展需求,特别是近几年物联网的快速发展,对 IP 地址的需求越来越大。早在 1993 年,为解决地址资源枯竭问题,IPng(IP next generation)工作组成立,并在 1995 年发布第一个规范(RFC 1883),然而 IPv6 的发展却非常缓慢。
IPv6 地址采用128 位的编址方式,地址空间容量是 IPv4 地址的 296 倍,几乎可以为每一粒沙子分配一个 IPv6 地址,不仅增加了地址空间,还提供了更高效的 IP 报头,协议在支持移动性、加密、认证、服务质量等方面比 IPv4前进了一大步,如图 2-37 所示。
图2-37 IPv6 报头结构
2018 年,阿里云支持 IPv6 地址,弹性计算服务器从此可以配置 IPv6 地址,对外提供服务。阿里云 IPv6 地址采用 GUA(Global Unicast Address),既可用于私网访问,也可用于公网访问,同时在访问公网时不再需要 NAT,彻底解决了 IPv4 中NAT ALG 相关问题。在VPC IPv6 的地址分配中,完全可以按需划分子网段,网络可运维性有了较大的提升。
IPv4 是过去式,IPv6 是将来式,阿里云 VPC IPv6 的整体生态体系也在演进中,逐渐丰富,不会停止。
3. 流量控制
云主机的流量控制包含两个层面:一是规格限速,根据购买的云主机规格,对云主机的整体网络能力的限制,包括 PPS(Packet Per Second)和 BPS(Bandwidth Per Second)限制。这是因为同一台宿主机上的云主机共享宿主机的物理带宽资源,单台云主机只能占用实例规格定义的网络能力,不会额外挤占物理机共享带宽,保证租户的隔离性。二是业务限速,根据云主机实际访问的流量类型进行的精细限速,如果云主机访问公网,那么它就会被用户实际购买的公网带宽限速。
(1)规格限速
云主机实例规格不仅定义了实例的 CPU 和内存的配置(包括 CPU 型号、主频等),同时也规定了该实例最大网络带宽、收发包处理能力(PPS)、支持的弹性网卡数目和每块弹性网卡支持的队列数目。规格限速不区分流量类型,只要总流量超过规格定义的最大带宽或 PPS,宿主机上的虚拟交换机就直接丢弃数据包。规格限速作用在实例级别,对于使用了多网卡的云主机,引入限速组概念,将虚拟机的所有弹性网卡加入同一限速组,通过对限速组进行限速,保证所有弹性网卡的总流量不超过实例规格。规格限速示意图如图 2-39 所示。
图2-38 规格限速示意图
(2)业务限速
业务限速指根据云主机流量访问的是私网还是公网,是否跨可用区、跨地域(高速通道),分别进行限速。公网限速与高速通道限速在业务逻辑及实现上均大同小异,而公网限速应用范围最广,这里重点介绍公网限速。
VPC 默认无法访问公网,只有配置弹性公网 IP 地址或 NAT 网关才能连接公网。EIP与云资源绑定后,云资源可以通过 EIP 与公网通信。EIP 可被绑定到 VPC 类型的弹性计算实例、弹性网卡、VPC 类型的私网 SLB 实例,以及 NAT 网关实例上。NAT 网关是一种企业级的 VPC 公网网关,提供 NAT 代理(SNAT 和 DNAT)。NAT 网关与 EIP 最大的区别是, EIP 只能被绑定到单台云主机上,而 NAT 网关支持 VPC 内多台云主机共享同一个弹性公网 IP 地址访问公网。对于保有大量云主机的企业客户来说,购买一个 NATGW 实例就能让 VPC 内所有云主机都具备公网访问能力,并且将流量统计、监控都统一到单个实例上,简化管理运维。业务限速示意图如图 2-39 所示。
图2-39 业务限速示意图
(3)流量计费
为了满足峰值流量需求,用户往往需要购买较大带宽,这就造成了在流量低峰时带宽浪费的情况。另外,大部分用户既购买了 EIP,又购买了 NAT 网关,总是存在 EIP 的带宽还有富余,而 NAT 网关的带宽已经不足的情况,或者反之。为了节省用户的成本,最大化地利用资源,在网络产品中又诞生了“共享流量包”和“共享带宽包”两个产品。
- 共享流量包。共享流量包是公网流量的预付费套餐,价格比后付费流量的更低,并支持闲时峰谷流量包,大大降低了公网流量成本。共享流量包产品覆盖面广,按流量计费的ECS、EIP、SLB 和 NAT 网关都可以使用,且支持闲时流量包,价格更低。
- 共享带宽包。共享带宽包是独立的带宽产品,提供高质量的多线 BGP带宽和丰富多样的计费模式,支持将 EIP 添加到共享带宽包中,这些EIP 将同时共享和复用带宽包中的带宽。用户将 EIP 绑定到专有网络ECS、NAT 网关、专有网络 SLB 等,让这些产品也可以使用共享带宽包。
4. NAT 网关
(1)基本概念
NAT 网关(NAT Gateway)是一款企业级的公网网关,提供NAT 代理(SNAT和DNAT)、高达10Gb/s 级别的转发能力以及跨可用区的容灾能力。NAT 网关与共享带宽包配合使用,可以组合成高性能、配置灵活的企业级网关。NAT网关架构如图2-40 所示。
图2-40 NAT 网关架构
NAT 技术是一种缓解IPv4 公网地址枯竭的方案,通过NAT 技术可以让大量的私网IP 地址使用少量的公网IP 地址与Internet 进行互访。
SNAT 和DNAT 是NAT 网关为ECS 提供公网服务的两种方式。SNAT 为源地址映射,即可以将内网ECS IP 地址转换成公网IP 地址,从而提供访问公网的能力。SNAT 只限于内网ECS 主动发起的外网访问请求。DNAT 为目的地址映射,即可以将公网地址映射成内网IP 地址,这样外部应用就可以主动访问到内部资源。DNAT 分为端口转发和IP 地址映射,其中端口转发指的是将同一个公网IP 地址+ 不同端口映射到不同内网IP 地址+ 不同端口;IP 地址映射是指将固定的公网IP 地址映射到唯一的内网IP 地址,内外网IP 地址一一对应。如表2-3 所示,DNAT 和SNAT 需要在NAT 网关上维护两张配置表,分
别为DNAT 表和SNAT 表。
表2-3 DNAT表和SNAT表
(2)产品优势
NAT 网关具有以下优势:
- 灵活易用的转发能力。NAT 网关作为一款企业级 VPC 公网网关,提供SNAT 和DNAT 功能,用户无须基于云服务器自己搭建公网网关。NAT网关功能灵活、简单易用、稳定可靠。
- 高性能。NAT 网关是基于阿里云自研的分布式网关,采用 SDN 技术开发的一种虚拟网络硬件。NAT 网关支持10Gb/s 级别的转发能力,为大规模公网应用提供支撑。
- 高可用。NAT 网关跨可用区部署,可用性高,单个可用区的任何故障都不会影响NAT 网关的业务连续性。
- 按需购买。NAT 网关的规格、EIP 的规格和个数均可以随时升降,轻松应对业务变化。
(3)使用场景
NAT 网关适用于专有网络类型的ECS 实例需要主动访问公网和被公网访问的场景。
- 搭建高可用的 SNAT 网关。在 IT 系统中,往往存在一些服务器需要主动访问Internet,但出于安全性考虑,应避免将这些服务器所持有的公网IP 地址暴露在公网上。此时,可以使用NAT 网关的SNAT 功能实现这一需求,如图2-41 所示。
图2-41 SNAT 功能架构
- 提供公网服务。NAT 网关支持 DNAT 功能,将 NAT 网关上的公网 IP地址映射给ECS 实例使用,使ECS 实例能够提供互联网服务。DNAT支持端口映射和IP 地址映射,只需要在NAT 网关上创建DNAT 规则即可实现。DNAT 规则配置参数如表2-4 所示。
表2-4 DNAT规则配置参数
- 共享公网带宽。如果应用面向互联网,则需要为该应用购买公网带宽。为了应对业务流量可能发生的变化,在购买带宽时会考虑一定的冗余。当IT 系统中同时存在多个面向互联网的应用时,为每个应用购买冗余带宽会造成资源和成本的浪费。解决方式是将多个EIP 加入共享带宽包中,可以更好地进行公网带宽资源的管理和成本的控制。另外,多个面向互联网的应用可能存在流量错峰的情况,多个EIP 共享带宽功能可以进一步缩减公网带宽总量。
5. SLB
负载均衡(Server Load Balancer,SLB)是将访问流量根据转发策略分发到后端多台云服务器(ECS 实例)的流量分发控制服务。同时负载均衡服务还扩展了应用的服务能力,增强了应用的可用性。负载均衡转发示意图如图2-42所示。
图2-42 负载均衡转发示意图
负载均衡服务通过设置虚拟服务地址,将添加的同一地域的多个ECS 实例虚拟成一个高性能和高可用的后端服务器池,并根据转发规则将来自客户端的请求分发给后端服务器池中的ECS 实例。
负载均衡服务默认检查云服务器池中的ECS 实例的健康状态,自动隔离异常状态的ECS 实例,消除了单个ECS 实例的单点故障,提高了应用的整体服务能力。此外,负载均衡服务还具备防御DDoS 攻击的能力,增强了应用服务的防护能力。
(1)基础架构说明
负载均衡基础架构采用集群部署,提供四层(TCP 和UDP)和七层(HTTP和HTTPS)的负载均衡服务,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。
负载均衡作为流量转发服务,将来自客户端的请求通过负载均衡集群转发至后端服务器,后端服务器再将响应通过内网返回给负载均衡服务。
阿里云当前提供四层和七层的负载均衡服务。四层采用开源软件LVS(Linux Virtual Server)+ keepalived 的方式实现负载均衡,并根据云计算需求对其进行个性化定制。七层采用Tengine 实现负载均衡。Tengine 是由淘宝网发起的Web 服务器项目,它在Nginx 的基础上,针对有大访问量的网站需求添加了很多高级功能和特性。
如图2-43 所示,各个地域的四层负载均衡服务实际上是由多台LVS 机器部署成一个LVS 集群来运行的。采用集群部署模式,极大地保证了异常情况下负载均衡服务的可用性、稳定性与可扩展性。
图2-43 负载均衡基础架构
(2)入网流量路径
对于入网流量,负载均衡服务会根据用户在控制台或API 上配置的转发策略,对来自前端的访问请求进行转发和处理。入网流量路径如图2-44 所示。
- TCP/UDP和 HTTP/HTTPS 的流量都需要经过LVS集群进行转发。
- LVS 集群内的每一台节点服务器都均匀地分配海量访问请求,并且每一台节点服务器之间都有会话同步策略,以保证高可用。
- 如果相应的负载均衡实例服务端口使用的是四层协议(TCP 或UDP),那么LVS 集群内的每个节点都会根据负载均衡实例的负载均衡策略,将其承载的服务请求按策略直接分发到后端ECS 服务器。
- 如果相应的负载均衡实例服务端口使用的是七层 HTTP,那么 LVS集群内的每个节点都会先将其承载的服务请求均分到Tengine 集群,Tengine 集群内的每个节点再根据负载均衡策略,将服务请求按策略最终分发到后端ECS 服务器。
- 如果相应的负载均衡实例服务端口使用的是七层 HTTPS,与上述HTTP 处理过程类似,差别是在将服务请求按策略最终分发到后端ECS 服务器前,先调用Key Server 进行证书验证以及数据包加解密等前置操作。
图2-44 入网流量路径
(3)出网流量路径
负载均衡服务和后端ECS 服务器之间是通过内网进行通信的。出网流量路径如图2-45 所示。
图2-45 出网流量路径
总体原则:流量从哪里进来,就从哪里出去。
- 通过负载均衡服务进入的流量,在负载均衡服务上限速或计费,仅收取出方向流量费用,不收取入方向流量费用(未来可能会改变),负载均衡服务与后端ECS 服务器之间的通信属于阿里云内网通信,不收取流量费用。
- 来自弹性公网 IP 地址或 NAT 网关的流量,分别在弹性公网 IP 地址或NAT 网关上进行限速或计费。如果在购买ECS 时选择了公网带宽,则限速/ 计费点在ECS 上。
- 负载均衡服务仅提供被动访问公网的能力,即后端 ECS 服务器只有在收到通过负载均衡服务转发来的公网的请求时,才能访问公网回应该请求,如果后端ECS 服务器希望主动发起公网访问,则需要配置或购买ECS 公网带宽、弹性公网IP 或NAT 网关来实现。
- ECS 公网带宽(购买 ECS 时配置)、弹性公网 IP 地址、NAT 网关均可以实现ECS 的双向公网访问(访问或被访问),但没有流量分发和负载均衡的能力。