【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

Kube-OVN:基于 OVN 的开源 Kubernetes 网络实践

  • 2019-05-13
  • 本文字数:3722 字

    阅读完需:约 12 分钟

Kube-OVN:基于OVN的开源Kubernetes网络实践

今天,许多企业开始运行 Kubernetes 集群,并从中受益。但我们仍然不得不承认,Kubernetes 底层实现非常复杂,这其中一个最复杂,就是网络相关的部件。

Kube-OVN 开源网络插件诞生初衷

从当前 Kubernetes 网络现状来看,Kubernetes 网络相关的组件非常分散。比如,CNI 负责基础容器网络,它本身只是个接口标准,社区和市场上都有很多各自的实现;集群内的服务发现网络需要依赖 kube-proxy,而 kube-proxy 又有 iptables 和 ipvs 两种实现;集群内的 DNS 需要依赖额外组件 kube-dns 或 coredns;集群对外访问的负载均衡器服务需要依赖各个云厂商提供的 Cloud-Provider;网络策略的 NetworkPolicy 本身只是一个标准接口,社区中也有各自不同的实现。此外还有 ingress,Kubernetes 提供的只是一个标准接口,社区中同样有各自的实现。


分散的网络组件导致容器网络流量被分散到了不同的网络组件上,一旦出现问题需要在多个组件间游走逐个排查。在实际运维过程中网络问题通常是最难排查的,需要维护人员掌握全链路上所有组件的使用、原理以及排查方式。因此,如果有一个网络方案能够将所有数据平面统一,那么出现问题时只需要排查一个组件即可。


其次,现有网络插件种类繁多,但是在落地时会发现,每个网络插件由于覆盖的功能集合不同,很难在所有场景使用同一套方案。为了满足不同的客户需求,很多厂商一度同时支持多种网络方案,给自身带来很大负担。在落地过程中,还发现很多传统的网络方案在容器网络中是缺失的。一些高级功能是所有网络插件都无法满足的,比如:子网划分、vlan 绑定、nat、qos、固定 IP、基于 acl 的网络策略等等。


现有 Kubernetes 网络能力是否足够?答案很明显,如果真的已经足够强大,落地的时候就不会出现这么多的问题。从更大的格局来看,Kubernetes 本质上是提供了一层虚拟化网络。而虚拟化网络并不是一个新问题。在 OpenStack 社区,虚拟网络已经有了长足的发展,方案比较成熟,OVS 基本已经成为网络虚拟化的标准。

什么是 OVN?

OVS 是一个单机的虚拟网络交换机,同时支持 OpenFlow,可以实现复杂的网络流量编程,这也是网络虚拟化的基础。通过 OVS 和 OpenFlow 可以实现细粒度的流量控制。如果做个类比,OVS 相当于网络虚拟化里的 Docker。


OVS 只是个单机程序,想生成一个集群规模的虚拟网络就需要一个控制器,这就是 OVN。OVN 和 OVS 的关系就好比 Kubernetes 和 Docker 的关系。OVN 会将高层次的网络抽象转换成具体的网络配置和流表,下发到各个节点的 OVS 上,实现集群网络的管理。


由于 OVN 最初是为 OpenStack 网络功能设计的,提供了大量 Kubernetes 网络目前不存在的功能:


L2/L3 网络虚拟化包括:


  • 分布式交换机,分布式路由器;

  • L2 到 L4 的 ACL;

  • 内部和外部负载均衡器;

  • QoS,NAT,分布式 DNS;

  • Gateway;

  • IPv4/IPv6 支持。


此外 OVN 支持多平台,可以在 Linux,Windows,KVM,XEN,Hyper-V 以及 DPDK 的环境下运行。


从上面可以看出, OVN 可以覆盖 CNI, Kube-Proxy, LoadBalancer, NetworkPolicy, DNS 等在内的所有 Kubernetes 网络功能,并在原有基础上都有所增强。那么,何不尝试把之前在 OpenStack 领域内成熟的网络功能平移到 Kubernetes 上呢,于是就诞生了这个开源项目 Kube-OVN。Kube-OVN 提供了大量目前 Kubernetes 不具备的网络功能,并在原有基础上进行增强。通过将 OpenStack 领域成熟的网络功能平移到 Kubernetes,来应对更加复杂的基础环境和应用合规性要求。

Kube-OVN 重要功能及实现

目前大部分网络插件的网络拓扑都是一个大二层网络,通过防火墙做隔离,这种形式非常类似公有云早期的经典网络。Kube-OVN 在设计网络支出时,同时把多租户的场景考虑进来,方便之后更好的扩展高级功能,因此采用了不同的网络拓扑。



Kube-OVN 网络拓扑


在 Kube-OVN 的网络拓扑里,不同 Namespace 对应着不同的子网。子网是其中最为重要的概念,之后的内置负载均衡器,防火墙,路由策略以及 DNS 的网络功能都是和子网绑定的。我们做到了同一台机器的不同 pod 可以使用不同的子网,多个子网之间使用一个虚拟路由器进行网络的联通。为了满足 Kubernetes 中主机可以和容器互通的网络要求,Kube-OVN 在每个主机新增一块虚拟网卡,并接入一个单独的虚拟交换机和集群的虚拟路由器相连,来实现主机和容器网络的互通。


在容器访问外部网络的策略中,Kube-OVN 设计了两种方案:一种是分布式 Gateway,每台主机都可以作为当前主机上 Pod 的出网节点,做到出网的分布式。针对企业需要对流量进行审计,希望使用固定 IP 出网的场景,还做了和 namespace 绑定的 Gateway,可以做到一个 namespace 下的 Pod 使用一个集中式的主机出网。在整个网络拓扑中,除了集中式网关,交换机,路由器,防火墙,负载均衡器,DNS 都是分布在每个节点上的,不存在网络的单点。



Kube-OVN 架构图


在实现的过程中,Kube-OVN 对组件架构进行了大幅的简化,整个流程中只需要一个全局 Controller 和分布在每台机器上的 CNI 插件,就可以组建网络,整体安装十分简单。其中全局 Controller 负责监听 API Server 事件,针对 Namespace,Pod,Service,Endpoint 等和网络相关的资源变化对 OVN 进行操作。同时 Controller 会把操作 OVN 的结果,例如 IP ,Mac,网关,路由等信息回写到对应资源的 annotation 中,而 CNI 插件则根据回写的 annotation 信息操作本机的 OVS 以及主机网络配置。通过这种架构 Kube-OVN 将 CNI 插件和、Controller 和 OVN 解耦,通过 Apiserver 传递所需的网络信息,方便快速开发迭代。


Kube-OVN 选择使用最基础的 annotation ,而不是 CRD、API Aggregation 或者 Operator,也是出于降低复杂度的考虑,使用户和开发者都能够快速上手。


Kube-OVN 主要具备五大主要功能:


  1. Namespace 和子网的绑定,以及子网间访问控制;

  2. 静态 IP 分配;

  3. 动态 QoS;

  4. 分布式和集中式网关;

  5. 内嵌 LoadBalancer。


子网是 Kube-OVN 中最重要的概念,由于子网和 namespace 关联,因此只需要在 namespace 中设置对应的 annotation 就可以完成子网的功能。Kube-OVN 支持子网 cidr,gateway,exclude_ips 以及 switch_name 的设置。同时支持基于子网的 IP 隔离,用户可以轻松实施基本的网络隔离策略。在后台实现上,Kube-OVN 会监听 namespace 的变化,并根据变化在 ovn 中创建并设置虚拟交换机,将其和集群路由器关联,设置对应的 acl,dns 和 lb。


静态 IP 的使用可以直接在 Pod 中加入对应的 annotation,Controller 在发现相关 annotation 时会跳过自动分配阶段,直接使用用户指定的 IP/Mac。对应多 Pod 的工作负载,例如 Deployment、DaemonSet,可以指定一个 ip-pool,工作负载下的 Pod 会自动使用 ip-pool 中未使用的地址。


在 QoS 功能中,分别实现了 ingress 和 egress 的带宽限制,用户可以在 Pod 运行时通过动态调整 annotation 来实现 QoS 的动态调整,而无需重启 Pod。在后台的实现中, OVN 自带的 QoS 功能工作在 Tunnel 端口,无法对同主机间 Pod 的互访做 QoS 控制。因此 Kube-OVN 最终通过操作 OVS 的 ingress_policing_rate 和 port qos 字段来实现 QoS 的控制。


在网关设计中,OVN 的网关功能有一些使用限制,需要单独的网卡来做 overlay 和 underlay 的流量交换,使用起来比较复杂,为了能够适应更广泛的网络条件并简化用户使用,Kube-OVN 对网关部分进行了调整。使用策略路由的方式根据网络包的源 IP 选择下一跳的机器,通过这种方式将流量导入所希望的边界网关节点,然后在网关节点通过 SNAT 的方式对外进行访问。这种方式用户只需要在 namespace 中配置一个网关节点的 annotation 就可以配置对应的流量规则。此外,Kube-OVN 也支持非 SNAT 将容器 IP 直接暴露给外网的场景,这种情况下只需要外部添加一条静态路由指向容器网络,就可以实现 Pod IP 直接和外部互通。


内嵌的 LoadBalancer 使用 OVN 内置的 L2 LB,这样集群内部的服务发现功能可以直接在 OVS 层面完成,不需要走到宿主机的 iptable 或者 ipvs 规则,可以将 kube-porxy 的功能整合到 Kube-OVN 中。

下一步开源计划

目前 Kube-OVN 已经在 github 上开源。OVN 安装比较繁琐,Kube-OVN 特意做了安装的简化,现在只需要两个 yaml 就可以部署一个完整的 Kube-OVN。在使用方面也做了优化,通过直观的 annotation 即可对网络进行配置。此外还针对不使用任何 annotation 的情况内置了一套默认配置。用户可以使用默认的子网,默认的 IP 分配策略,默认的分布式网关以及内嵌的负载均衡器,这些都不需要任何配置就可以默认启用。欢迎大家体验试用,多提反馈和意见。


近期 Kube-OVN 开源项目将主要着力于实现三大目标:第一,集中式网关的高可用,消灭整个架构中最后一个单点;第二,内嵌 DNS,去除 Kube-DNS/CoreDNS 的依赖,将整个数据平面用 OVN 进行统一;第三,NetworkPolicy 实现。


长期来看,未来将实现对 DPDK 和 Hardware Offload 的支持,解决 Overlay 网络性能问题;将更多的 OVS 监控和链路追踪工具引入 Kubernetes;将 OpenStack 社区的网络功能向 Kubernetes 平移,打造更完整的网络体系。


目前 Kube-OVN 项目代码已经在 Github 上开源,项目地址为:https://github.com/alauda/kube-ovn。项目使用宽松的Apache 2.0 协议,欢迎更多技术开发者和爱好者前去试用和使用。


2019-05-13 11:008318

评论

发布
暂无评论
发现更多内容

全链路灰度的挑战、实现思路与解决方案

阿里巴巴云原生

阿里云 云原生 全链路灰度

免费MES系统:助力企业数字化转型的利器

万界星空科技

开源 数字化转型

内网穿透之 ngrok

陈皮

深度解读陕西省国资委最新发文,聚焦国资国企建设一流司库

用友BIP

全球司库 国资国企

企业税务管理为什么需要数智化转型

用友BIP

税务管理

大文件传输的有效可用方式

镭速

大文件传输 传输大文件

软件测试 | 什么时候使用表锁

测吧(北京)科技有限公司

软件测试 | 影响MySQL性能的重要参数

测吧(北京)科技有限公司

测试

软件测试 | table_cache的设置

测吧(北京)科技有限公司

测试

软件测试 | 升级MySQL

测吧(北京)科技有限公司

测试

git rebase介绍与可视化工具(sourceTree)提效

时常看看太阳

git git rebase sourcetree

PoseiSwap:首个基于模块化设施构建的订单簿 DEX

大瞿科技

【专家观点】贸易企业的数智化绩效管理

用友BIP

贸易

5分钟get:Uni-App网络请求完美封装指南!

陇锦

微信小程序 uni-app 前端开发 uniapp 前端开发框架

智慧消防大数据监控系统 城市火警智能监测

2D3D前端可视化开发

智慧城市 智慧消防 消防物联网云平台 消防云控平台

小程序开发技术解析:事件系统设计

Onegun

小程序 事件 小程序开发

华为云低代码平台Astro Canvas 搭建汽车展示大屏——实验指导手册

华为云PaaS服务小智

软件开发 低代码 数据可视化 华为云

Ubuntu 20.04系统安装Carla详细教程。

百度搜索:蓝易云

云计算 Linux ubuntu 运维 Carla

构建高效物理计划:从逻辑查询到算子实现

KaiwuDB

KaiwuDB SQL编译 物理计划构建

企业诊断屋:服饰美妆电商如何用A/B测试赋能业务

字节跳动数据平台

大数据 A/B 测试 对比实验 企业号 8 月 PK 榜

打通数据治理全链路,火山引擎DataLeap数据治理平台公有云版本正式发布

字节跳动数据平台

大数据 数据中台 数据研发 企业号 8 月 PK 榜

CCIA数安委等组织发起“个人信息保护影响评估专题工作”,合合信息首批入选试点

合合技术团队

人工智能 信息安全 个人信息保护

软件测试 | 源码包安装的性能考虑

测吧(北京)科技有限公司

测试

从国内最早的开放银行浅聊技术创新

FinFish

技术创新 开放银行 小程序化 小程序技术

代码随想录Day34 - 贪心算法(三)

jjn0703

SpringCloud Gateway 在微服务架构下的最佳实践

阿里巴巴云原生

阿里云 云原生 Spring Cloud Gateway

Linux系统下安装使用anaconda教程。

百度搜索:蓝易云

Python 云计算 Linux 运维 Anaconda

基于YonGPT 的企业收入/利税经营分析,让企业经营决策更从容

用友BIP

百度APP iOS端包体积50M优化实践(五) HEIC图片和无用类优化实践

百度Geek说

ios 性能优化 企业号 8 月 PK 榜

直播软件APP源码iOS提交到APP store系列之上架指南

山东布谷科技

软件 直播 源码搭建 iOS APP上架 app store

2023年开放原子校源行(清华大学站)成功举行

开放原子开源基金会

开源 开放原子开源基金会 清华大学

Kube-OVN:基于OVN的开源Kubernetes网络实践_开源_刘梦馨_InfoQ精选文章