前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实践案例 | 基于 Kube-OVN 的虚拟网络技术探索

实践案例 | 基于 Kube-OVN 的虚拟网络技术探索

作者头像
灵雀云
发布2022-03-03 10:40:18
1.9K0
发布2022-03-03 10:40:18
举报
文章被收录于专栏:云原生技术社区

Kube-OVN开源以来,积累了各行业的用户实践,在KubeCON China 2021,来自字节跳动系统工程和技术团队(STE)的高级工程师费翔,带来了他和团队基于Kube-OVN做的场景落地和技术实现的分享。分享中梳理了字节团队技术选型过程,也同时也详细指出了基于社区版本之上,字节团队在实际应用场景下的技术拓展思路、成果,以及对社区未来功能的展望。

作者:费翔|字节跳动高级研发工程师

Kube-OVN社区Contributor

基于虚拟机与容器混跑场景需求的网络技术选型过程

去年,我们团队针对搭建K8s集群,在虚拟机和容器上混合运行这个需求进行了CNI工具的选型,经过一些列调研工作,我们把目标锁定Kube-OVN,有以下几点考虑:

  • 首先,Kube-OVN是中心化的IPAM,地址管理更加灵活。市面上传统的Cilium和Calico这些工具,都是一个node节点上面分配一个网段,这样相当于Pod IP是和node的节点强相关,无法达到灵活迁移的要求。
  • 第二、Kube-OVN具有更贴近传统IaaS的虚拟网络模型(VPC/Subnet)。Kube-OVN具备一些subnet和LB的一些概念,比较符合我们需求。现在,Kube-OVN还扩充了vpc场景,这样的话它其实和IaaS的网络更加相似了。
  • 第三、Kube-OVN的控制面是基于OVN的,可以实现更灵活的网络编排调度。
  • 第四、Kube-OVN的数据面是基于OVS,在虚拟机的场景下,方案也比较成熟,性能潜力也比较大,有各种offload或者dpdk的加速手段。

基于以上考虑,我们决定选用Kube-OVN。

基于Kube-OVN实现的初版网络方案

Pod网络流量模型

我们第一版网络流量模型是完全基于Kube-OVN社区的一些技术来实现的:

  • Pod直接互访走的是geneve隧道,这个是标准的一个Pod互通的流量模型。
  • 基于Kube-OVN的分布式网关子网,Pod访问集群外的流量都导出本Node上OVN0接口。
  • 虚拟机Pod直接使用Underlay地址,三角流量路径,网关ECMP高可用。

注:虚机访问集群外的流量,从本Node的ovn0接口forward到eth0接口发出。入向走geneve隧道到node

  • 容器Pod访问集群外流量,在宿主机做SNAT,从本node发出。
  • IPv6双栈(已经并入社区)

Service的网络流量模型

我们同时还有一个service的网络流量模型,实现如下:

  • Service使用IPvs实现
  • 需要对外发布的Service分配external IP,getway发布external service bgp网段。

初版网络方案存在的问题及改进方案

但是这一版方案我们上线之后发现了一些问题,主要问题是有下面几个,

第一、源路由数目过多,每个Pod需要一个单独的路由,集群规模大之后性能受影响。

第二、虚拟机场景下流量路径过长,性能达不到预期。

第三、Geneve隧道业界使用案例较少,兼容性存在风险(offload)。

基于以上三个问题,我们分别做了一些改进的方案。

改进方案一:虚拟机使用ovs-dpdk

  • 使用ovs-dpdk 代替ovs-kernel.
  • cniserver创建vhostclient类型的socket,mount到pod内,qemu使用该socket创建虚机。
  • pod内没有eth0网卡设备,在containerd上可以work,不太符合规范,最好是多网卡。

改进方案二:源路由优化(待上线)

  • 创建public logical switch(172.168.0.1/30),绑定localnet logical port,用来和local 网络打通,实际上是通过一个patch设备和br-ex网络连通。
  • ovn下发低优默认路由,dst 0.0.0.0/0 nexthop 172.168.0.2。不再下发POD源地址路由。
  • mac-binding table设置172.168.0.2 00:10:10:10:10:10条目。
  • 开发br-ex控制器,流表修改mac并从br-ex或者eth发出。
  • Join switch不在承担连接overlay的unerlay的作用,只用作POD访问NODE的流量。

改进方案三:geneve替换为vxlan

  • ovn在Geneve隧道中,除了携带VNI外,同时还携带了ingress port和egress port。
  • vxlan的vni字段只用来表示tunnel id
  • 在table0处提取后跳转到table6在consider_port_binding中,将本NODE所属接口的mac地址,生成规则后填充到table6中
  • table6根据目的mac来设置NXM_NX_REG15(若多播设置为0x8000),再跳转到table33
  • 后续在使用egress pipeline时,确保不匹配inport
  • nbctl lsp-set-addresses设置时,确保同一VPC下的mac地址不冲突

对Kube-OVN社区版本能力的展望

  • 多集群互联
  • 更加贴近传统vpc网络 or 云原生网络;service能力提升。
  • vpc能力的完善?(路由,eni)。
  • nfv能力的完善?(lb,nat,vpn)
  • 观测/定位手段更加丰富。
  • 是否考虑单独实现数据面,不依赖ovn?

官网:

https://www.kube-ovn.io

GitHub:

https://github.com/kubeovn/kube-ovn

Slack:

https://kube-ovn-slackin.herokuapp.com

Kube-OVN提供面向企业场景的容器网络解决方案。

填写表单,了解跨云网络管理、IaaS(包括OpenStack、VM等)与K8s统一网络技术栈、容器托管新一代数据中心SDN、微服务架构下高性能网络、5G及边缘集群落地等应用场景。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生技术社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档