OPPO VPC 实践探索
01 概述
一年前(20年6月),OPPO云网络技术底座开始支持VPC方案,解决了用户担心的云上安全和虚拟实例的性能问题。我们称这个版本为VPC1.0,其采用了先进的智能网卡加速和VXLAN隧道隔离技术,实现了VPC从无到有的突破。
然而由于业务快速增加,短短的一年时间不到,云上VPC环境中的虚拟实例就达到百万级别。这史无前例的实例规模迅速给VPC的故障定位和运维带来巨大压力和成本开销。
经过团队调研业界趋势和当前版本功能,发现1.0版本存在下面问题:
(1) 网络控制器数量逐渐增多,一些相同的配置需要在每个控制器上都配置一遍,每天都有业务上线,经常重复配置,效率低、运维成本高。每个集群使用的IP地址单独管理,缺乏统一的IP地址管理机制,业务开通效率低而且容易出错造成业务故障。
(2) 控制器对于运行的虚拟路由器状态无感知,无法高效的获取系统运行的状态。
(3) 基于pyDatalog的控制器完全计算一次大规模的网络拓扑耗时较长,性能低,导致虚拟路由器无法及时转发超低延时的报文,最终带来业务受损。
(4) 虚拟网络缺乏南北向流量的安全策略防护,已有的东西向安全组策略不能高效的管控虚拟网络之间的互访互通,网络访问控制机制不健全,效率低。
(5) VPC无法跨集群互访、不能同裸金属一起实现VPC隔离组网,需要依赖物理网关打通,这种方式需要频繁更改物理交换机的配置甚至搬迁机器,运维成本较高。
02 VPC 2.0系统需求
分析上述问题的根本原因之后,提出下面的解决方案,具体解决如表1所示。
VPC支持南北向的安全防护功能,VPC支持跨集群互访,VPC支持裸金属组网,控制器OVS流表生成算法重构,增强观测性和日志告警闭环处理。
增加一个VPC的超级控制器vnCenter(Virtual Network Center), 用于给控制器分发统一的配置、实现业务编排及统一的IP地址管理。
问题描述 | 解决方案 |
统一的IP地址管理机制, 每个控制器需要重复相同的配置操作 | 集中到超级控制器vnCenter上处理,由vnCenter自动分发给其他VPC集群 |
无法快速查询虚拟路由器状态,运维效率低 | 增强控制器可观测性,增强运维能力 |
控制器更新流表慢 | 自研控制器 |
缺乏南北向安全防护 | VPC网关支持ACL功能 |
VPC无法跨集群互访 | 实现VPC跨集群互访 |
VPC不支持裸金属 | 用硬件网关实现裸金属的VPC隔离 |
表1 问题与解决方案对照
03 VPC 2.0方案
VPC2.0主要组件系统如图1所示。
图1 VPC系统组件图
Cloud控制台提供统一业务入口和便捷的界面操作,业务操作可视化,关键数据存于数据库中,便于维护和使用。
vnCenter用于给控制器VPC Server分发统一的配置、实现业务编排及统一的IP地址管理。
VPC Server 是整个系统的中心,对云平台提供高效,简洁的业务接口。是整个系统的消息转发枢纽,通常称为控制器。
HostController是位于计算节点的OVS (OVS, Open vSwitch)控制器,它指导OVS如何转发业务报文。HostController与VPC Server一起称作VPC网络的中枢,承担网络转发的重要职责。
VPC CNI Agent负责计算节点网卡资源的管理和分配,同时对云平台提供了创建、删除等业务接口。它采用智能网卡虚拟化(SR-IOV)技术为虚拟实例分配高速网卡,实现虚拟实例的网络加速。
VPC网关分为东西向的分布式网关和南北向的集中网关。分布式网关提供不同子网的通信功能,解决了集中网关的单点故障问题。南北向的集中网关支持VXLAN隧道,实现虚拟网络和物理网络的互通,并且支持横向扩展和DPDK加速技术。网关还支持ACL功能,集中网关可以是自研产品,也可以是第三方支持EVPN-VXLAN协议的硬件设备。
3.1 控制器
3.1.1 增强业务运维能力和可观测性
控制器支持子网IP地址资源的状态自动更新。若即将没有地址,则触发子网扩容IP告警。运维人员收到告警后,安排扩容,关闭告警。
观测性增强包括计算节点和网关的状态跟踪。控制器不断监控系统计算节点的消息,如果没有及时收到消息,则显示其状态为Inactive状态, 如一直有消息更新,则显示其为Active状态。再结合VPC网关,计算节点IP可以迅速构建出一幅业务的网络拓扑,便于故障排查和问题定位。除此之外,还可以支持VPC网关的状态查看。
控制器业务日志入库,定期搜索异常日志,触发告警,运维人员收到告警后,处理潜在风险,关闭告警。
3.1.2 OVS流表计算优化
原有的OVS流表计算引擎是一个单线程的Python程序,无法并行计算流表。网络规模大时,计算时间太长,容易引起业务短暂中断。为此我们采用Go语言,重新设计了一套OVS流表的生成算法,自主开发了HostController程序。其支持流表的并行计算,简化了业务逻辑,提高了流表计算效率。满足原有业务低时延的要求。按需模式经过优化后的首包时延可以降为原来的十分之一。
3.1.3 增强VPC网关接入能力
虽然自研VPC软件网关具有弹性和性能兼顾的综合优势,但其单台转发容量受制于CPU的主频和网卡的数目。在大数据和AI计算业务场景下,并不具备优势。因而我们开发了采用第三方硬件设备充当VPC网关的功能。
采用第三方硬件网关除了可以增加系统的吞吐量外,还可以借助硬件网关的VXLAN隔离能力,将裸金属纳入VPC逻辑范围内,实现虚拟机、容器、裸金属统一组网。如图2所示展示了VPC混合组网的场景。
图2 VPC混合组网
VPCServer引入GoBGP后具备了和通用硬件设备交换EVPN-VXLAN路由的能力,从而可以实现裸金属和虚拟实例的隔离访问的功能。
对于一般的互联网数据中心(IDC,Internet Data Center)物理区,其和VPC网络之间是路由互通模式,可以在网关应用特定的防火墙隔离。
3.1.4 增强VPC网关安全能力
基于OVS实现的安全组功能可以很好地实现东西向的安全访问,但对南北向的安全防控,却有点力不从心。为此我们开发了网关的安全访问控制控制(ACL)功能。其基于五元组的方式实现防火墙级的安全保障。VPC控制台支持ACL的配置和查看,并且支持复制功能,高效实用,有利于业务维护。
如图1所示,VPC控制台可以针对每个VPC配置单独的ACL策略,并自动同步到VPC网关上,用于实现防火墙的功能。
自研VPC网关的ACL功能采用用户态DPDK技术实现加速,并不会因为添加了ACL而带来转发性能的明显下降。
3.2 vnCenter 业务编排能力
3.2.1 统一编排所有控制器
图3 vnCenter统一管控VPC控制
如图3,对于一些通用的配置可以通过vnCenter操作,实现一次配置所有集群生效,高效实现配置的同步。
例如常见的租户信息,用户信息以及用户和VPC的关系,这些都是全局统一的,一次配置可以实现多个集群/可用区都可以使用,不需要每个集群单独配置。
vnCenter上可以查看所有VPC的可用子网信息,通过vnCenter上可以实现VPC网络地址的统一管理和分配,避免地址的冲突。
3.2.2 多集群业务编排能力
图3 vnCenter编排集群间VPC互通
vnCenter可以在多个集群之间实现VPC互通业务,并不需要专用的硬件设备。可以很好的支持业务的备份和集群多活功能。如图3所示。VPCServer在收到vnCenter的集群间业务编排后,开始进行网络拓扑的更新,并指导HostController完成集群间的VPC互通。
04 收益与展望
新版本VPC上线后,提高了网络的稳定性、改进了系统业务承载能力及运维效率,为用户带来良好的体验并得到客户的一致赞赏。
尤其是新上线的控制器HostController,裸金属,ACL功能使VPC的应用场景进一步扩大,推动更多的业务迁移到VPC环境运行。给用户带来更多业务收益。VPC后续版本将向支持高性能和eBPF方向演进。
作者简介
Junwei OPPO高级后端工程师
主要负责VPC网络架构设计与开发实现。长期致力于SDN网络新技术实践与创新。曾在中兴、IBM、赛特斯任职。
推荐阅读