pod 的 shareprocessnamespace 特性自 kubernetes 1.12+ 引入,使同一 pod 内容器共享 pid namespace,支持 sidecar 对主应用进程进行 gdb attach、jstack、strace 等真正在线调试,需显式启用 shareprocessnamespace: true 并授予 sys_ptrace 权限。

Pod 的 shareProcessNamespace 是 Kubernetes 1.12+ 引入的关键特性,它让同一 Pod 内所有容器共享 Linux 进程命名空间(PID namespace),从而让 Sidecar 容器能“看见”主应用容器的进程、发送信号、甚至 attach 到其进程进行调试——这是实现真正在线调试(如 gdb attach、strace、jstack、/proc 文件访问)的前提。
启用 shareProcessNamespace 的基本配置
必须在 Pod 级别显式开启,且需满足:Kubernetes 版本 ≥ 1.12,集群启用 PodShareProcessNamespace 功能门(v1.20+ 默认开启)。配置方式如下:
- 在 Pod spec 中设置
shareProcessNamespace: true - 主容器与 Sidecar 均需使用非
privileged模式(除非必要),但需确保有cap_sys_ptrace权限(用于 ptrace 调试) - 推荐使用
securityContext.capabilities.add: ["SYS_PTRACE"]显式授权
Sidecar 容器如何访问主应用进程
开启后,所有容器共享 PID 1(通常是 pause 容器),主应用进程在 Sidecar 中可见(如 ps aux 可列出主容器的 Java 或 Nginx 进程)。关键路径是 /proc/<pid></pid> —— Sidecar 可直接读取主进程的内存映射、堆栈、打开文件、命令行参数等。
针对 Kubernetes 仪表板和 Web UI 的浏览器自动化。适用于与 Kubernetes Dashboard、Grafana、ArgoCD UI 或其他 Web 界面交互。需要设置 MCP_BROWSER_ENABLED=true。
- 用
pgrep -f "java.*MyApp"或ps aux | grep MyApp查找主进程 PID -
ls -l /proc/<pid>/exe</pid>确认二进制路径;cat /proc/<pid>/cmdline</pid>查启动参数 - 若主容器是 Java 应用,可直接在 Sidecar 中运行
jstack <pid></pid>(需 JDK 工具在 Sidecar 镜像中)
典型在线调试场景与操作示例
无需重启、无需暴露端口、不侵入主容器镜像,调试完全由 Sidecar 承载:
-
Java 应用线程分析:Sidecar 镜像含 OpenJDK JRE(如
eclipse/jre:11-jre),执行jstack -l <java-pid></java-pid>获取带锁信息的线程快照 -
C/C++ 进程动态追踪:Sidecar 使用
strace -p <pid></pid>或gdb -p <pid></pid>(需 gdb + 符号表,建议挂载主容器的/usr/lib/debug或提前构建带 debuginfo 的镜像) -
排查资源泄漏:在 Sidecar 中运行
lsof -p <pid></pid>或cat /proc/<pid>/fd/ | wc -l</pid>统计文件描述符数 -
发送信号触发诊断逻辑:如向 Go 应用发
SIGUSR1触发 pprof HTTP handler(即使未暴露服务端口,也可通过本地 curlhttp://localhost:6060/debug/pprof/goroutine?debug=2)
安全与实践注意事项
共享 PID namespace 提升可观测性,但也扩大攻击面,需谨慎设计:
- Sidecar 镜像应最小化,仅含必需调试工具,避免引入 shell 或交互式组件
- 禁止在生产环境默认启用该功能;建议通过 Helm value 或 Kustomize patch 按需注入调试 Sidecar
- 主容器若以非 root 用户运行,Sidecar 也需匹配 UID(或用
runAsUser: <same-uid></same-uid>),否则可能因权限拒绝访问/proc/<pid></pid> - 某些运行时(如 containerd)对共享 PID namespace 下的 cgroup v2 支持需确认,避免
/proc/<pid>/cgroup</pid>不可读
不复杂但容易忽略:真正的在线调试能力,始于一个开关和一次正确的权限配置。










