4. 容器网络模型:CNI规范、Pod网络命名空间、veth pair与网桥、Cilium的L3/L4网络策略

容器网络是云原生基础设施的核心环节。本章将深入剖析容器网络模型的关键组件:从CNI规范的设计哲学,到Pod网络命名空间的隔离机制,再到veth pair与网桥的数据转发路径,最后以Cilium的L3/L4网络策略为例,展示eBPF如何重构传统网络策略的执行方式。

4.1 CNI规范:容器网络的标准化接口

CNI(Container Network Interface)是CNCF旗下的容器网络标准规范,定义了容器运行时与网络插件之间的交互协议。其核心设计原则是简单、可组合、可扩展。

组件 角色 关键操作
容器运行时 调用方(如containerd、CRI-O) 创建/删除Pod时触发CNI插件
CNI插件 网络配置执行方 ADD / DEL / CHECK / VERSION
CNI配置 JSON格式的插件链描述 指定插件类型、IPAM、附加参数
关键设计点:CNI规范不关心Pod的IP地址如何分配、路由如何下发,只定义插件必须实现的四个操作。这种极简设计使得Flannel、Calico、Cilium等不同实现可以无缝替换。

4.2 Pod网络命名空间:隔离的基石

每个Pod拥有独立的网络命名空间(Network Namespace),这是Linux内核提供的网络隔离机制。Pod内的所有容器共享同一个网络命名空间,意味着它们共享IP地址、端口栈、路由表和网络设备。

  • 隔离性:Pod的网络栈与宿主机及其他Pod完全隔离
  • 共享性:同一Pod内的容器通过localhost通信,无需经过网络协议栈
  • 生命周期:网络命名空间随Pod创建而创建,随Pod销毁而回收
性能提示:Pod网络命名空间的创建和销毁是高频操作。在大规模集群中,Cilium通过eBPF程序直接操作内核网络栈,避免了传统方式中频繁的命名空间切换开销。

4.3 veth pair与网桥:数据路径的构建

veth pair(虚拟以太网对)是连接两个网络命名空间的隧道设备,一端在Pod的网络命名空间内(通常命名为eth0),另一端在宿主机网络命名空间(通常命名为vethXXXX)。网桥(Linux Bridge)则负责在同一宿主机上的多个veth设备之间转发二层数据帧。

veth pair + Linux Bridge 数据路径 Pod A 网络命名空间 eth0: 10.0.1.2/24 Pod B 网络命名空间 eth0: 10.0.1.3/24 vethA-eth0 vethA-host vethB-eth0 vethB-host ← 上一章 📖 返回目录 下一章 →