02中的 UTS 变更使一侧看到另一主机名。网络 namespace 则把设备、路由、地址与端口状态分隔开:单有独立 netns 并不能让两个进程通信。两端的报文必须经过明确建立的连接与正确配置的地址、路由;veth 是一对虚拟二层端点,不会自动给另一端分配 IP。

从内核对象推导路径

让进程 A、B 分别进入两个 netns:每一侧起初可只看到自己的 loopback 设备;需先把 lo 置 up,建立 veth 对,把两个端点分别放入 netns,给接口分配互通地址与路由,确认 ARP/邻居条目及链路状态,再用同一 probe_app.py 的 /health 观测端到端访问。对同一网段的直连流量,veth 负责把一端送出的二层帧交给另一端;想连第三个网段需路由/网关,不是再加一个 curl 就能自动到达。IP 地址和监听地址各有作用:只监听 127.0.0.1 的服务不会因 veth 配通而自动变得可从另一 netns 访问。

本云端可以安全调用 unshare -Ur -n;原始记录显示新 netns inode net:[4026532574] 与原来 net:[4026531994] 不同,新视图只列出 lo,进程退出后原 namespace inode 不变。这是“视图可以分离”的 LAB_VERIFIED,不是“veth 已连通”。这里缺 ip 工具与专用网络实验 VM,尚未创建/抓包两个 netns、veth、地址和路由;完整通信验收 NOT_RUN。复跑入口与清理和统一源码包保留路径,不改共享宿主默认网络。先前网络 33的静态模型不能代替这次真实连通数据。

反例可在 VM 先只建 veth 而不配地址,观察链路对象存在但请求仍失败;再只让服务监听 127.0.0.1,对比同 netns 和异 netns 访问结果。失败阶段应分别保留接口状态、路由、监听 socket、抓包和 HTTP 返回,不能一口断定为 CNI 的问题。

现象 对象 限定条件
netns inode 不同 /proc/<pid>/ns/net 不证明已有 veth
ping 通但服务失败 socket 监听与端口 传输层以上另核查
无地址时链路存在 veth 端点及路由 veth 不分配 IP

练习

  1. 先预测只建立 veth 对、不配地址时两个进程能否互相 HTTP 请求;专用 VM 按步骤逐项补齐并抓包定位第一次成功的条件。
  2. 预测 A 监听 127.0.0.1 与 0.0.0.0 时 B 的访问差异;在两个自建 netns 用相同探针记录监听地址、请求目标与日志。

上一篇:21:停止与日志;下一篇:23:bridge、端口、DNS。

系列总目录:从进程隔离到运行时与编排。

参考资料