Kata Native 的 CNI 扩展

背景

CNI 是 kubernetes 上为容器配置网络的通用接口。kubernetes 社区有很多 CNI 网络插件的实现。kube-ovn 就是一个把基于 OVN 的网络虚拟化集成到 kubernetes 中的 CNI 实现。

通常情况下,kubernetes CNI 提供给容器运行时的网络都是一个本地的 network namespace,里面包含一个 veth 设备。虽然这个 veth 设备可以直接为传统的 runc 容器提供网络连接能力,却不能被基于虚拟化技术的容器运行时(如 Kata Containers)直接使用。为了兼容 CNI 的实现,Kata Containers 会在容器的 network namespace 中创建一个 tap 设备,并使用 TC mirroring 规则来连通 veth 和 tap 设备,如下图所示。

这样的网络架构保证了 Kata Containers 对广泛的 CNI 实现的兼容性,却也带来了明显的开销。每个网络包需要多次协议栈转跳才能抵达应用。幸好,这个网络数据链路是可以优化的。

CNI 优化方案

我们观察到,在上面的网络架构中,Kata 其实只需要一个 tap 设备而并不在意这个 tap 设备是如何创建并连接到外部网络的。基于这点,我们可以把这个 tap 设备作为 pod 网络配置的入口点,让 CNI 负责在宿主机上创建并配置 tap 设备,从而让去掉宿主机上的 network namespace 和 veth 网卡对成为可能。如下图所示。

这样的网络架构中,Kata Containers 并不在意 tap 设备是如何创建的,所以 CNI 可以选择舍弃或者保留宿主机上的 network namespace,但 veth 网卡对不再是必须的,同时CNI 的网络实现细节仍然对 Kata Containers 透明。

换成流程图大概就是

我们对这个新的网络架构有两个期待:

  • 去掉 veth 网卡对以及 veth 和 tap 设备之间的网络包跳转,降低 Kata 容器的网络延迟
  • 扩展 CNI 接口让 CNI 能够配置实现更高性能的网络设备连通,比如 VFIO 和 vhost-user 设备

通过现场对方案的交流,我们在 Kata 社区和 kube-ovn 社区分别创建了 issue 来跟踪这一改进。有兴趣的同学可以到 issue 中查看最新进展。

  • https://github.com/kubeovn/kube-ovn/issues/837
  • https://github.com/kata-containers/kata-containers/issues/1922

参考:
开源黑客松:当 CNI 遇上 Kata

当CNI遇上Kata-KataNative的CNI扩展相关推荐

  1. 推荐系统遇上深度学习,9篇阿里推荐论文汇总!

    作者 | 石晓文 转载自小小挖掘机(ID: wAIsjwj) 业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了. 前面九篇文章中 ...

  2. 华为平板电脑_当5G遇上平板电脑,华为MatePad Pro 5G带来了什么?

    5G已经来临,科技产品向5G升级已是大势所趋,这更是检验实力的探索之路. 2月24日,华为在巴塞罗那在线发布了一系列新品,其中,华为面向全球推出的5G高端旗舰平板,同时也是全球首款公开发布的5G平板华 ...

  3. 404未找到是什么意思_为什么老遇上404 not found?你懂的

    文章转载自公众号:一只学霸(bajie203) 昨天晚上 大毛火急火燎地打开了电脑 戴上了耳机 不到两分钟 -- 我们往前一凑 登等 果然是大家最害怕的一幕出现了 学霸在网上冲浪多年 留下的都是美好的 ...

  4. 《当用户体验设计遇上敏捷》一3.5 小结

    本节书摘来自异步社区<当用户体验设计遇上敏捷>一书中的第3章,第3.5节,作者[英]Lindsay Ratcliffe , Marc McNeill,更多章节内容可以访问云栖社区" ...

  5. 当网络安全遇上大数据分析(9)

    2012年3月份,Gartner发表过一篇报告--Information Security Is Becoming a Big Data Analytics Problem .里面主要就讲到了针对大规 ...

  6. html实体编码遇上js代码

    单双引号 在js代码中 在js中单.双引号引起来的是字符串,如果我们要在字符串中使用单.双引号,需要反斜杠进行转义 let str='user\'s name'; // or let str=&quo ...

  7. SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败解决方案

    SQL SERVER 2008 R2 SP1更新时,遇上共享功能更新失败的问题,可作如下尝试: 更新失败后,在windows的[事件查看器→应用程序]中找到来源为MsiInstaller,事件ID为1 ...

  8. 当微信小程序遇上TensorFlow:Server端实现补充

    在前面一篇文章<当微信小程序遇上TensorFlow:Server端实现>中,我们探讨了微信小程序server端的实现.今天在调试微信小程序时才发现一个问题,那就是:微信小程序要求HTTP ...

  9. 当深度学习遇上异构并行计算

    当深度学习遇上异构并行计算 近几年来,以深度神经网络(DNN)为代表的深度学习如火如荼,深度学习的研究领域从开始的图像识别(如imagenet比赛)到现在的自然语言处理,几乎有席卷一切机器学习研究领域 ...

最新文章

  1. 【深搜】骑士游历(二)
  2. python语言网课答案_Python语言答案
  3. springcloud使用zipkin和rabbitmq进行服务链路追踪
  4. mysql用root账户建立用户和赋予权限
  5. 度数换算_度数换算计算器
  6. java电脑控制对方手机_电脑控制大师手机专家多控系统-Total Control电脑控制手机助手下载V7.0.0官方电脑端32位/64位最新版-西西软件下载...
  7. 《菜鸟教程》C语言学习
  8. WebRTC实现简单音视频通话功能
  9. vue中引入高德地图并多点标注
  10. 微信小程序常见面试题总结
  11. php读取excel并导入数据,PHPExcel读取excel并导入数据库
  12. 采用JSP+Servlet+JDBC完成的一个产品信息管理系统
  13. 树莓派与PCF8591模数转换器的那些事儿
  14. 这30个CSS选择器,你必须熟记(上)
  15. Apache HTTP Servcer-Apache服务器下载与Windows系统下安装
  16. 数据结构-字符串和数组简单题
  17. 微信公众号如何上传PPT文件【教程】
  18. Facebook上获赞千万的漫画:《人生的意义》
  19. java包的创建与使用
  20. E2上GBA模拟器的消息

热门文章

  1. python什么是数据结构_python算法与数据结构-数据结构介绍(38)
  2. golang 学习笔记
  3. 输入三个字符串,按由小到大的顺序输出 字符串排序-一种简单的方法
  4. 1.4Hadoop伪分布式安装
  5. OSGL 工具库 - 类型转换的艺术
  6. server2008密码不满足密码策略的要求,检查最小密码长度、密码复杂性和密码历史的要求”的解决办法...
  7. Linux apache编译安装
  8. CHM无法打开解决办法
  9. java反编译器JAD.exe的使用
  10. 黑莓Torch 9800,了无新意落后主流机型