容器网络基础:CNI插件原理、Overlay网络模型、容器网络命名空间

容器网络是云原生运维中最容易出问题的环节之一。在蓝绿发布场景下,网络策略的切换、IP地址的分配、流量的隔离与转发,都直接决定发布过程的RTO(恢复时间目标)。本节从底层原理出发,拆解容器网络的三大核心支柱:网络命名空间(隔离基础)、CNI插件(编排标准)、Overlay网络模型(跨主机通信)。

2.1 容器网络命名空间:隔离的基石

每个容器拥有独立的网络栈——包括自己的网卡、路由表、ARP表、iptables规则。这个隔离单元就是网络命名空间(Network Namespace)。宿主机上的容器之间、容器与宿主机之间,通过veth pair(虚拟以太网对)连接,一端在容器内(eth0),另一端在宿主机上(通常命名为vethXXXX)。

关键概念: 没有网络命名空间,容器之间会直接共享宿主机的网络栈,无法实现IP隔离、端口隔离和流量隔离。蓝绿发布中,新旧版本容器必须处于独立的网络命名空间,才能避免端口冲突和路由混乱。

典型的单机容器网络拓扑如下:

单机容器网络命名空间与 veth pair 拓扑 宿主机根网络命名空间(Host Root NS) 容器A 网络命名空间 eth0: 10.0.0.2/24 路由表: default via 10.0.0.1 ARP表: 独立 iptables: 独立 容器B 网络命名空间 eth0: 10.0.0.3/24 路由表: default via 10.0.0.1 ARP表: 独立 iptables: 独立 vethA vethA-peer vethB vethB-peer cni0 网桥 每个容器拥有独立的网络命名空间,通过 veth pair 连接到宿主机网桥,实现二层互通
运维要点: 排查容器网络问题时,nsenter -t <PID> -n 可以进入容器的网络命名空间,直接使用 ip addr、ip route、iptables -L 查看容器内部的网络状态,这是最底层的调试手段。

2.2 CNI插件原理:标准化的网络配置接口

Kubernetes 不直接实现网络功能,而是通过 CNI(Container Network Interface) 标准,将网络配置委托给第三方插件。CNI 定义了容器运行时与网络插件之间的交互规范:

  • ADD 操作:容器创建时,CNI插件为容器分配IP、创建veth pair、配置路由、挂载到网桥或Overlay网络。
  • DEL 操作:容器销毁时,CNI插件回收IP、清理网络资源。
  • CHECK 操作:CNI插件检查容器网络状态是否正常(可选)。

CNI 插件的执行流程如下:

步骤 组件 动作 关键参数
1 kubelet 调用 CNI 插件二进制(如 calico、flannel) CNI_COMMAND=ADD, CNI_CONTAINERID, CNI_NETNS
2 CNI 插件 读取 CNI 配置文件(/etc/cni/net.d/*.conf) type, ipam, capabilities
3 CNI 插件 调用 IPAM 插件分配 IP 地址 subnet, gateway, routes
4 CNI 插件 创建 veth pair,一端放入容器 netns,另一端接入宿主机网络 mtu, master (网桥名)
5 CNI 插件 配置容器内路由和 ARP,返回 JSON 结果 ip, dns, interface
常见陷阱: 蓝绿发布期间,如果 CNI 插件版本不一致或配置变更,可能导致新版本 Pod 无法获取 IP 或路由错误。建议在发布前对 CNI 配置进行版本化管理和预检。

主流 CNI 插件对比:

插件 网络模型 数据面 IPAM 网络策略 性能特点
Flannel Overlay (VXLAN / host-gw) 内核 VXLAN / 路由 host-local 不支持 简单、轻量,适合中小集群
Calico 纯路由 / Overlay (IPIP / VXLAN) BGP / eBPF / 路由 host-local / 全局 支持(丰富) 高性能、策略丰富,适合大规模
Cilium Overlay / 原生路由 eBPF host-local / 全局 支持(基于 eBPF) 极高性能、可观测性强
Weave Overlay (fastdp / 加密) 用户态 / 内核 weave IPAM 支持 内置加密、跨云友好

2.3 Overlay网络模型:跨主机通信的隧道技术

当容器分布在不同的宿主机上时,直接路由需要底层网络支持容器IP的路由,这在大多数云环境或物理网络中不可行。Overlay网络通过在宿主机之间建立隧道,将容器数据包封装在宿主机网络的数据包中传输,解封装后到达目标容器。

最常见的 Overlay 技术是 VXLAN(Virtual Extensible LAN):

  • 封装方式:容器原始数据包 → VXLAN 头部(24位 VNI) → UDP 头部(端口 4789) → 外层 IP 头部(宿主机 IP) → 外层 MAC 头部。
  • VNI(VXLAN Network Identifier):标识不同的 Overlay 网络,支持最多 1600 万个隔离网络。
  • VTEP(VXLAN Tunnel Endpoint):宿主机上的隧道端点,负责封装和解封装。
蓝绿发布关联: Overlay 网络使得蓝绿两套环境的 Pod 可以在不同宿主机上独立运行,通过 VNI 或网络策略实现流量隔离。切换时只需更新 Service 的 Endpoint,无需修改底层网络路由。

VXLAN 跨主机通信流程:

VXLAN Overlay 跨主机容器通信流程 宿主机A (10.10.0.1) 容器A IP: 10.0.0.2 VTEP A VNI: 100 eth0: 10.10.0.1 宿主机B (10.10.0.2) 容器B IP: 10.0.0.3 VTEP B VNI: 100 eth0: 10.10.0.2 原始包 VXLAN封装 UDP隧道 (端口4789) 外层: 10.10.0.1 → 10.10.0.2 VXLAN解封装 原始包 容器A (10.0.0.2) 发送数据给容器B (10.0.0.3):VTEP A 封装为 VXLAN 包,通过宿主机网络发送到 VTEP B,解封装后交付 整个过程对容器透明,容器认为彼此在同一二层网络

2.4 蓝绿发布中的网络关键考量

在蓝绿发布场景下,容器网络的三个基础组件直接影响发布的安全性和速度:

组件 蓝绿发布风险点 最佳实践
网络命名空间 新旧版本 Pod 的 IP 冲突、端口占用 确保每个 Pod 独立命名空间,使用不同的 Service 隔离流量
CNI 插件 IP 分配延迟、CNI 配置变更导致新 Pod 启动失败 发布前验证 CNI 配置一致性,预留 IP 池容量
Overlay 网络 VXLAN 隧道建立延迟、MTU 问题导致丢包 检查宿主机 MTU(通常需设置 1450),监控 VTEP 状态
RTO 优化建议: 在蓝绿发布前,预先创建好目标版本的 Pod 并等待网络就绪(CNI ADD 完成、路由收敛),再切换 Service 流量。这样可以避免发布过程中等待网络初始化的时间,将 RTO 控制在秒级。