背景

从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台。在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量生产实践经验。随着容器云平台的落地越来越多,关于容器云平台网络部分的建设要求也越来越高,我们和多家客户进行了深入沟通,虽然需求有所差异,但总结下来主要的诉求包括:

  • 从运维管理角度,更倾向于采用二层网络模型:在主流的二层组网的数据中心中,受限于硬件能力、运维人员的能力和管理复杂度等需求,大部分客户不希望引入BGP等三层路由概念,希望采用大部分运维人员比较熟悉的二层网络方案。

  • 希望容器云内部网络与外部网络互联互通:业务应用往往会在容器云平台内外同时部署,希望平台内外网络能够直接打通,POD与虚拟机/物理机同等地位,也更有利于与已有的云产品无缝整合。

  • 需要支持Pod固定IP地址:应用互访跨防火墙的等场景下,需要POD具备固定IP地址。此需求集中出现在应用实例访问另一个业务分区的防火墙的场景下。

  • 需要管理网络和业务网络分离

  • IPV6支持

  • 高性能,低抖动

  • 灵活的网络隔离:包括强安全性的硬件隔离和灵活的软件隔离。

  • 希望一套网络模型同时支持Underlay和Overlay:Underlay性能好,可以内外网互通;Overlay不依赖底层网络,灵活性强,最好可以同时支持。

  • 希望网络模型应该尽量简单,易于运维管理和调试。

  • 其他的高级特性,如双向限速、DPDK支持等。

博云容器云团队对市面上主流的CNI插件进行了广泛的调研后,发现主流的CNI插件对以上需求的支持并不理想,难以同时满足如上的网络需求,集中体现在内外网互通、管理业务网络分离、灵活的网络隔离机制、易于运维管理和调试等问题上。

我们针对网络建设的核心需求及社区现状综合分析之后,于18年启动基于OVS深度自研的容器网络插件BeyondFabric项目,目前该插件已经作为博云容器云平台重点支持的两个网络模型(calico/BeyondFabric)之一,作为博云容器网络的默认插件,支撑了多家企业的生产系统的长时间的稳定运行

二层网络模型技术对比

得益于CNI规范的简单性(相对于IETF的各种RFC),现在CNI插件的各种实现可以说是百花齐放。网络上对多种CNI的比较也是层出不穷,这里就不一一列举了。因为我们在选型阶段主要考虑二层网络模型(calico已经是非常优秀的三层解决方案了),所以我们主要对二层网络的基本单元进行了比较,因为bridge能力过于简单,所以主要是ovs和macvlan的比较,同时为了对比方便,也引入了calico进行比照。

从表中可以看出,macvlan目前问题较多,可能是由于这个方案比较小众,很多bug或者增强的PullRequest较少,因此我们在做选型时就选择基于OVS的方案。在选择了OVS方案之后,为了支持上述的多种网络需求,我们基于OVS进行了深度自研增强,并将此CNI网络插件命名为BeyondFabric。

BeyondFabric

BeyondFabric是博云基于OVS深度自研的完全满足CNI标准的kubernetes容器网络插件,利用etcd作为其数据存储单元,内置完善的IPAM能力,能够很好的满足第一章节中提到的客户的核心诉求。

1. BeyondFabric示意图

从fabric的概念图中可以一目了然的看清楚云平台的网络拓扑,不论是网络管理人员还是业务人员都可以简单清晰的了解到网络的拓扑情况。而且在这种简化的部署模型中(同时也是使用度最广的模型)不包括控制器等复杂逻辑,提供了简单、高效、稳定的网络环境。

除了网络模型之外,图中出现的分区概念,也是博云容器云平台结合多个客户的实际使用场景,在大量生产实践中总结演化出的概念,主要面对企业多种网络业务分区以及特定业务独占Node资源的需求,后续会专门撰文介绍。分区结合网络模型,更好的体现出了客户数据中心的网络隔离的现状,是对容器云平台实际落地的又一个重要支撑

2. BeyondFabric主要功能列表

  • 同时支持VLAN(Underlay)和VXLAN(Overlay)模式

  • 支持内外网互通

  • 支持Pod固定IP地址

  • 支持管理网络和业务网络分离

  • 支持IPV6

  • 高性能:网络性能接近物理网络

  • 支持Kubernetes NetworkPolicy对象,可实现灵活的网络隔离机制

  • 可以对网络进行可视化管理

  • 支持网络双向限速

  • 支持DPDK(即将发布)

3. BeyondFabric成熟度

  • 大量落地案例

博云容器云平台基于BeyondFabric已经有大量的落地案例,BeondFabric在可管理性、稳定性、性能等多个方面运行良好。

  • 通过kubernetes社区CNI测试套件测试
BeyondFabric完全满足CNI协议规范,我们的测试团队结合社区提供的工具和kubernetes job等网络测试套件对BeyondFabric进行了长时间的严格测试,测试结果证明BeyondFabric具备生产可用能力
  • 多种平台支持

私有云建设中,容器云平台一般运行在物理环境或vmware/openstack等虚拟化环境中。BeyondFabric对于这几种部署环境均能完善支持。对于网络环境复杂不易变更的场景下,BeyondFabric基于vxlan可以显著减少环境依赖。

4. BeyondFabric性能

BeyondFabric采用了稳定可靠的OVS作为其基本单元,所以从原理上讲其性能损耗应该是非常小的,我们在物理环境中基于万兆网络的性能测试也验证了这一点。

图中绿色的线表示物理节点间的带宽,可以作为本次测试的基线。蓝色和红色分别表示POD-POD和POD-NODE之间的带宽测试,可以看到与基线对比,其性能损失在3%以下。

5. 运维管理工具:fabric-admin

考虑到软硬件层面的异常情况,例如kubelet或beyondFabirc的bug,环境(硬件损坏)等均可能对系统的正常运行造成不同程度的影响,所以博云提供了一个fabric-admin的工具,位于/opt/cni/bin目录下,其作用类似于文件系统的FSCK能力,为BeyondFabric的运行时管理提供了有力保障。同时其命令行格式完全匹配kubectl,对熟悉kubernetes的用户非常友好。

例如可以查看pod的IP占用情况(示例输出已被截断):

同时,fabric-admin还提供了多种运行时管理能力支持,运行--help后可以提示:

如同FSCK是文件系统成熟的重要标志,fabric-admin是BeyondFabric项目成熟的有力保障!

总结

当下,网络是容器云平台落地的主要难点之一,BeyondFabric是博云为应对这一业界痛点提出的解决方案,它解决了企业类客户,特别是金融类对监管需求旺盛的客户在网络方面的很多痛点。同时BeyondFabric还在持续增强中,为企业落地容器云平台时网络方面的诉求提供更多的支持。

容器网络插件那么多,博云为什么基于OVS深度自研?的更多相关文章

  1. 干货 | 博云基于OVS自研容器网络插件在金融企业的落地实践

    本文根据博云在dockerone社区微信群分享内容整理 过去几年博云在企业中落地容器云平台遇到了很多痛点,其中一个比较典型的痛点来自网络方面,今天很高兴跟大家聊聊这个话题并介绍下我们基于OVS自研的C ...

  2. kubernetes 配置网络插件 flannel

    概述 在学习docker时知道docker有四种常用的网络模型 bridge:桥接式网络 joined:联盟式网络,共享使用另外一个容器的网络名称空间 opened:容器直接共享使用宿主机的网络名称空 ...

  3. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  4. 灵雀云开源网络插件Kube-OVN 1.4.0 版发布!支持跨集群容器网络、NetworkPolicy 日志

    从 1.4 开始 Kube-OVN 支持将多个 Kubernetes 集群容器网络打通,不同集群之间的 Pod 可以通过 Pod IP 直接互相通信.本版本还支持 ACL 日志,可以记录因 Netwo ...

  5. 腾讯云容器服务 TKE 推出新一代零损耗容器网络

    随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...

  6. 腾讯云TKE-基于 Cilium 统一混合云容器网络(下)

    前言 在 腾讯云TKE - 基于 Cilium 统一混合云容器网络(上) 中,我们介绍 TKE 混合云的跨平面网络互通方案和 TKE 混合云 Overlay 网络方案.公有云 TKE 集群添加第三方 ...

  7. 灵雀云Kube-OVN进入CNCF沙箱,成为CNCF首个容器网络项目

    昨日,云原生计算基金会 (CNCF) 宣布由灵雀云开源的容器网络项目Kube-OVN 正式进入 CNCF 沙箱(Sandbox)托管.这是全球范围内首个被CNCF纳入托管的开源CNI网络项目,也是国内 ...

  8. 【Networking】容器网络大观 && SDN 资料汇总

    SDNLAB技术分享(十五):容器网络大观   SDNLAB君• 16-06-17 •2957 人围观 编者按:本文系SDNLAB技术分享系列,本次分享来自SDN撕X群(群主:大猫猫)群直播,我们希望 ...

  9. Docker: docker network 容器网络

    容器网络命令 : docker network --help 常用的是 docker network create/ls/rm/inspect 容器网络类型,一共有以下5种 bridge–net=br ...

随机推荐

  1. 【计算机网络】HTTPS协议的传输细节及过程分析

    1. 介绍一下HTTPS协议? 1.1 基本概念 http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,对于传输的数据进行加密传输. 1.2 密码学基础 明文: 明文指 ...

  2. 使用VS2017+WDK10开发xp驱动

    VS2017+WDK10使用默认配置可以开发出运行在win7的驱动,但要开发运行在xp的驱动,还要进行如下操作: Dervier Settings -> Driver Model -> t ...

  3. C#函数的参数传递方式1(值传递与地址传递)

    using System; namespace class1 { class program { static void Main(string[] args) { //值传递引用,实际参数不会变化 ...

  4. ASP.NET MVC IOC依赖注入之Autofac系列开篇

    Autofac为IOC组件,实现控制反转,主要结合面向接口编程,完成较大程度的解耦工作. 使用IOC,必须面向接口编程,所谓的面向接口编程,即程序中依赖于抽象,而不依赖于具体实现. 需要所有的业务逻辑 ...

  5. Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...

  6. Java日期时间API系列1-----Jdk7及以前的日期时间类

    先看一个简单的图: 主要的类有: Date类负责时间的表示,在计算机中,时间的表示是一个较大的概念,现有的系统基本都是利用从1970.1.1 00:00:00 到当前时间的毫秒数进行计时,这个时间称为 ...

  7. new一个对象的初始化过程

    ############################### 今天总结一下,new对象的初始化过程. ############################### 首先,当不含static成员时, ...

  8. PHP fread 文件系统函数

    定义和用法 fread - 读取文件(可安全用于二进制文件) 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 fread ( resource $handle , int $lengt ...

  9. bayaim_当前国内外Hadoop的实际使用案例

    当前国内外Hadoop的实际使用案例 说到Hadoop,很多朋友都想知道到底它是如何被应用的呢?通过下文,笔者就向大家介绍一下具体的情况. 1.Yahoo Yahoo是Hadoop的最大支持者,截至2 ...

  10. Git 常用命令:

    Git 常用命令: 1.git status #查看本地工作文件夹有哪些改动(和本地仓库对比),把差别列出. 2.git log #查看commit 的日志.(git log -2 只看最近2次的co ...