容器网络基础:CNI插件原理、Overlay网络模型、容器网络命名空间
容器网络是云原生运维中最容易出问题的环节之一。在蓝绿发布场景下,网络策略的切换、IP地址的分配、流量的隔离与转发,都直接决定发布过程的RTO(恢复时间目标)。本节从底层原理出发,拆解容器网络的三大核心支柱:网络命名空间(隔离基础)、CNI插件(编排标准)、Overlay网络模型(跨主机通信)。
2.1 容器网络命名空间:隔离的基石
每个容器拥有独立的网络栈——包括自己的网卡、路由表、ARP表、iptables规则。这个隔离单元就是网络命名空间(Network Namespace)。宿主机上的容器之间、容器与宿主机之间,通过veth pair(虚拟以太网对)连接,一端在容器内(eth0),另一端在宿主机上(通常命名为vethXXXX)。
关键概念: 没有网络命名空间,容器之间会直接共享宿主机的网络栈,无法实现IP隔离、端口隔离和流量隔离。蓝绿发布中,新旧版本容器必须处于独立的网络命名空间,才能避免端口冲突和路由混乱。
典型的单机容器网络拓扑如下:
运维要点: 排查容器网络问题时,
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 跨主机通信流程:
2.4 蓝绿发布中的网络关键考量
在蓝绿发布场景下,容器网络的三个基础组件直接影响发布的安全性和速度:
| 组件 | 蓝绿发布风险点 | 最佳实践 |
|---|---|---|
| 网络命名空间 | 新旧版本 Pod 的 IP 冲突、端口占用 | 确保每个 Pod 独立命名空间,使用不同的 Service 隔离流量 |
| CNI 插件 | IP 分配延迟、CNI 配置变更导致新 Pod 启动失败 | 发布前验证 CNI 配置一致性,预留 IP 池容量 |
| Overlay 网络 | VXLAN 隧道建立延迟、MTU 问题导致丢包 | 检查宿主机 MTU(通常需设置 1450),监控 VTEP 状态 |
RTO 优化建议: 在蓝绿发布前,预先创建好目标版本的 Pod 并等待网络就绪(CNI ADD 完成、路由收敛),再切换 Service 流量。这样可以避免发布过程中等待网络初始化的时间,将 RTO 控制在秒级。