容器内怎么抓包
容器抓包的关键是搞清它用的是哪一套网络命名空间。共享宿主网络栈的容器直接在宿主接口上抓即可;使用独立网络命名空间的容器,必须在它的命名空间内抓,或者从宿主侧对应的虚拟接口对端抓。容器镜像里通常没有抓包工具,临时安装会改变运行环境且受镜像源限制,因此更稳妥的做法是进入命名空间后用宿主已有的工具执行。这样既不改动镜像,也不影响业务进程的运行环境。
基本信息
| 网络形态 | 共享宿主网络栈,或使用独立网络命名空间 |
|---|---|
| 抓包入口 | 进入容器命名空间,或从宿主侧对端接口抓取 |
| 工具来源 | 优先使用宿主已安装的抓包工具 |
| 权限要求 | 需要相应特权或系统能力 |
| 主要风险 | 在运行容器内安装软件会改变运行环境 |
典型使用场景
- 容器内服务排障:确认容器侧真实的收发情况
- 与宿主侧对照:比较宿主接口与容器命名空间内看到的差异
- 编排环境定位:确认流量实际经过哪个接口
- 临时诊断:在不修改业务镜像的前提下完成采集
- 清理确认:抓包结束后确认临时进程与文件都已回收
采集方式
采集方式
# 方式一:进入容器网络命名空间,用宿主提供的抓包工具执行
# 方式二:在宿主侧找到对应的虚拟接口对端,直接在宿主上抓
# 容器重建后命名空间会变化,需要重新定位
# 采集文件写入宿主目录,便于回传与清理网络形态与抓包入口
| 形态 | 抓包位置 | 注意 |
|---|---|---|
| 共享宿主网络栈 | 宿主接口 | 与宿主其他流量混在一起 |
| 独立命名空间 | 容器命名空间内 | 工具需由宿主提供 |
| 宿主对端接口 | 宿主侧虚拟接口 | 需确认接口的配对关系 |
容器重建后进程号与网络命名空间都会变化,长时间任务要记录容器标识而不是进程号,否则中途就会失效。
在运行中的容器里安装抓包工具会改变运行环境,生产环境优先从宿主侧抓取,避免对业务产生额外影响。