Kubernetes 网络插件和 CNI 插件的对比及使用方法

阅读时长 5 分钟读完

一、前言

在 Kubernetes 集群中,网络插件可以理解为 Kubernetes 节点之间通信的“网线”,保证集群中各个组件(Pod)之间可以通信,并且 Pod 可以正常地访问外部网络。目前 Kubernetes 支持多种网络插件,其中最常用的是 CNI 插件。

本文较为详细地介绍 Kubernetes 网络插件和 CNI 插件的原理、用法及其对比,同时给出了实际操作示例。

二、Kubernetes 网络插件的原理及分类

Kubernetes 网络插件可以分为两类:Overlay 网络和 Underlay 网络。

  • Overlay 网络:使用软件定义网络(SDN)解决 Kubernetes 中的网络问题。这种网络模型可以将 Kubernetes 中各个 Pod 的 IP 地址“封装”起来,不会对宿主机的网络体系造成破坏。比较典型的 Overlay 网络插件有 Flannel、Calico、Weave Net 等。
  • Underlay 网络:这种网络模型使用宿主机底层的网络协议栈来解决各个 Pod 之间的通信问题,不使用 Overlay 技术。也就是说,每个 Pod 直接使用宿主机的网络,不再需要另外的网络设置。比较典型的 Underlay 网络插件有 Bridge、Host、Macvlan 等。

三、CNI 插件的原理及其优点

CNI 是一个 Kubernetes 支持的网络插件接口规范,提供了各种网络插件可以按照规范来实现。CNI 插件主要由三部分组成:CNI 插件、网络配置和容器运行时。

CNI 插件主要有如下优点:

  • 兼容性好:CNI 插件可以适配各种 Kubernetes 插件,对于较新版本的 Kubernetes 也有支持。
  • 无限制:CNI 插件可以在网络模式与拓扑方面进行高度自定义。
  • 安全:CNI 插件支持各种安全机制,如 TLS 认证、身份验证等。

四、CNI 插件的使用方法

下面为简单的 CNI 插件使用实例:

首先,通过 yum 或 apt-get,安装 CNI 插件:

然后,创建一个名为 “bridge” 的网络,将它保存为 JSON 格式:

-- -------------------- ---- -------
-
    ------------- --------
    ------- ---------
    ------- ---------
    --------- ----------
    ------------ -----
    --------- -----
    ------- -
        ------- -------------
        --------- --------------
        --------- -
            - ------ ----------- -
        -
    -
-

最后,应用这个网络:

在容器中使用 CNI 插件也十分简单,只需指定相应的网络插件即可:

五、CNI 插件与 Kubernetes 网络插件的对比

接下来,我们简要对比一下 CNI 插件和 Kubernetes 不同的网络插件:

  1. Flannel

Flannel 是 Kubernetes 中最常用的 overlay 网络插件,可以支持自定义内部网络拓扑结构。相较于 CNI 插件,Flannel 提供的网络性能较佳。但是,Flannel 有着一定的复杂性和部署成本。同时,Flannel 多用内部的 VXLAN 和 GRE 技术,这使得它的网络功能对物理网络更加依赖。

  1. Calico

Calico 是基于 BGP 的固定处置的独立层网络 (PILN)。Calico 使用网络层路由技术来创建一个扁平的二层网络,并且支持高度自定义的网络拓扑结构,甚至可以支持多种虚拟化和容器化平台。相较于 Flannel,Calico 对企业级应用更加友好。但是 Calico 部署和维护上的复杂度较高,并且不能保证用户配置的路由顺序。

  1. Weave Net

像 Calico 和 Flannel 一样,Weave Net 也是一个 SDN 网络,使用 VXLAN 协议提供网络隔离。Weave Net可以将该局域网扩展到广域网,而不会像 VLAN 一样受到网络物理链路的限制。Weave Net不依赖于任何特定的基础设施或下层网络,因此可以与硬件基础设施完全隔离。Weave Net 还提供了对其他容器化平台的支持,因此非常灵活。

  1. Macvlan

Macvlan 是一种 Linux 网络类型,能够让应用(容器)保持和宿主机相当的网络配置。Macvlan 核心的特性是能够对应一对虚拟 VETH 设备对的 MAC 地址进行扩展,这些设备分别用于容器和宿主机。由于它采用的是底层虚拟化技术,因此性能较优。但是 Macvlan 带来了额外的网络管理和配置,因此使用可能更具挑战性。

六、结论

本文重点介绍了 Kubernetes 网络插件和 CNI 插件的原理、用法及其对比。根据不同的需求和网络拓扑结构,用户可以灵活选择不同的网络插件来保证 Kubernetes 集群的良好运行。

除了 Flannel、Calico、Weave Net 等比较流行的网络插件,Kubernetes 还提供了如下插件:

  • Bridge
  • Host-Local
  • Macvlan
  • IPVLAN
  • SR-IOV

各插件具体的用法和特性可参考 Kubernetes 官方文档。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6747d5f95883fc5ebfe4fba5

纠错
反馈