zoukankan      html  css  js  c++  java
  • 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插件。它是容器编排系统中最成熟的网络结构示例之一,旨在实现更好的容器间和主机间网络。

    特点:

    1. 相对容易安装和配置。它被打包为单个二进制文件flanneld,许多常见的Kubernetes集群部署工具和许多Kubernetes发行版都可以默认安装Flannel。

    2. Flannel可以使用Kubernetes集群的现有etcd集群来使用API存储其状态信息,因此不需要专用的数据存储。

    3. Flannel配置第三层IPv4 overlay网络。它会创建一个大型内部网络,跨越集群中每个节点。在此overlay网络中,每个节点都有一个子网,用于在内部分配IP地址。在配置pod时,每个节点上的Docker桥接口都会为每个新容器分配一个地址。同一主机中的Pod可以使用Docker桥接进行通信,而不同主机上的pod会使用flanneld将其流量封装在UDP数据包中,以便路由到适当的目标。

    4. 主要是提供主机和pod之间的网络链接。

    Calico

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

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

    特点:

    1. Clico的功能更为全面,不仅提供主机和pod之间的网络链接,还涉及网络安全和管理。
    2. Calico CNI插件在CNI框架内封装了Calico的功能。
    3. Calico不使用overlay网络,而是配置第三层网络(网络层,IPv4、IPv6、ICMP)【更底层】。该网络使用BGP路由协议在主机之间路由数据包。这意味着在主机之间传输的时候,不需要将数据包包装在额外的封装层中。传输效率更高,有性能优势。
    4. 故障排查更方便。使用calico,标准调试工具可以访问与简单环境中相同的信息,从而使更多开发人员、管理人员更容易理解行为。
    5. 具有先进的网络功能:
      1. 网络策略
      2. 还可以与服务网格Istio集成,

    canal

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

    Canal是Flannel和Calico的组合:

    1. 网络层用的是Flannel提供的简单overlay,可以在许多不同的部署环境中运行且无需额外的配置。
    2. 网络策略方面,Calico强大的网络规则评估,为基础网络提供了更多补充,从而提供了更多安全性和控制。

    Weave

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

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

    特点:

    1. 智能路由 Weave在集群中的每个节点之间创建overlay网络,参与者可以灵活路由。——Weave可以智能路由。

      工作原理:

      为了创建网络,weave依赖于网络中每台主机上安装的路由组件。然后,这些路由器交换拓扑信息,以维护可用网络环境的最新试图。 当需要将流量发送到位于不同节点上的pod时,weave路由组件会自动决定是通过"快速数据路径"发送,还是回退到"sleeve"分组转发的方法。

    2. 与Calico一样,Weave也为Kubernetes集群提供网络策略功能。

    3. 对整个网络的简单加密。Weave可以使用NaCI加密(http://nacl.cr.yp.to)来为sleeve流量自动加密所有路由流量;使用IPsec ESP来加密快速数据路径流量。

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

  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/colorchild/p/14175075.html
Copyright © 2011-2022 走看看