这个系列不教你写 YAML,不教你 kubectl apply。它要回答的问题只有一个:一个包从 Pod A 发出去,到底经过了什么才到达 Pod B? 我们会从 Linux 网络栈的第一个字节开始,逐层拆解虚拟设备、Netfilter、路由、隧道、eBPF,然后进入 Kubernetes 的网络模型、CNI 插件、Service 机制、安全策略,最终走到多集群联邦网络。每篇都带抓包、带代码、带内核源码引用,目标是让你对着 tcpdump 的输出就能说清楚每一跳发生了什么。
适合谁看
- 小白:知道 IP 地址是什么,用过 Docker,想搞清楚 Kubernetes 网络到底怎么回事。建议从第一阶段开始,别跳。
- 工程师:日常运维 K8s 集群,能写 NetworkPolicy,但说不清 kube-proxy 到底做了什么。可以跳过熟悉的 Linux 基础,直接从第二阶段开始。
- 专家:做过 CNI 插件选型,写过 eBPF 程序,想系统梳理一遍知识体系。挑感兴趣的章节看,重点关注第三、五、六阶段。
- 学术:研究容器网络、SDN、数据面加速。第六阶段的性能调优和第七阶段的演进方向会有参考价值。
推荐阅读顺序
不必按顺序全读,根据你的目标选一条路径:
- 只想懂 K8s 网络基础 → 01 → 07 → 08 → 09
- 想做 CNI 选型 → 11 → 12 → 13 → 14
- 想搞安全 → 19 → 20 → 21 → 22
- 想排查故障 → 23 → 25 → 26;若事件是 FailedScheduling / Pending,先读附录 31
- 调度与落点 → 31,再回到 07 / 26
- 全部读完 → 按顺序 01-30,附录 31 可按需
目录
第一阶段:Linux 网络基石
Kubernetes 网络不是凭空造出来的,它建立在 Linux 内核几十年积累的网络栈之上。这一阶段把地基打牢。
- 从网卡中断到 socket recv(),一个包在内核里走过的完整路径
- veth、bridge、tun/tap、macvlan/ipvlan——容器网络的基础零件
- 五链四表,kube-proxy 和 NetworkPolicy 的底层引擎
- VXLAN、IPIP、GRE、WireGuard——跨节点通信的几种姿势
- Calico 为什么选 BGP,AS、路由通告、路由反射器
- TC、XDP、socket 级别的 eBPF 程序,Cilium 数据面的基石
第二阶段:Kubernetes 网络模型
有了 Linux 网络基础,现在进入 Kubernetes 的世界。理解它的网络模型、CNI 接口和 Service 抽象。
- 三大保证:Pod-to-Pod、Pod-to-Service、外部访问,以及它们的实现代价
- ADD/DEL/CHECK/VERSION,一个 CNI 插件到底要做什么
- ClusterIP/NodePort/LoadBalancer 的 iptables/ipvs/eBPF 三种实现
- 双栈 Service、双栈 Pod,以及迁移过程中的坑
第三阶段:CNI 插件深度对比
市面上几十种 CNI 插件,选哪个?这一阶段逐个拆解主流方案,最后给出选型框架。
- 最简单的 CNI:VXLAN overlay、host-gw,以及它的天花板在哪
- BGP 路由方案、Felix/BIRD/Typha 架构、eBPF 数据面
- eBPF 原生 CNI、身份识别、Hubble 可观测、Service Mesh
- 性能/功能/运维复杂度多维度对比,给出决策树
第四阶段:服务发现与流量治理
Service 只是起点。DNS 解析、流量拆分、南北向入口、Gateway API——这一阶段讲清楚流量怎么找到目的地。
- 插件链架构、K8s 服务发现、DNS 缓存与性能调优
- Headless Service、ExternalName、TopologyAwareHints、流量本地化
- Nginx/Traefik/Envoy 三大 Ingress 实现对比与选型
- Ingress 的继任者:HTTPRoute、TLSRoute、角色分离模型
第五阶段:网络安全与零信任
网络通了不等于安全。这一阶段从 NetworkPolicy 到零信任网络,逐层加固。
- 原生 NetworkPolicy 的能力边界与 CNI 实现差异
- 基于身份而非 IP 的安全模型、透明加密、mTLS
- 两种数据面的安全策略实现与绕过风险分析
- WireGuard、IPsec、mTLS——传输层加密方案对比与性能代价
第六阶段:性能调优与故障排查
能跑和跑得好是两回事。这一阶段解决”为什么慢”和”为什么断”。
- 隧道封装吃掉的字节、Path MTU Discovery、PMTUD 黑洞问题
- Direct Server Return:跳过反向路径、降低延迟、减少 SNAT
- Hubble、Grafana、eBPF flow log——看见每一个包的去向
- DNS 5s 延迟、conntrack 表满、Service 不通——常见问题的排查套路
第七阶段:多集群与未来
单集群网络搞定了,多集群怎么办?eBPF 的未来在哪?这一阶段看远一点。
- Submariner、Cilium ClusterMesh、Skupper——跨集群 Pod 互通方案
- 多云互联、联邦 Service、全局负载均衡
- eBPF 替代 kube-proxy、替代 sidecar、替代 iptables 的路线图
- Service Mesh 无 sidecar 化、内核网络栈演进、硬件卸载
附录:调度与节点放置
包路径从「Pod 已经
Running」开始。若调度失败,节点上根本没有这根
veth。下面一篇补调度侧的标签硬约束与打散,避免把
Pending 误判成网络故障。
nodeSelector/nodeAffinity/ 污点容忍 /topologySpread各自解决什么- kube-scheduler Filter 与 Score 如何用节点标签;Pending 与过度约束踩坑
- 与本系列排查篇的衔接:先确认落点,再抓包
附录调度侧还要分清两件事:标签匹配了仍可能 Pending(污点、资源 Fit、拓扑硬约束仍在否决),以及 软偏好不要当成 Cluster Autoscaler 的容量依据(关键放置用硬约束或专用池,见 31 第八节)。
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【Kubernetes 网络深度系列】Kubernetes 网络模型:三条规则统治一切
K8s 网络三条铁律、pause 容器的真实作用、Pod 网络命名空间的创建全过程
【Kubernetes 网络深度系列】nodeSelector 与节点放置:Filter、亲和性与拓扑打散
nodeSelector 是什么:它如何在 kube-scheduler 的 Filter 阶段用节点标签硬约束落点,与 nodeAffinity、taint/toleration、topologySpread 的职责边界,以及 Pending 与过度约束的常见踩坑。
【Kubernetes 网络深度系列】Cilium 深度拆解:eBPF 原生的云原生网络
从 eBPF 数据面到 Identity 安全模型,全面拆解 Cilium 的架构与实现
【Kubernetes 网络深度系列】CNI 规范拆解:一个 JSON 配置怎么变成网络
从 CNI 规范的四个操作到手写一个最简 CNI 插件,理解 K8s 网络的插件化机制