3. Kubernetes 网络模型:Pod网络、Service网络、NetworkPolicy与Calico的集成

在Kubernetes集群中,网络模型是容器编排的基石。理解Pod网络、Service网络以及NetworkPolicy的协作关系,是进行容量规划和网络接口镜像拉取测试的前提。Calico作为业界领先的CNI插件,通过其高效的网络策略引擎和数据路径,将这三层网络模型紧密集成,为集群提供安全、可观测的网络基础设施。

3.1 Kubernetes三层网络模型概述

Kubernetes网络模型定义了三个核心抽象层,每一层解决不同的通信问题:

网络层 通信范围 核心组件 IP地址来源 主要用途
Pod网络 集群内所有Pod之间 CNI插件(如Calico) Calico IPAM 容器间直接通信,无需NAT
Service网络 集群内客户端到服务 kube-proxy + iptables/IPVS Service CIDR(虚拟IP) 提供稳定的服务发现与负载均衡
NetworkPolicy Pod间访问控制 Calico Policy Engine 基于标签选择器 定义微隔离规则,控制流量进出
容量规划要点: Pod网络CIDR的大小直接影响集群可调度的Pod数量上限。例如,使用 /16 的Pod CIDR最多支持 65536 个Pod,但实际受节点规格和Calico IPAM池分配策略限制。Service CIDR通常较小(如 /12),但需预留足够的虚拟IP供Service使用,避免因IP耗尽导致服务创建失败。

3.2 Pod网络:Calico的BGP与IPIP模式

Pod网络是Kubernetes网络模型的基础。Calico通过BGP(Border Gateway Protocol)或IPIP(IP in IP)隧道实现跨节点Pod通信。在容量规划测试中,理解这两种数据路径对网络接口镜像拉取性能的影响至关重要。

  • BGP模式(Direct Routing):Calico在每个节点上运行BGP客户端(如Bird),与ToR交换机或节点间建立BGP对等体。Pod IP路由直接通过BGP通告,数据包无需封装,性能接近原生网络。
  • IPIP模式(Overlay):当节点不在同一二层网络时,Calico使用IPIP隧道封装原始数据包。这会增加额外的包头开销(约20字节),并可能影响MTU和吞吐量。
  • VXLAN模式:Calico也支持VXLAN作为Overlay选项,提供更大的二层域扩展,但封装开销更大(50字节),对CPU负载有一定影响。
镜像拉取测试关联: 在测试中,如果镜像拉取请求跨越多个节点,Pod网络的数据路径(BGP vs IPIP)将直接影响拉取延迟和吞吐量。建议在测试前确认Calico的backend模式,并记录节点间的网络拓扑。
Calico Pod网络跨节点通信数据路径 Node A Pod A (10.0.1.2) eth0: 192.168.1.10 Calico (BGP/IPIP) Node B Pod B (10.0.2.3) eth0: 192.168.2.20 Calico (BGP/IPIP) BGP Direct Routing 无封装,性能最优 IPIP Tunnel (Overlay) 封装开销 ~20 bytes 容量规划测试要点 • BGP模式:适合低延迟、高吞吐场景,镜像拉取性能接近物理网络。 • IPIP/VXLAN模式:适合跨子网场景,但需测试MTU调整对镜像拉取的影响。

3.3 Service网络:kube-proxy与Calico的协同

Service网络为Pod提供稳定的虚拟IP(ClusterIP)和负载均衡。kube-proxy负责将发往Service IP的流量转发到后端Pod。Calico虽然不直接参与Service IP的分配,但其网络策略可以精细控制Service流量的进出。

  • ClusterIP:默认Service类型,仅在集群内部可达。kube-proxy通过iptables或IPVS规则将ClusterIP DNAT到Pod IP。
  • NodePort:在每个节点上开放一个静态端口,外部流量通过NodePort进入,再由kube-proxy转发到Pod。
  • LoadBalancer:云厂商或自建负载均衡器将外部流量分发到NodePort或直接到Pod。
性能影响: 在镜像拉取测试中,如果使用Service暴露镜像仓库,kube-proxy的转发模式(iptables vs IPVS)会影响连接建立速度和吞吐量。IPVS模式使用哈希表,在大规模Service场景下性能优于iptables。建议在测试集群中启用IPVS模式,并监控conntrack表大小。

3.4 NetworkPolicy:Calico的微隔离引擎

NetworkPolicy是Kubernetes原生的网络访问控制机制。Calico通过其强大的策略引擎,支持比原生NetworkPolicy更丰富的规则,包括:

特性 Kubernetes原生NetworkPolicy Calico NetworkPolicy
规则范围 仅支持Pod选择器 支持Pod、Namespace、Node、IP CIDR选择器
动作 仅允许(Allow) 允许(Allow)、拒绝(Deny)、日志(Log)
规则顺序 OR逻辑(任意规则匹配即允许) 优先级排序,支持显式拒绝
服务账户 不支持 支持基于Kubernetes ServiceAccount的规则
性能优化 依赖kube-proxy/iptables 使用eBPF或iptables,支持大规模集群
测试建议: 在镜像拉取测试中,如果启用了NetworkPolicy,请确保镜像仓库Pod的标签与策略中的选择器匹配。否则,拉取请求可能被策略拒绝,导致测试失败。建议在测试前使用 calicoctl get networkpolicy 检查当前生效的策略。

3.5 Calico集成架构:三层模型的统一控制面

Calico通过其控制面组件(如 Felix、BIRD、confd)将Pod网络、Service网络和NetworkPolicy统一管理。下图展示了Calico如何将这三层模型集成到Kubernetes集群中:

Calico集成架构:Pod网络 + Service网络 + NetworkPolicy Kubernetes API Server Calico Control Plane Felix (策略代理) BIRD (BGP路由) confd (配置管理) Data Plane (Node) Pod网络 (BGP/IPIP) Service转发 (kube-proxy) NetworkPolicy (iptables/eBPF) 三层网络模型集成关系 1. Pod网络:Calico通过BGP/IPIP提供Pod间直接通信,数据路径由Felix管理。 2. Service网络:kube-proxy将Service IP DNAT到Pod IP,Calico策略可控制Service流量。 3. NetworkPolicy:Calico将策略编译为iptables或eBPF规则,在数据面执行微隔离。 4. 集成效果:所有网络流量(包括镜像拉取)都经过这三层模型的过滤和转发。

3.6 容量规划视角:三层模型的资源消耗

在进行容量规划驱动的镜像拉取测试时,需要关注三层网络模型对节点资源的消耗:

  • Pod网络:Calico的BGP会话数、路由表大小、IPIP隧道数。每个节点维护的路由条目数随Pod数量线性增长。
  • Service网络:kube-proxy的iptables规则数或IPVS连接表大小。Service数量增加会导致规则膨胀,影响包处理延迟。
  • NetworkPolicy:策略规则数直接影响iptables链长度。Calico的eBPF模式可显著降低规则匹配开销。
测试指标建议: 在镜像拉取测试中,同时监控以下指标:
- 节点CPU:Calico Felix和kube-proxy的CPU使用率。
- 网络吞吐量:Pod网络接口的带宽和丢包率。
- 连接跟踪:conntrack表大小和溢出情况。
- 策略命中率:NetworkPolicy规则匹配次数和拒绝次数。

3.7 小结

Kubernetes网络模型中的Pod网络、Service网络和NetworkPolicy通过Calico实现了紧密集成。Pod网络提供底层通信能力,Service网络提供稳定的服务抽象,NetworkPolicy提供安全访问控制。在容量规划驱动的Calico网络接口镜像拉取测试中,理解这三层模型的协作机制和资源消耗模式,是准确评估集群性能和可扩展性的关键。