1. K8s 网络基础:CNI 概念、Pod 网络模型、Service 与 EndpointSlice 原理

1.1 CNI(Container Network Interface)概念

CNI 是 Kubernetes 网络插件的标准接口,负责为 Pod 分配网络资源并配置网络连通性。Kubelet 在创建 Pod 时调用 CNI 插件完成以下操作:

  • 分配 IP 地址:从集群 CIDR 中为 Pod 分配唯一 IP。
  • 配置网络接口:在 Pod 的 Network Namespace 中创建 veth pair 并接入宿主机 bridge 或 overlay 网络。
  • 设置路由规则:确保 Pod 可以跨节点通信。
关键原则:CNI 插件必须保证集群内任意两个 Pod 可以直接通信,无需 NAT 转换。
CNI 插件 网络模式 性能特点 适用场景
Calico BGP / VXLAN BGP 模式延迟低,VXLAN 模式封装开销约 5-10% 大规模集群、网络策略严格
Flannel VXLAN / host-gw host-gw 性能接近原生,VXLAN 有封装开销 中小规模、快速部署
Cilium eBPF / VXLAN eBPF 模式延迟极低,支持 L7 策略 高性能、安全敏感场景
Weave fastdp / VXLAN fastdp 模式吞吐较高,但 CPU 占用略高 跨云混合部署

1.2 Pod 网络模型

Kubernetes 对 Pod 网络有三大核心要求:

  1. 每个 Pod 拥有独立 IP:Pod 内的所有容器共享同一个 Network Namespace,通过 localhost 通信。
  2. Pod 之间可以直接通信:无需 NAT,无论是否在同一节点。
  3. Node 与 Pod 之间可以直接通信:节点上的进程可以通过 Pod IP 直接访问 Pod。
设计意图:这种模型将 Pod 视为“轻量级虚拟机”,简化了应用迁移和微服务架构的网络设计。
Pod 网络模型:跨节点通信示意 Node 1 (10.0.1.0/24) Pod A IP: 10.1.1.2 容器1 | 容器2 Pod B IP: 10.1.1.3 容器3 cni0 bridge (veth 对) eth0 (物理网卡) Node 2 (10.0.2.0/24) Pod C IP: 10.1.2.2 容器4 Pod D IP: 10.1.2.3 容器5 | 容器6 cni0 bridge (veth 对) eth0 (物理网卡) Overlay / BGP Pod 跨节点通信:Pod A → Pod C 经过 cni0 → eth0 → 网络隧道 → eth0 → cni0

1.3 Service 原理

Service 是 Kubernetes 中用于暴露一组 Pod 的抽象层,提供稳定的虚拟 IP(ClusterIP)和负载均衡能力。其核心组件包括:

  • ClusterIP:Service 的虚拟 IP,仅在集群内部可达。
  • kube-proxy:运行在每个节点上,负责将 ClusterIP 的流量转发到后端 Pod。
  • iptables / IPVS / eBPF:kube-proxy 的三种代理模式,性能差异显著。
代理模式 转发机制 性能特点 适用规模
iptables DNAT 规则链 规则数量线性增长,大规模集群性能下降 小规模(< 1000 服务)
IPVS 内核哈希表 O(1) 查找,吞吐高,支持更多调度算法 中大规模(推荐)
eBPF (Cilium) BPF 程序 延迟极低,可编程,支持 L7 策略 高性能场景
性能陷阱:iptables 模式下,每增加一个 Service 都会在所有节点上插入多条规则。当集群规模超过 5000 个 Service 时,规则更新延迟可达秒级,严重影响网络性能。

1.4 EndpointSlice 原理

EndpointSlice 是 Kubernetes v1.21+ 中用于替代传统 Endpoints 的资源对象,解决了大规模集群中 Endpoints 对象的性能瓶颈。

核心改进:

  • 分片存储:每个 EndpointSlice 最多存储 100 个端点,避免单个对象过大。
  • 增量更新:Pod 变化时只更新对应的分片,减少全量同步开销。
  • 拓扑感知:支持将端点按节点/区域分组,实现拓扑感知路由。
性能对比:在 5000 个 Pod 的集群中,传统 Endpoints 对象大小可达 2MB,更新延迟 > 5s;EndpointSlice 分片后每个对象 < 20KB,更新延迟 < 100ms。
EndpointSlice 分片机制 Service: my-app EndpointSlice 1 zone: us-east-1a Pod: 10.1.1.2 (node1) Pod: 10.1.1.3 (node1) Pod: 10.1.1.4 (node2) ... (最多 100 个) EndpointSlice 2 zone: us-east-1b Pod: 10.1.2.2 (node3) Pod: 10.1.2.3 (node3) Pod: 10.1.2.4 (node4) ... (最多 100 个) EndpointSlice 3 zone: us-east-1c Pod: 10.1.3.2 (node5) Pod: 10.1.3.3 (node6) Pod: 10.1.3.4 (node6) ... (最多 100 个) 每个 EndpointSlice 按拓扑区域分片,kube-proxy 只 watch 相关分片,减少控制面压力

1.5 本章小结

概念 核心作用 性能关注点
CNI Pod 网络接口与 IP 分配 封装模式、路由方式、MTU 配置
Pod 网络模型 扁平 IP 空间,无 NAT 通信 跨节点隧道开销、网络策略影响
Service 稳定虚拟 IP 与负载均衡 代理模式选择(iptables vs IPVS vs eBPF)
EndpointSlice 端点分片存储与增量更新 分片大小、拓扑感知路由