k8s CNI插件简单了解,


Kubernetes网络模型本身对某些特定的网络功能有一定要求,但在实现方面也具有一定的灵活性。业界已经有不少不同的网络方案,来满足特定的环境和要求。

CNI(container network interface)是容器网络接口,它是一种标准设计和库,为了让用户在容器创建或者销毁时都能够更容易的配置容器网络。

目前比较流行的CNI插件:Flannel、Calico、Weave、Canal(技术上是多个插件的组合)。这些插件即可以确保满足Kubernetes的网络要求,又能为kubernetes集群管理员提供他们所需的某些特定的网络功能。

背景

容器网络是容器选择连接到其他容器、主机和外部网络(如Internet)的机制。容器的runtime提供了各种网络模式,每种模式都会产生不同的效果。例如,Docker默认情况下可以为容器配置以下网络:

  • none:将容器添加到一个容器专门的网络堆栈中,没有对外连接。
  • host:将容器添加到主机的网络堆栈中,没有隔离。
  • default bridge:默认网络模式。每个容器可以通过IP地址互相连接。
  • 自定义网桥:用户定义的网桥,具有更多的灵活性、隔离性和其他便利功能。

Docker还可以让用户通过其他驱动程序和插件,来配置更高级的网络(包括多主机覆盖网络)。

CNI(https://github.com/containernetworking/cni/blob/master/SPEC.md) 的初衷是创建一个框架,用于在配置或销毁容器时动态配置适当的网络配置和资源。CNI 规范中用于配置网络的插件接口,可以让容器运行时与插件进行协调,具体机制如下:

  • 插件负责为接口配置和管理IP地址,并且同于提供与IP管理、每个容器的IP分配、以及多主机连接相关的功能。
  • 容器运行时会调用网络插件,从而在容器启动时分配IP地址并配置网络策略,并在删除容器时再次调用插件以清理这些资源。
  • 在Kubernetes中,kubelet可以在适当的时间调用插件,来为通过kubelet启动的pod进行自动的网络配置。

术语

  • VXLAN:代表“虚拟可扩展LAN”。首先,VXLAN用于通过在UDP数据报中封装第2层以太网帧来帮助实现大型云部署。VXLAN虚拟化与VLAN类似,但提供更大的灵活性和功能(VLAN仅限于4096个网络ID)。VXLAN是一种封装和覆盖协议,可在现有网络上运行。
  • Overlay网络:Overlay网络是建立在现有网络之上的虚拟逻辑网络。Overlay网络通常用于在现有网络之上提供有用的抽象,并分离和保护不同的逻辑网络。
  • 网状网格:网状网络(Mesh network)是指每个节点连接到许多其他节点以协作路由、并实现更大连接的网络。网状网络允许通过多个路径进行路由,从而提供更可靠的网络。网状网格的缺点是每个附加节点都会增加大量开销。
  • BGP(Border Gateway Protocol):即"边界网关协议",用于管理边缘路由器之间数据包的路由方式。BGP通过考虑可用路径,路由规则和特定网络策略,帮助弄清楚如何将数据包从一个网络发送到另一个网络。

原理

要实现跨虚拟机的容器之间的网络,有几种可能的办法:

  • 容器的IP就是二层网络里分配的IP,这样容器相当于二层网络里的节点,那么就可以天然互访;
  • 容器的IP与node的IP不属于同一个网段,node上配置个到各个网段的路由(指向对应容器网段所部属的node IP),通过路由实现互访[flannel host-gw, calico bgp均是通过此方案实现];
  • 容器的IP与node的IP不属于同一个网段,node上有服务对容器发出的包进行封装,对发给容器的包进行解封。封装后的包通过node所在的网络进行传输。解封后的包通过网桥或路由直接发给容器,即overlay网络。[flannel udp/vxlan,calico ipip,openshift-sdn均通过此方案实现]

CNI 插件

Flannel(只能提供网络通讯,不提供网络策略)

链接:https://github.com/coreos/flannel

由CoreOS开发的项目Flannel,是最直接和最受欢迎的CNI插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。

特点:

Calico

链接:https://github.com/projectcalico/cni-plugin

Calico以其性能、灵活性而闻名。

特点:

canal

链接:https://github.com/projectcalico/canal

Canal是Flannel和Calico的组合:

Weave

链接:https://www.weave.works/oss/net/

weave是Weaveworks提供的一种Kubernetes CNI网络选项。

特点:

详细资料:https://www.sohu.com/a/304555150_618296

相关内容

    暂无相关文章