当前位置: 首页 > news >正文

Cable:360实现的新虚拟网络架构

前言

OpenStack架构中,Neutron作为虚拟网络模块,管理虚机的网络。随着容器技术的发展,越来越多的应用部署到Kubernetes等容器编排系统中,而Kubernetes也有自带的网络管理模块,如Flannel,Calico等。分别维护OpenStack、Kubernetes网络模块,不仅增加管理成本,且无法满足虚机和容器网络互通等需求。为了统一管理不同编排系统的网络模块,简化虚拟网络功能的开发流程,虚拟网络工作组实现了新的虚拟网络架构Cable。

需求背景

目前公司的虚拟网络架构有如下不足:

  • 物理机、虚机和容器网络分开管理,无法达到直接互联互通。
  • Neutron agent里的DHCP、metadata采用集中式服务,健壮性不足。
  • vxlan实现时需要外部路由器的支持,较为复杂。

新的网络架构需要满足统一管理物理机、虚机和容器网络,实现直接互联互通;简化Neutron agent,分布式架构实现DHCP、metadata等功能;在虚拟网络层面实现vxlan;提供流量镜像等新功能。

方案实现

为了满足上诉需求,Cable架构实现了如下两个关键点:

  1. 虚拟数据平面不再基于OVS,而是采用功能更为丰富虚拟路由器vrouter.ko。vrouter.ko是Juniper的虚拟网络架构OpenContrail中的开源数据模块。相比于OVS的简单数据包转发,vrouter.ko支持虚拟网络路由、vxlan、流表配置安全组、流表配置nat/snat、流量镜像等功能。丰富的数据平面功能,简化了网络功能模块的开发难度。
  2. 重新自研开发管理平面。管理平面统一管理OpenStack和Kubernetes网络模块;采用Kubernetes里的watch方式,主动监控平台资源变化情况,并执行相关操作;分布式实现DHCP;用vrouter.ko中的flow功能实现nat、安全组等。

Cable的整体框架如图1所示。

\"\"

图1 Cable整体框架图

Cable工作流程如图2所示。当用户请求到达Neutron Server后,Contrail Neutron Plugin将请求转发至Cable的控制节点(Control Node)。控制节点的proxy转换请求发送至API,API将接收到的请求发送至相应模块,其中controller负责具体的计算和分配工作,IPAM模块负责网络地址的管理。每台计算节点部署了Cable agent,通过Rest API监听Control Node的资源,如监听到资源变化,则调用vrouter.ko执行相应请求(添加/删除/修改网络信息)。

\"\"

图2 Cable工作流程

与OpenStack兼容

Cable需要考虑如何与现有的虚拟网络结构兼容,使得Neutron能够平滑过渡到新的架构上。所以在保持Neutron原有接口不变的基础上,将Neutron的db替换为etcd,并将DHCP-agent,metadata-agent,l3-agent替换为统一的cable-agent。将Neutron用Cable替代后,OpenStack的相关命令行和Restful API都没有变化,实现无缝切换,方便运维管理。

\"\"

图3 Cable替代Nuetron后OpenStack架构图

总结

新的虚拟网络架构,兼容了不同网络平面,简化了网络功能模块,使得网络更为健壮。目前Cable的整体架构已经基本开发完成,实现了DHCP、metadata和VLAN架构网络,后续将实现安全组、VXLAN等更多功能,并实现自动化部署,完善监控功能。

本文首发于微信公众号“360技术“( id: qihoo_tech)

相关文章:

  • ubuntu添加普通用户,并解决远程登录
  • 扫描自定义注解并在spring容器中注入自定义bean
  • Mac osx 系统安装 eclipse
  • 项目实战8.2-Linux下Tomcat开启查看GC信息
  • CopyTranslator v0.0.8 Zouwu RC1 发布
  • Mars 1.3.0 发布,微信官方跨平台跨业务终端基础组件
  • 华为6.0系统(亲测有效)激活XPOSED框架的方法
  • SOP 1.1.0 发布,开放平台解决方案项目
  • c# webapi上传、读取、删除图片
  • JAVA面向对象的总结(函数重载与数组)
  • CUBA Studio 9.0 发布 ,企业级应用开发平台
  • Maven 的这 7 个问题你思考过没有?
  • Maven 运行启动时****找不到符号*com.xxx.user.java
  • win10子系统 (linux for windows)打造python, pytorch开发环境
  • 美团全链路压测自动化实践
  • $translatePartialLoader加载失败及解决方式
  • [译] React v16.8: 含有Hooks的版本
  • 【刷算法】从上往下打印二叉树
  • CSS居中完全指南——构建CSS居中决策树
  • css选择器
  • gcc介绍及安装
  • golang中接口赋值与方法集
  • Iterator 和 for...of 循环
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • pdf文件如何在线转换为jpg图片
  • SOFAMosn配置模型
  • 阿里云购买磁盘后挂载
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Python) SOAP Web Service (HTTP POST)
  • (python)数据结构---字典
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (离散数学)逻辑连接词
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)shell调试方法
  • (转)程序员疫苗:代码注入
  • (转)原始图像数据和PDF中的图像数据
  • .NET Core引入性能分析引导优化
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .net 流——流的类型体系简单介绍
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /etc/motd and /etc/issue
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @media screen 针对不同移动设备
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜