3. 网络观测核心概念:网络命名空间、虚拟以太网对、网桥、路由表在租户隔离中的基础作用

在构建多租户云原生环境时,网络隔离是安全与性能的基石。eBPF 网络观测的核心任务之一,就是准确捕获并呈现这些隔离机制在数据路径上的真实行为。本章深入剖析四个基础网络抽象——网络命名空间、虚拟以太网对(veth)、网桥与路由表——并阐明它们在租户隔离蓝图中的协同作用。

3.1 网络命名空间:隔离的第一道边界

网络命名空间(Network Namespace)是 Linux 内核提供的一种轻量级虚拟化机制,它让每个命名空间拥有独立的网络栈:包括自己的网络设备、IP 地址、路由表、防火墙规则(iptables/nftables)以及套接字(socket)实例。在 Kubernetes 或容器化场景中,每个 Pod 或租户容器通常被分配一个独立的网络命名空间,从而实现网络层面的完全隔离。

观测要点: eBPF 程序可以通过 sk_lookup 或 sk_skb 钩子捕获数据包时,利用 bpf_get_ns_current_pid_tgid() 或 bpf_skc_to_tcp6_sock 等辅助函数,提取数据包所属的网络命名空间 ID(netns ID)。这是将流量归属到特定租户的关键元数据。
特性 网络命名空间 进程命名空间(PID NS)
隔离对象 网络栈(设备、路由、防火墙) 进程 ID 树
默认共享 主机命名空间(init_net) 父命名空间
eBPF 观测关键字段 skc_net 指针 → net->ns.inum pid_ns_id
租户隔离价值 确保租户 A 无法直接访问租户 B 的网卡或路由 辅助进程级审计

3.2 虚拟以太网对(veth):跨命名空间的管道

虚拟以太网对(veth pair)总是成对出现,像一根虚拟网线连接两个网络命名空间。数据包从一端进入,立即从另一端原样流出。在 Kubernetes 中,每个 Pod 的 eth0 接口通常就是 veth 对的一端,另一端则连接到宿主机或网桥的命名空间。

数据流示例: 当 Pod A 发送数据包时,数据流经:
Pod A 的 eth0(veth 端) → 宿主机侧的 veth 端 → 网桥或路由决策 → 目标设备。

eBPF 在 veth 设备上可以挂载 tc(traffic control)或 XDP 钩子,直接观测或修改经过该虚拟链路的数据包。由于 veth 对是成对出现的,通过 eBPF 程序可以追踪数据包从哪个命名空间出发,进入哪个命名空间,形成跨命名空间的流量拓扑。

3.3 网桥:二层转发与租户广播域

Linux 网桥(bridge)是一个虚拟的二层交换机,它根据 MAC 地址表在连接到同一网桥的多个网络接口之间转发数据帧。在租户隔离场景中,网桥常被用来连接同一租户内的多个 Pod 或容器,形成一个共享的二层广播域,同时通过 VLAN 或 eBPF 规则与其他租户隔离。

图 3-1:网络命名空间、veth 对与网桥的隔离拓扑 租户 A 命名空间 Pod A1 (veth端) Pod A2 (veth端) 租户 B 命名空间 Pod B1 (veth端) Pod B2 (veth端) 宿主机网桥命名空间 Linux 网桥 (br0) 说明:veth 对连接 Pod 与网桥;网桥在同一租户内提供二层转发,不同租户间通过命名空间隔离。

3.4 路由表:三层转发与策略隔离

每个网络命名空间都拥有独立的路由表。当数据包需要跨越子网或访问外部网络时,内核根据路由表进行三层转发决策。在租户隔离蓝图中,路由表不仅负责将流量导向正确的网关,还可以通过策略路由(Policy Routing)实现更细粒度的隔离:例如,根据数据包的源 IP、源端口或 fwmark 标记选择不同的路由表。

常见陷阱: 在多租户环境中,如果路由表配置不当(例如默认路由冲突或策略路由缺失),可能导致租户 A 的流量意外经过租户 B 的网络路径,造成信息泄露或性能干扰。eBPF 可以通过 fib_lookup 辅助函数在数据包处理路径中实时验证路由决策的正确性。

3.5 四者协同:租户隔离的数据路径

一个典型的租户隔离数据路径如下:

  1. 源 Pod 在自身网络命名空间内发出数据包。
  2. 数据包通过 veth 对 穿越命名空间边界,到达宿主机侧。
  3. 宿主机侧的 网桥 根据 MAC 地址表决定是否在同一二层域内转发。
  4. 若需要跨子网或出宿主机,则查询该命名空间的 路由表 决定下一跳。
  5. 最终数据包通过物理网卡或隧道设备离开宿主机。

eBPF 可以在上述每一个步骤中插入观测点:

步骤 eBPF 钩子位置 观测内容
1. 源 Pod 发出 tc_ingress 或 XDP 在 Pod veth 端 源 IP、源端口、进程 PID、netns ID
2. veth 对穿越 tc_egress 在宿主机侧 veth 端 数据包大小、方向、时间戳
3. 网桥转发 br_handle_frame 或 tc 在网桥端口 MAC 地址学习、广播/多播流量
4. 路由查询 fib_lookup 辅助函数或 tc 钩子 路由表命中、下一跳、出接口
5. 物理出口 tc_egress 在物理网卡 最终封装、VLAN 标签、隧道信息
图 3-2:eBPF 观测点与租户隔离数据路径 ① 源 Pod 发出 ② veth 对穿越 ③ 网桥转发 ④ 路由查询 tc_ingress/XDP tc_egress br_handle_frame fib_lookup/tc ⑤ 物理出口 / 隧道 说明:eBPF 在每个关键步骤部署观测点,捕获 netns ID、MAC 地址、路由决策等元数据,用于重建租户隔离拓扑。

3.6 小结