Kubernetes网络训练营4期全套教程资源分享

封面图

📖 资源简介

今天分享一套Kubernetes网络训练营4期的课程资源,内容挺系统的,适合想认真学习的同学。

✨ 资源亮点

  • 内容扎实:64节视频课程,跟着老师一步步操作,比自学摸索快得多。

📚 课程内容

课程大纲

  1. 环境准备
  2. 网络基础
  3. Cilium CNI
  4. Calico CNI
  5. Flannel CNI

资源清单

类型 数量
视频教程 64 节
压缩文件 0 个
合计 64

为什么 K8s 网络值得专门花时间啃

很多人学 K8s 是从 kubectl run、写 Deployment YAML 开始的,业务跑起来就以为掌握了。但真正到了生产环境,七八成的疑难杂症最后都落在网络上:Pod 跨节点不通、Service 访问偶发超时、NodePort 被云厂商 SLB 拦了、CoreDNS 解析慢、NetworkPolicy 不生效、Service Mesh 里 mTLS 把链路打满……

K8s 网络和传统虚拟机网络最大的不同在于它有一套自己的抽象模型。你必须先理解这个模型,再看 CNI 插件是怎么把它”落地”成真实报文的,否则永远只会抄 YAML。

K8s 网络的三条基本规则

K8s 官方对网络模型有三条朴素的约定,理解了这三条,后面所有 CNI 插件都是在回答同一个问题:怎么做到它们。

  1. 每个 Pod 都有自己的 IP 地址(IP-per-Pod):Pod 内容器共享网络命名空间,Pod 之间通信时把对方当成一台有独立 IP 的机器,不需要做 NAT。
  2. Node 上的 Pod 可以直接和任意 Node 上的 Pod 通信,不需要 NAT:跨节点 Pod 互访用的是 Pod IP 本身。
  3. Node 上的进程(含 kubelet)可以和本 Node 上的所有 Pod 通信,也不需要 NAT。

这三条听起来简单,难的是第二条:你有 100 个节点、几千个 Pod IP,二层交换机根本不知道这些 IP 在哪台机器上,必须有人负责把路由信息”告诉”整个集群。CNI 插件就是干这件事的。

核心概念:从 netns 到 CNI

网络命名空间与 veth pair

每个 Pod 启动时,kubelet 会调用 CNI 插件,给它做这几件事:

  1. 创建一个新的 network namespace(netns)——这就是 Pod 的”独立网卡世界”。
  2. 建一对 veth pair(虚拟以太网卡对),一头放在宿主机的 cni0 或 caliXXXX 网桥上,一头塞进 Pod 的 netns 里并改名叫 eth0。
  3. 给 Pod 内的 eth0 分配 IP、配置路由和默认网关。

你可以在宿主机上直接验证这个结构:

# 找到某个 Pod 的 netns(假设容器 ID 为 abc123)

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
sudo ls /var/run/netns/
sudo ip netns exec <pod-netns-name> ip addr show
# 应该能看到 Pod 内的 eth0 和它的 IP

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)

# 看宿主机上的 veth 对

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
ip -d link show type veth

宿主机和 Pod 之间的所有通信,本质上都是这对 veth 上的二层帧转发。理解了 veth,就理解了”同一个 Node 上两个 Pod 为什么能直接通”——它们的 veth 都挂在同一个网桥上,交换机式学习即可。

CNI 到底是什么

CNI(Container Network Interface) 不是一个软件,而是 Google、CoreOS 等几家公司定的一个接口规范:只要一个二进制程序遵守”ADD/DEL 两个入参、返回 Pod IP 和路由”的约定,就能被 kubelet 调用给 Pod 配网。

// CNI ADD 调用的大致入参(stdin 传入)
{
  "cniVersion": "0.4.0",
  "name": "k8s-pod-network",
  "containerid": "abc123",
  "netns": "/var/run/netns/abc123",
  "ifname": "eth0",
  "args": {},
  "plugin": "calico"
}

kubelet 在 /etc/cni/net.d/ 下读 .conf 文件,找到对应的插件二进制(通常在 /opt/cni/bin/),然后调用它。

三大主流 CNI 插件对比

课程依次讲了 Cilium、Calico、Flannel,这三家正好代表了三种技术路线:

维度 Flannel Calico Cilium
数据面 UDP / VXLAN / Host-GW IPIP / VXLAN / BGP eBPF / VXLAN
控制面 etcd 直写 BIRD BGP + Typha kube-apiserver + eBPF
性能 一般(隧道封装开销) 较好(BGP 直连可免封装) 最好(内核态 eBPF)
NetworkPolicy 不支持 支持 支持
推荐场景 小规模、入门 中大规模、传统机房 BGP 大规模、可观测性要求高

Flannel:最简单的入门款

Flannel 是 CoreOS 出的极简方案,只干一件事:给每个 Node 分一个网段,然后让所有 Node 都知道”哪个 Pod CIDR 在哪台机器上”。它把这些信息写在 etcd 里。

跨节点报文常见两种模式:

  • VXLAN 模式:在宿主机上建一个 flannel.1 隧道设备,把 Pod 原始 UDP 报文封装在外层 UDP 里,发到对端 Node 解封装。开销在于多了一层封装。
  • Host-GW 模式:直接在每个 Node 上加路由,下一跳填对端 Node 的 IP。要求所有 Node 二层连通(同二层网络),否则路由不可达。
# 查看 flannel 配置

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
cat /run/flannel/subnet.env
# 典型输出:

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
# FLANNEL_NETWORK=10.244.0.0/16

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
# FLANNEL_SUBNET=10.244.1.1/24

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
# FLANNEL_MTU=1450

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)

# 查看宿主机路由,能看到指向其他 Node 的 10.244.x.0/24

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
ip route

Calico:BGP 路由派

Calico 的思路和 Flannel 完全不同:它不搞隧道,而是在每个 Node 上跑一个 BGP 客户端(BIRD),把”我这个 Node 上有哪些 Pod 网段”通过 BGP 协议广播给其他 Node。节点之间像真实路由器一样交换路由表。

  • BGP Fullmesh:节点数少时,每台 BIRD 都和其他所有节点建 BGP 邻居。节点一多,邻居数爆炸(N²)。
  • BGP RR(Route Reflector):选几台节点当路由反射器,其他节点只跟 RR 建邻居,解决规模问题。课程里”44. Calico BGP RR 模式”讲的就是这个。
  • IPIP / VXLAN 模式:当物理网络不适合跑 BGP(比如跨三层),Calico 也能退回隧道封装。

Calico 的杀手锏是 NetworkPolicy:基于 iptables(或 eBPF)实现 Pod 级别的入站/出站 ACL。

Cilium:eBPF 时代的新答案

Cilium 把网络逻辑从 iptables 搬到了 eBPF 程序里,在内核态直接做报文处理,绕过 iptables 那条又长又慢的规则链。

eBPF 的价值可以概括成三点:

  1. 性能:不用再线性匹配成百上千条 iptables 规则。
  2. 可观测:每个 Pod 的 L3/L4/L7 流量都能在内核态直接观测,这就是 Hubble 服务的来源。
  3. 安全:NetworkPolicy、L7 策略(HTTP 方法、路径)都能在内核层强制。

课程里”12. eBPF 介绍与网络应用””13. Cilium 及安装模式介绍”是理解后面所有内容的地基,建议反复看。

Service 与 kube-proxy

Pod 是会漂移的(重启、调度、扩容),不能让调用方硬编码 Pod IP。Service 就是一组 Pod 的稳定访问入口。

四种 Service 类型

类型 作用范围 典型用途
ClusterIP 集群内部虚拟 IP 微服务间调用
NodePort 每台 Node 上开一个端口 测试环境临时暴露
LoadBalancer 对接云厂商 LB 生产对外服务
ExternalName DNS CNAME 别名 把集群外部服务映射成集群内域名

kube-proxy 的两种模式

kube-proxy 负责把 ClusterIP “翻译”成对真实 Pod 的转发。它有两条路线:

  • iptables 模式:为每个 Service 在 nat 表写一堆随机概率规则,报文命中哪条就转给哪个后端 Pod。后端一多,规则数线性膨胀,且是无连接跟踪的随机负载。
  • IPVS 模式:基于内核 L4 调度器,支持 rr / lc / sh 等调度算法,规模大时性能和可维护性都更好。

切换到 IPVS:

# kube-proxy 启动参数 --proxy-mode=ipvs

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
kubectl logs -n kube-system daemonset/kube-proxy | grep -i "proxy mode"

# 安装 IPVS 内核模块

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
sudo modprobe ip_vs ip_vs_rr ip_vs_wlc ip_vs_sh
ipvsadm -Ln

会话亲和性与 EndpointSlice

Service 的 sessionAffinity: ClientIP 可以让同一个客户端始终落到同一个后端。后端列表则由 Endpoints(旧)或 EndpointSlice(新,按规模切片)维护,kubelet 发现 Pod Ready 后由 controller 自动更新。

Ingress:七层路由

Service 是四层的,基于 IP:Port 转发。要按域名、URL 路径转发到不同 Service,就需要 Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: blog-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: blog.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-svc
            port:
              number: 80
  tls:
  - hosts: ["blog.example.com"]
    secretName: blog-tls

注意 ingressClassName: nginx 指向哪个 Ingress Controller,由集群里的 IngressClass 定义决定。TLS 终止由 Ingress Controller 完成,证书放在 Secret 里。

CoreDNS 与服务发现

集群里 Pod 不靠 IP 通信,靠域名。CoreDNS 作为集群内 DNS 服务器,把 <service>.<namespace>.svc.cluster.local 解析成 ClusterIP。

每个 Pod 的 /etc/resolv.conf 由 kubelet 自动写入:

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

排查 DNS 问题的三板斧:

kubectl run -it --rm dnsutils --image=busybox:1.36 -- nslookup kubernetes.default
kubectl logs -n kube-system deploy/coredns
# 看 Corefile

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
kubectl get configmap -n kube-system coredns -o yaml

NetworkPolicy:给 Pod 装防火墙

默认情况下,所有 Pod 之间互相通。生产环境必须用 NetworkPolicy 做最小权限。最常见的基线是”默认拒绝所有入站,再按需放行”:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
  namespace: prod
spec:
  podSelector: {}          # 选中 namespace 下所有 Pod
  policyTypes: ["Ingress"]
  ingress: []              # 空 = 拒绝一切入站
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-frontend
  namespace: prod
spec:
  podSelector:
    matchLabels: { app: backend }
  policyTypes: ["Ingress"]
  ingress:
  - from:
    - podSelector:
        matchLabels: { app: frontend }
    ports:
    - protocol: TCP
      port: 8080

注意:NetworkPolicy 必须 CNI 插件支持才生效(Flannel 默认不支持),这也是生产环境选 Calico / Cilium 而不是 Flannel 的重要原因之一。

学习路线导读(按课程章节)

这套课的章节安排非常合理,建议按顺序学:

  1. 环境准备:先把集群跑起来。VMware 网络模式搞清楚(NAT / 桥接 / 仅主机),再用 kubeadm 或 KinD 起一个多节点集群。Containerlab 那节是后面做 VXLAN/BGP 实验的关键工具。
  2. 网络基础:TCP/IP 协议栈、IP/MAC、VETH、HOST-GW、CNI 模型与工作原理——这是后面所有插件的”公共地基”,不要跳。
  3. Cilium CNI(章节最大,22 节):从 eBPF 入门,到 Native Routing、VXLAN、IPSec、Wireguard 加密、SocketLB、DSR、双栈、带宽管理、Ingress、Gateway API、BGP Control Plane、ClusterMesh。这一章节密度极高,建议每节都动手在 Containerlab 里复现一遍。
  4. Calico CNI:对照着 Cilium 学,重点体会 IPIP vs VXLAN vs BGP Fullmesh vs RR 的取舍。
  5. Flannel CNI:相对简单,重点是把它和前两家对比,理解”为什么大规模生产不会用 Flannel”。
  6. 高性能 CNI(Multus):多网卡场景、IPvLAN / MACVLAN / SR-IOV,这是网卡直通、DPDK、高性能网络的进阶内容。

高频面试与排障要点

排障四件套:

# 1. Pod 之间能不能通?

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
kubectl exec -it <pod-a> -- ping <pod-b-ip>
kubectl exec -it <pod-a> -- curl -v <svc-name>

# 2. 解析对不对?

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
kubectl exec -it <pod-a> -- nslookup <svc-name>

# 3. 路由和 iptables 落在哪?

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
ip route show
iptables-save | grep <service-ip>
ipvsadm -Ln | grep <service-ip>

# 4. 抓包看真实报文

![封面图](https://www.suyouke.com/wp-content/uploads/2026/09/doubao_img_021_20260922_113350-16.png)
kubectl exec -it <pod> -- tcpdump -nn -i any port 8080

高频面试题:

  • Pod 跨 Node 不通,怎么一步步排查?(先同 Node 测 → 跨 Node 测 → 查 CNI 路由 → 查安全组 → 抓包)
  • Service ClusterIP 为什么在集群里能 ping / 不能 ping?(ClusterIP 是虚拟 IP,没有对应网卡,TCP 可达但 ICMP 不一定)
  • kube-proxy iptables 模式和 IPVS 模式区别?什么场景必须上 IPVS?
  • NetworkPolicy 不生效,先查什么?(CNI 是否支持、policyType 是否写对、podSelector 是否选中 Pod)
  • Cilium 相比 Calico 的核心优势是什么?(eBPF 性能 + L7 可观测)

总结与建议

K8s 网络是一门”看十遍不如做一遍”的学科。这套课最有价值的地方,是它用 Containerlab + KinD 把 BGP、VXLAN、Wireguard、DSR 这些平时在公司集群里碰不到的底层机制都做成了可复现实验。

学习建议:

  • 先有实验环境,再看视频。空看一遍很容易以为自己懂了,动手时 veth 都找不到。
  • 三大插件对照着学,每换一个插件就对比一次”路由表、iptables/eBPF 规则、抓包结果”。
  • 不要沉迷 CNI 选型。业务稳定比插件新潮更重要;理解原理后,选哪个插件都是工程问题。

📁 目录结构

目录概览

  • 📂 1.环境准备
  • 📂 2.网络基础
  • 📂 3.Cilium CNI
  • 📂 4.Calico CNI
  • 📂 5.Flannel CNI
  • 📂 6.高性能 CNI(Multus / IPvLAN / SR-IOV)
📋 点击展开查看章节大纲
[V2]Kubernetes网络训练营4期/
├── 1.环境准备
│   ├── VMware 网络模式
│   ├── Kubeadm 部署 K8s 集群
│   ├── KinD 部署 K8s 集群
│   └── Containerlab 与 KinD 结合
├── 2.网络基础
│   ├── TCP/IP 协议栈、IP 与 MAC
│   ├── VETH / HOST-GW
│   └── CNI 网络模型与工作原理
├── 3.Cilium CNI(eBPF / Native Routing / VXLAN / IPSec /
│              Wireguard / SocketLB / DSR / 双栈 /
│              LB IPAM / 带宽管理 / Ingress /
│              Gateway API / BGP Control Plane / ClusterMesh)
├── 4.Calico CNI
│   ├── 同节点通信 / Proxy ARP
│   ├── IPIP(CrossSubnet 模式)
│   ├── VXLAN(CrossSubnet 模式)
│   ├── BGP Fullmesh / Route Reflector
│   ├── eBPF with DSR / VPP 模式
│   ├── Service DataPath 与生产实践
│   └── Calico IPAM 高级用法
├── 5.Flannel CNI
│   ├── TUN-TAP / UDP / VXLAN / IPIP / HOST-GW
│   └── IPsec / Wireguard 加密模式
└── 6.高性能 CNI
    ├── Multus 多网卡
    ├── IPvLAN(L2 / L3 / SBR)
    ├── MACVLAN SBR
    ├── SR-IOV(Kernel / DPDK-VPP)
    └── K8s CNI IPAM

资源获取

💡 建议:尽快保存到本地网盘或电脑,避免分享链接后期失效。


整理不易,如果对你有帮助,欢迎分享给更多需要的朋友。

Kubernetes网络训练营4期全套教程资源分享-速优课
Kubernetes网络训练营4期全套教程资源分享
此内容为付费阅读,请付费后查看
¥2
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费阅读
© 版权声明
THE END
喜欢就支持一下吧
点赞14
相关推荐
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容

温馨提示:
1、本内容转载于网络,版权归原作者所有!
2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
3、本内容若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!