当前位置: 首页 > news >正文

Kubernetes相关的名词解释CNI插件(1)

(一)什么是CNI插件?

在 Kubernetes 中,CNI 插件(Container Network Interface Plugin) 是一种用于配置容器网络接口的标准工具,负责为 Pod 分配网络资源(如 IP 地址)并建立网络连接。它是 Kubernetes 网络模型的核心组件之一。

CNI 定义了一组规范和插件,使得容器运行时(如 Docker、containerd、CRI-O 等)能够与第三方网络插件(CNI 插件)通信,从而实现容器网络的配置和管理。

(二)CNI 的工作原理

CNI 的核心思想是将容器的网络配置与容器运行时解耦,通过插件机制实现网络配置的灵活性。CNI 的工作流程可以分为以下几个步骤:

容器运行时创建网络命名空间:当 Kubernetes 调度一个 Pod 到某个节点时,容器运行时(如 containerd 或 Docker)会为该 Pod 创建一个新的网络命名空间。
CNI 插件进行网络配置:容器运行时会调用 CNI 插件,执行网络配置操作。CNI 插件负责以下任务:
为容器分配 IP 地址。
设置网络接口(如虚拟网卡)。
配置路由表和网络策略。
IPAM 插件分配 IP 地址:CNI 插件通常会使用 IPAM(IP Address Management)插件来为容器分配 IP 地址。IPAM 插件负责管理 IP 地址池,并为每个容器分配唯一的 IP 地址。
启动容器:网络配置完成后,容器运行时启动容器,并将其加入到已配置的网络命名空间中。

(三)CNI 的核心作用

  1. Pod 网络配置

    • 当 Pod 被创建时,CNI 插件会自动为 Pod 分配 IP 地址、配置网络接口(如 veth pair),并确保 Pod 能与集群内其他 Pod、节点或外部网络通信。

    • 当 Pod 被删除时,CNI 插件会释放资源。

  2. 实现 Kubernetes 网络要求

    • Kubernetes 要求所有 Pod 必须能直接通过 IP 地址相互通信(无需 NAT),无论它们是否在同一节点上。CNI 插件负责实现这一目标。

(四)CNI的配置方式

  • CNI 插件通过 JSON 配置文件(通常位于 /etc/cni/net.d/)定义网络规则,例如子网、路由、插件类型等。

(五)常见的常见的 CNI 插件有哪些?

  1. Calico

    • 基于 BGP 协议实现高性能网络,支持网络策略(NetworkPolicy)。

  2. Flannel

    • 简单的 Overlay 网络,使用 VXLAN 或 host-gw 模式。

  3. Cilium

    • 基于 eBPF 技术,提供高性能和高级网络策略。

  4. Weave Net

    • 自动创建 Mesh 网络,支持加密通信。

  5. Amazon VPC CNI

    • 在 AWS EKS 中直接为 Pod 分配 VPC IP 地址。

(六)那么安装Kubernetes 后自带了CNI插件吗?

Kubernetes 本身不提供任何内置的 CNI 插件,但它的网络模型依赖于 CNI 标准。安装 Kubernetes 后,你需要手动安装和配置一个 CNI 插件,否则 Pod 可能无法正常分配 IP 地址或通信。

Kubernetes 默认网络模式(kubenet

  • 如果未安装 CNI 插件,Kubernetes 会使用内置的 kubenet 网络插件,但它的功能非常有限:

    • 仅提供基本的网络连接(依赖节点上的 bridge 和 host-local CNI 插件)。

    • 需要手动配置节点路由,且不支持跨节点网络策略(NetworkPolicy)。

    • 大多数生产环境不会使用 kubenet

(七)Microk8s安装后自带了CNI插件吗?

MicroK8s 默认会自带一个 CNI 插件(具体取决于安装方式和版本),通常是 Flannel 或 Calico,以确保 Pod 网络能正常工作。不过,它的行为可能因不同的安装模式(如 strict 或 classic)而有所不同。

默认情况(非严格模式 / classic
  • MicroK8s 默认启用 flannel 作为 CNI 插件,提供简单的 Overlay 网络(基于 VXLAN)。

  • 安装后,Pod 会自动获得 IP 并支持跨节点通信。

严格模式(strict
  • 如果以 strict 模式安装(如 Ubuntu Core 环境),MicroK8s 默认使用 calico(因其支持网络策略 NetworkPolicy)。

MicroK8s 允许动态启用/禁用不同的 CNI 插件:

# 切换到 Calico
microk8s enable calico# 切换到 Flannel
microk8s enable flannel# 禁用当前插件
microk8s disable <cni-name>

(八)CNI 插件安装在哪儿?

CNI 插件安装在 Node(节点)的主机上,而不是容器内部。它的作用是为主机上的 Pod(容器组)配置网络接口、分配 IP 地址并管理网络连接。

为什么 CNI 插件必须安装在主机上?

  1. 直接操作主机网络

    • CNI 插件需要创建 veth pair、配置网桥(如 cni0)、管理 iptables 规则等,这些操作需在主机网络栈中完成。

  2. Pod 网络初始化时机

    • 当 Pod 启动时,容器运行时(containerd/CRI-O) 会调用 CNI 插件,而容器运行时本身运行在主机上。

  3. 跨节点通信需求

    • CNI 插件需处理节点间的路由(如 Calico 的 BGP 或 Flannel 的 VXLAN),这些功能依赖主机级配置。

CNI 插件的工作流程(以 Pod 创建为例)

  1. kubelet 收到创建 Pod 的请求,通过 CRI 接口通知容器运行时(如 containerd)。

  2. 容器运行时 先创建 Pod 的沙箱环境(pause 容器),然后调用 CNI 插件。

  3. CNI 插件(如 Calico)从 /etc/cni/net.d/ 读取配置,执行以下操作:

    • 创建 veth pair(一端在 Pod 内,一端在主机上)。

    • 为主机端的 veth 分配 IP 并添加到网桥或路由表。

    • 更新 iptables/ebpf 规则(如需网络策略)。

  4. 网络配置完成后,Pod 内的容器共享 pause 容器的网络命名空间,获得网络连接。

相关文章:

  • 【Easylive】seataServer.properties 配置文件详细解析
  • stm32(gpio的四种输出)
  • 2025年渗透测试面试题总结-拷打题库06(题目+回答)
  • 网络--socket编程(2)
  • 【Linux】条件变量、基于阻塞队列的生产者消费者模型
  • java怎么找bug?Arthas原理与实战指南
  • 内积模型的性质
  • 数字化转型四步走:企业的进化密码
  • 大模型Rag - 两大检索技术
  • JVM基础认知:JVM到底是什么?为什么它如此重要?
  • 【NLP 65、实践 ⑯ 基于Agent优化文章】
  • 【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试
  • 基于medusa范式的大模型并行解码推理加速初探
  • 程序性能(1)嵌入式基准测试工具
  • PointCore——利用局部全局特征的高效无监督点云异常检测器论文与算法解读
  • Redis增删改查
  • 意志力的源头——AMCC(前部中扣带皮层)
  • 3D打印加速产品试制
  • 进程程序替换
  • 【unity游戏开发入门到精通——UGUI】RectTransform矩形变换组件
  • 历史学家许福谦逝世,长期致力于魏晋南北朝史研究
  • 世卫成员国就《大流行病协议》达成一致,首次演练应对气候诱发的病毒危机
  • 嘉兴乌镇一化工公司仓库火灾后,当地召开火灾警示现场会
  • 华夏银行去年净赚超276亿增近5%,个人贷款不良率升至1.8%
  • 创纪录!南向资金今年净流入已超6000亿港元,港股缘何被爆买?
  • 北京航空航天大学强基计划今年新增4个招生培养方向