共计 2843 个字符,预计需要花费 8 分钟才能阅读完成。
背景
从 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 还在持续增强中,为企业落地容器云平台时网络方面的诉求提供更多的支持。