OPPO VPC 实践探索

时间:2023-01-10 11:15:59

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所示。


OPPO VPC 实践探索

图1   VPC系统组件图


Cloud控制台提供统一业务入口和便捷的界面操作,业务操作可视化,关键数据存于数据库中,便于维护和使用。


vnCenter用于给控制器VPC Server分发统一的配置、实现业务编排及统一的IP地址管理。


VPC Server 是整个系统的中心,对云平台提供高效,简洁的业务接口。是整个系统的消息转发枢纽,通常称为控制器。


HostController是位于计算节点的OVS (OVS, Open vSwitch)控制器,它指导OVS如何转发业务报文。HostControllerVPC 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混合组网的场景。


OPPO 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 统一编排所有控制器


OPPO VPC 实践探索

图3  vnCenter统一管控VPC控制


如图3,对于一些通用的配置可以通过vnCenter操作,实现一次配置所有集群生效,高效实现配置的同步。


例如常见的租户信息,用户信息以及用户和VPC的关系,这些都是全局统一的,一次配置可以实现多个集群/可用区都可以使用,不需要每个集群单独配置。


vnCenter上可以查看所有VPC的可用子网信息,通过vnCenter上可以实现VPC网络地址的统一管理和分配,避免地址的冲突。


3.2.2 多集群业务编排能力


OPPO VPC 实践探索

图3  vnCenter编排集群间VPC互通


vnCenter可以在多个集群之间实现VPC互通业务,并不需要专用的硬件设备。可以很好的支持业务的备份和集群多活功能。如图3所示。VPCServer在收到vnCenter的集群间业务编排后,开始进行网络拓扑的更新,并指导HostController完成集群间的VPC互通。


04 收益与展望


新版本VPC上线后,提高了网络的稳定性、改进了系统业务承载能力及运维效率,为用户带来良好的体验并得到客户的一致赞赏。


尤其是新上线的控制器HostController,裸金属,ACL功能使VPC的应用场景进一步扩大,推动更多的业务迁移到VPC环境运行。给用户带来更多业务收益。VPC后续版本将向支持高性能和eBPF方向演进。


作者简介


Junwei  OPPO高级后端工程师


主要负责VPC网络架构设计与开发实现。长期致力于SDN网络新技术实践与创新。曾在中兴、IBM、赛特斯任职。


推荐阅读

InnerEye低代码大屏——响应式布局实现

OPPO实时计算平台基于云原生的作业弹性伸缩设计与实践

基于ark框架实现推荐策略jar包热更新