灵雀云开源Kube-OVN网络组件,增强Kubernetes网络功能

  • 2019 年 12 月 4 日
  • 笔记

近日,灵雀云宣布发布基于OVN的Kubernetes网络组件Kube-OVN,并正式将其在Github上开源。Kube-OVN提供了大量目前Kubernetes不具备的网络功能,并在原有基础上进行增强。通过将OpenStack领域成熟的网络功能平移到Kubernetes,来应对更加复杂的基础环境和应用合规性要求。

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

Kube-OVN 五大重要功能

灵雀云Kube-OVN主要实现五大功能:

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

静态IP分配;

动态QoS;

分布式和集中式网关;

内嵌 LoadBalancer;

Kube-OVN架构图

子网是灵雀云Kube-OVN最重要的概念,子网与namespace 关联,只需在 namespace中设置对应的 annotation即可实现子网的功能。Kube-OVN支持子网cidr、gateway、exclude_ips以及 switch_name 设置,同时支持基于子网的IP隔离,用户可以轻松实施基本的网络隔离策略。

静态IP可以直接在 Pod 中加入对应annotation,Controller 在发现相关 annotation 时会跳过自动分配阶段,直接使用用户指定的 IP/Mac。

在QoS功能中,Kube-OVN分别实现了 ingress 和 egress 的带宽限制,用户可以在 Pod 运行时通过动态调整 annotation 来实现 QoS 的动态调整,无需重启 Pod。

在网关设计中,使用策略路由根据网络包的源 IP 选择下一跳的机器,通过这种方式将流量导入所希望的边界网关节点,在网关节点通过SNAT 的方式对外进行访问。此外,也支持非SNAT将容器IP直接暴露给外网的场景。

内嵌LoadBalancer使用OVN 内置的 L2 LB,集群内部的服务发现功能可以直接在 OVS 层面完成,kube-porxy 的功能也整合到 Kube-OVN 当中。

网络插件千千万,

为啥还需要Kube-OVN?

在谈及Kube-OVN开发的初衷时,灵雀云首席Kubernetes专家刘梦馨表示,当前Kubernetes网络组件非常分散,实现方式五花八门。

例如,CNI 负责基础的容器网络,本身只是接口标准,社区和市场上有很多实现;集群内的服务发现网络需要依赖 kube-proxy,而 kube-proxy 本身又有 iptables 和 ipvs 两种实现;集群内DNS 需要依赖额外的组件kube-dns或者coredns;集群对外访问的负载均衡器服务依赖各个云厂商提供的Cloud-Provider等等。分散的网络组件给网络问题排查带来了巨大的复杂度,需要维护人员掌握全链路上所有组件的使用、原理以及排查方式。灵雀云希望能够通过一个网络方案实现所有数据平面的统一,从而降低问题排查难度和工作量。

其次,现有网络插件尽管种类繁多,但由于覆盖的功能集合不同,落地时很难有一套方案能够通吃所有场景。同时,很多传统的网络方案在容器网络中都是缺失的,现有 Kubernetes网络能力远远不足。而在OpenStack领域,虚拟网络有了长足的发展,方案成熟,事实上OVS 已经成为网络虚拟化的标准。而OVN 和 OVS 的关系好比 Kubernetes 和 Docker。OVN 将高层次的网络抽象转换成具体的网络配置和流表,下发到各个节点的OVS实现集群网络的管理。

OVN提供了大量 Kubernetes 网络目前不存在的功能,涵盖CNI、 Kube-Proxy、LoadBalancer、NetworkPolicy、DNS等在内的所有 Kubernetes 网络功能,并在原有基础上都有所增强。同时支持多平台,可以在Linux、Windows、KVM、XEN、Hyper-V 以及 DPDK 等环境下运行。

据悉,接下来灵雀云将在Kubernetes网络方面继续加大研发力度,增强各方面功能。不断解决每个单点问题,改善网络性能,引入更多工具,打造更加完整的Kubernetes网络体系。

灵雀云CTO陈恺表示:“灵雀云是开源技术和开源精神的受益者,也是CNCF/CDF等开源社区的早期倡导者和贡献者。取之开源回馈开源,未来我们将在开源领域持续大力投入,在Kubernetes及其周边项目/技术上继续做出贡献,进一步推动Kubernetes、DevOps、微服务等云原生相关技术和理念的成熟与普及。”