梗概

CNI (Container Network Interface) 是一个规范和库,用于配置 Linux 容器的网络接口。在 Kubernetes 中,CNI 插件负责为 Pod 分配 IP 地址并设置必要的路由,使 Pod 能够相互通信以及与外部网络通信。

详细说明

功能与作用

  • 为容器提供标准化的网络配置接口,负责容器网络资源的分配、释放和管理
  • 实现 Pod 之间、Pod 与 Node 之间以及 Pod 与外部网络之间的通信
  • 支持实现 NetworkPolicy 等网络策略,提供网络隔离和安全控制
  • 简化容器网络配置,使网络解决方案可插拔化

工作原理

  • CNI 定义了一组接口规范,描述了容器运行时如何与网络插件交互
  • 当 Pod 创建或销毁时,Kubernetes 调用 CNI 插件来配置或清理网络资源
  • CNI 插件负责为容器分配 IP 地址、设置路由表以及处理 DNS 配置等网络设置
  • 插件通常会在 Node 上创建虚拟网络设备(如 veth pair)来连接容器与主机网络

常见 CNI 插件

  1. Calico

    • 高性能、可扩展的网络和网络安全解决方案
    • 支持网络策略,提供细粒度的访问控制
    • 使用 BGP 路由协议,不依赖 overlay 网络,性能较高
  2. Flannel

    • 简单易用的 overlay 网络解决方案
    • 适合入门级 Kubernetes 集群
    • 支持多种后端(如 VXLAN、host-gw 等)
  3. Cilium

    • 基于 eBPF 技术的网络解决方案
    • 提供高级网络功能和安全特性
    • 支持基于 HTTP/gRPC/Kafka 等应用层协议的网络策略
  4. Weave Net

    • 创建虚拟网络,连接跨多个主机的容器
    • 支持加密通信,提高安全性
    • 易于部署和配置

与 Kubernetes 组件的关系

  • Kubelet 在创建 Pod 时调用 CNI 插件配置网络
  • CNI 插件与 NetworkPolicy 协同工作,实现网络隔离
  • CNI 为 ServiceKube-proxy 提供底层网络支持
  • CNI 与 Ingress 协同工作,处理外部流量

father:: kubernetes