01 背景
随着云计算和网络技术的不断发展,越来越多的业务有着上云的需求。上云后业务能够使用云上已有的服务提升开发效率,也可以利用云平台的弹性伸缩特性,及时应对业务的负载变化。360内部也提出业务全部上云的战略目标,业务上云后,每个子业务可以由运维人员按需自由地划分到一个或多个VPC中,并且可以灵活的定义VPC内的IP地址范围、配置路由表和网关等,给业务带来灵活性的同时,也因为各个VPC间是天然隔离关系,从而保证了子业务的安全性和独立性。
在业务全面上云的过程中,也会发现不同VPC间的子业务又有着互通需求,例如某个事业部下面有多个子业务分属于不同的VPC,部分子业务间有些互通需求,相同的子业务也可能存在跨地域部署的场景,这种就属于不同地域的VPC间也有着互通需求。如何使得各子业务间一方面保证VPC带来的灵活性以及安全隔离的特性,同时也能保证这种复杂业务场景下的互通需求?
360的虚拟化研发团队针对类似需求,提出了云联网解决方案以满足跨VPC和跨地域网络的互联互通。
02 云联网介绍
云联网(Cloud Connect Network)提供一种能够快速构建跨区域VPC之间以及云上多VPC与云下多数据中心之间的高速、优质、稳定的互联互通能力,在其高度灵活性和隔离性的基础上提供了按需互联互通的能力,实现原理如下图所示。
2.1云联网应用场景
1.多VPC间互联互通
现实应用中会存在多个VPC间具有互联互通需求,这时可以把多个VPC同时加入一个云联网实例中实现多VPC间的互联互通。
2.跨区域多VPC互联互通
公司的北京分部和香港分部需要进行私网通信和数据传输,通过云链接将北京和香港两个区域的VPC建立连接,使得两地的数据中心网络可以互访,同时可无障碍的访问VPC之上的业务系统。
2.2云联网与对等连接/专用通道的区别
在使用云联网之前,如果要实现多个 VPC 互通、IDC 和多个 VPC 互通,需要为VPC 间两两分别建立对等连接,为 IDC 到每一个 VPC 建立专用通道,且各 VPC、IDC 网段均不能重叠,否则无法建立连接。建立连接后,还需管理各实例的路由表,手动添加路由策略后才能实现互通。
上述场景如果使用云联网,只需创建一个云联网实例,将需要互联的 VPC 和 IDC 加入到该云联网中,即可实现所有 VPC、IDC 与多个 VPC 的互通。
云联网优势 | 对等连接/专用通道 | 云联网 |
链路全网互联 | 1. n 个 VPC 间全部联通需要建立 Cn2 条对等连接。其中,Cn2=n * (n-1)/2,n 表示 VPC 的个数。即,当有 4 个 VPC 需要互联时,需要 6 条对等连接链路。 | 1. 无需创建对等,加入云联网的实例 fullmesh 互联。 |
路由自动学习 | 1. 每条链路均需配置路由。 | 1. 路由自动学习,下发。 |
03 云联网实现方案
3.1 云联网方案设计
各区域VPC与云联网集群间使用vxlan隧道进行互联互通,不同VPC流量通过vxlan隧道到达云联网服务器之后,通过查询路由表完成路由寻址最终把流量路由到目的VPC。
一组互联互通的VPC在云联网网关服务器上对应一个虚拟交换实例,为支持多组VPC间的互联互通,360虚拟化研发团队参考linxu内核的VRF方案提出了云链接交换实例(CCSI),用于隔离不同虚拟交换实例间的路由表项。
CCSI (cloud connect switch instance) 云链接交换实例,是由路由表和一组网络设备组成的虚拟路由器实例,可以完成流量寻路和路由表隔离功能。
3.2 云联网服务器架构
为了保证云联网网关的转发性能,360研发团队采用了目前主流的高性能DPDK转发套件,并实现了简易的用户态及协议栈和CCSI路由隔离和转发机制,具体架构如下:
360研发团队通过使用内核by-pass、零拷贝、大页内存、轮询收发包、无锁化等一系列技术使其单核性能达到小包线速。
3.3 云联网流量转发原理
VPC间互通流量在VPC内部根据虚机交换机Vswitch的流表项进行路由和封装,封装后的流量根据报文的外层IP地址在物理网络中路由转发,最终到达云联网集群。云联网集群收到VPC发送的vxlan流量后,首先完成vxlan报文的解封装,然后根据报文的内层目的IP地址查找CCSI转发表,从而找到目的端VPC对应的VIP地址和vxlanId,再根据报文的内层目的IP和vxlanId查找虚机信息表找到其对应的宿主机IP地址,最后根据vxlanId,宿主机IP地址和VIP地址进行vxlan隧道报文的封装,并把封装后报文发送到物理网络,最终封装后的vxlan报文通过物理网络的路由转发到达对端VPC。
如上图所示,虚拟交换实例CCSI存储的是路由表项用于流量在各VPC间进行寻址,具体内容有目的IP地址、vxlanid和VIP地址,具体内容如表1所示:
目的IP地址 | vxlanId | VIP |
172.16.10.0/24 | 96 | 10.224.130.137 |
172.16.20.0/24 | 101 | 10.223.20.20 |
172.18.100.0/25 | 768 | 10.143.217.143 |
1.目的IP地址指的VPC的私网IP地址 2.vxlanId指的是VPC的VNI,每个VPC唯一 3.VIP地址即为网关上VTEP口IP地址,用于虚拟化中的宿主机与网关间通信 |
表1:CCSI路由表
虚机信息表中存储的是虚拟化集群中的虚机具体信息,每一条表项都能确定唯一一台虚机,具体如表2所示:
vxlanId | 虚机IP | 虚机MAC | 宿主机IP |
96 | 172.16.10.33 | fa:16:3f:35:82:42 | 10.162.10.11 |
101 | 172.16.20.55 | fa:16:3f:35:92:22 | 10.162.20.55 |
101 | 172.16.25.30 | fa:16:3f:5d:6c:81 | 10.192.20.2 |
表2:虚机信息表
在跨VPC互联互通过程中虚拟化网络的Vswitch完成VPC内部的路由寻址和报文封装解封装,在网关上通过CCSI和虚拟信息表完成路由寻址和报文的封装解封装,具体流量路径如下:
跨VPC间互联互通的流量转发路径说明 | |
1 | 源虚机上的流量通过虚拟化网络到达VPC中的Vswitch |
2 | 由Vswitch根据已有openflow流表项完成vxlan隧道报文的封装,报文封装后的外层目的IP地址为云联网网关的VTEP口IP地址 |
3 | 云联网网关收到封装的vxlan报文后,首先对报文进行解封装然后根据内层报文的IP地址在CCSI中寻址,查询到下一条的VIP地址和vxlanId |
4 | 云联网网关服务器根据CCSI中查询到的VxlanId和内层报文的目的IP地址查询虚机信息表,获取目的VM所在的宿主机IP地址以及VM的MAC地址 |
5 | 云联网网关服务器根据查询到vxlanId、宿主机IP、虚机MAC以及VIP地址等信息完成vxlan报文的封装,并把报文转发到Underlay网络 |
6 | 目的VPC收到云联网网关发送过来的vxlan报文,首先会经过Vswitch对报文进行解封装, 然后根据报文内层的IP地址和MAC进行路由,流量最终到达目的虚机 |
3.4 CCSI流量隔离
VPC专有网络可以由运维人员灵活的定义VPC内的IP地址范围、配置路由表等,给业务带来了极大的灵活性。但也给虚拟化网络治理带来更高的挑战和要求。由于不同VPC中的IP地址存在重复的可能性,导致云联网网关服务器上存在大量的重复路由表项,为了解决这个问题,研发团队参考内核的VRF特性提出了CCSI(云链接交换实例),云联网服务器至少由一个CCSI组成,不同CCSI间相互隔离拥有独立的路由表项,流量在CCSI内部查找路由表根据目的地址查找报文下一跳需要的vxlanId和vtep口。
CCSI由多条路由表项组成,每条路由表项包括目的网段、vxlanId和VIP(即为nexhop IP)地址三个元素,每个CCSI实例中的路由表项不能重复不同CCSI中的路由表项没有限制可以重复,每个CCSI相互独立完成路由的隔离和寻址。
04 软硬结合提高系统性能
高性能低成本是整个360虚拟化研发团队的目标和追求,为了达到千万级pps的既定目标研发团队采用了目前主流的高性能DPDK转发套件,其优秀的Kernel by-pass 、RX Steering and CPU affinity、Zero Copy、Polling instead of interruptd 、全局无锁化、硬件offload等特性充分支持了单核小包线速转发,很好的支撑了最初跟业务团队一起制定的千万级PPS目标。
05 后续优化
功能上为了满足更多业务场景,云联网网关在目前支持了跨区域多VPC间互联互通的基础上还会推出支持多VPC与IDC间的互联互通;性能上为了追求性能的极致和更好的满足业务需求,后续会结合Melloanx 25G/100G网卡特性实现offload功能,把由软件实现的解封包、QOS、ACL等功能逐步下沉到硬件网卡实现。
06 参考文章
https://docs.aws.amazon.com/zh_cn/vpc/latest/peering/vpc-peering-basics.html
https://yq.aliyun.com/articles/497058
https://tools.ietf.org/html/rfc5880#section-6.8.5