K8s 网络
容器网络看起来像魔法,拆开只有几层封装。这一段先从四条铁律推出 CNI、Service、LoadBalancer、Ingress 与策略各管一段;再动手把高性能网络接进集群:给 Pod 划地盘、插第二张网卡、把 RDMA 交给它;然后才回头手搓一个容器网络、看 Service 规则与 eBPF 在内核里怎么落地。整条路的收尾也在这里 —— 把前面全部的排查手法沉淀成看板、告警与值班流程。
概念:先建立模型
6 节 · 185 分钟四条铁律推出 CNI、Service、LoadBalancer、Ingress 与策略各管一段 —— 先把分工认清。
- 1
K8s 网络模型:四条铁律
原理入门25mK8s 不实现网络,它只规定了几条必须满足的约束。理解约束,才能理解各家 CNI 的取舍。
- 复述 K8s 网络模型的强制约束,并解释它为什么排除了端口映射方案
- 区分 Pod CIDR、Service CIDR、节点网段三套地址
- 判断一个网络需求该由 CNI、Service 还是 Ingress 来满足
- 2
CNI 与数据平面:overlay、原生路由与 eBPF
原理35m同一个网络模型有三种实现路线,性能与运维复杂度差别很大。
- 解释 overlay(VXLAN/Geneve)与原生路由各自的代价
- 说清 eBPF 数据平面比 iptables 快在哪里
- 按机房条件(能否跑 BGP、MTU 是否可控)选 CNI 与模式
- 3
Service:一个不存在的 IP 是怎么工作的
原理35mClusterIP ping 不通却能访问。把这件事讲透,Service 的四种类型就都通了。
- 解释 ClusterIP 为什么 ping 不通,以及 DNAT 发生在哪一侧
- 区分 ClusterIP、NodePort、LoadBalancer、Headless 的适用场景
- 说清 externalTrafficPolicy 与源 IP 保留之间的取舍
- 4
MetalLB:裸金属集群的 LoadBalancer
原理35m云上一行 type: LoadBalancer 就有 VIP,裸金属得自己实现。两种宣告方式,选错了要么不通、要么只有高可用没有负载均衡。
- 解释 L2 模式下 VIP 是怎么被宣告与抢占的,以及为什么它只是高可用
- 说清 BGP 模式的对等配置与 ECMP 分担,并据此在两种模式之间选择
- 排查 VIP 不通时知道该看哪个 CRD、哪份日志、抓什么包
- 5
南北流量:Ingress、Gateway API 与出口治理
原理30m流量从集群外进来的几种正规入口,以及出方向该不该管、怎么管。
- 说出 Ingress 与 Gateway API 的能力差异和迁移路径
- 规划入口层:LB VIP、Ingress 控制器副本、证书从哪来
- 给出限制 Pod 出网的两种做法及其代价
- 6
CoreDNS 与 NetworkPolicy
原理25m集群里一半的"网络故障"其实是 DNS;另一半是策略拦了没人知道。
- 解释 Pod 内 DNS 查询的完整过程与 ndots 带来的额外查询
- 排查 CoreDNS 延迟与超时
- 写出一条最小放行的 NetworkPolicy 并验证它生效
实践:划地盘,把网卡插进去
5 节 · 165 分钟地址规划是一次性决定、长期后悔的事;然后把物理网与 RDMA 直通给 Pod,最后闯一关。
- 7
地址与 VLAN 规划:给集群划地盘
原理30m地址规划是一次性决定、长期后悔的事。Pod CIDR 划小了以后加不了节点。
- 按节点数与单节点 Pod 数上限反推 Pod CIDR 大小
- 规划节点网、Service CIDR、LB 地址池不重叠
- 给出一份可交给网络组执行的 VLAN 与网段表
- 8
SR-IOV、MacVLAN 与 IPvlan:把网卡切给容器
原理30m三种让容器贴近物理网的方式,性能与灵活度各有取舍。
- 解释 PF 与 VF 的关系以及 VF 数量的限制
- 区分 MacVLAN、IPvlan、SR-IOV 在数据路径上的差异
- 按场景选出合适的接入方式并说出它的代价
- 9
动手:给 Pod 插第二张网卡
实验35mAI 训练和虚拟机场景都需要 Pod 直连物理网。Multus、Spiderpool、MacVLAN 的实际配法。
- 用注解给 Pod 申请次级网卡与固定 IP 段
- 解释 MacVLAN、IPvlan、SR-IOV 三种接入方式的差异
- 判断什么场景必须 hostNetwork、什么场景该用 MacVLAN
- 10
动手:K8s 里把 RDMA 交给 Pod
实验40mnetwork-operator、rdma/hca 资源、hostNetwork 与 MacVLAN 两种模式的实际配法。
- 部署 network-operator 并用 NicClusterPolicy 暴露 rdma/hca 资源
- 按 IB 或 RoCE 场景写对 Pod 的资源与网络配置
- 在 Pod 内验证 RDMA 设备可用并跑通带宽测试
- 11
闯关:Pod 之间不通
闯关30m同一个 Service 有些副本能访问、有些不行。在模拟终端里一层层剥开。
- 按 Pod → 节点 → CNI → Service → 策略的顺序收敛问题
- 区分 DNS 失败、策略拦截、路由缺失三类症状
- 定位到具体节点或具体规则,而不是停在"网络不通"
原理:再拆开数据平面
3 节 · 100 分钟手搓一个容器网络,再看 Service 规则与 eBPF 在内核里到底怎么落地。
- 12
动手:用 netns 和 veth 手搓一个容器网络
实验35m不用 K8s、不用 Docker,纯 ip 命令把两个"容器"连通,容器网络就没有秘密了。
- 手工创建 netns、veth pair 和网桥,让两个命名空间互通
- 解释容器出网为什么需要 SNAT
- 在宿主机上找到某个 Pod 对应的 veth 和 netns
- 13
kube-proxy 的三代实现与 eBPF 替换
原理深入30miptables 模式在几千个 Service 时会退化。这节讲退化的原因和替代方案。
- 解释 iptables 模式的规则数量与匹配开销为何随 Service 数增长
- 说清 IPVS 模式改善了什么、没改善什么
- 判断是否该开 kubeProxyReplacement
- 14
eBPF 与 XDP:把逻辑塞进内核路径
原理深入35m从 Cilium 到网络可观测性,eBPF 已经是容器网络的默认答案。
- 说出 eBPF 程序可以挂在网络路径的哪些钩子上
- 解释 XDP 为什么能做到线速丢包
- 判断一个需求该用 eBPF 还是传统方案
收尾:长期值班
2 节 · 55 分钟整条路走完了,把一次性的排查沉淀成看板、告警和别人能照着执行的流程。