如何使用nsenter调取宿主机工具调试容器内程序

问题描述

容器内没有ip、tcpdump等命令,也无法安装。

问题原因

通常容器为了轻量级,大多都是不包含较为基础网络管理调试工具,比如:ip、ping、telnet、ss、tcpdump 等命令,给调试容器内网络带来相当大的困扰。此时可以通过nsenter命令进入到目标程序所在 Namespace 中运行命令。

解决方案

1.安装

# centos
$ yum install util-linux
# ubuntu
$ apt install util-linux

2.nsenter用法

$ nsenter [options] [program [arguments]]

options:

-a, --all enter all namespaces of the target process by the default /proc/[pid]/ns/* namespace paths.
-m, --mount[=<file>]:进入 mount 命令空间。如果指定了 file,则进入 file 的命名空间
-u, --uts[=<file>]:进入 UTS 命名空间。如果指定了 file,则进入 file 的命名空间
-i, --ipc[=<file>]:进入 System V IPC 命名空间。如果指定了 file,则进入 file 的命名空间
-n, --net[=<file>]:进入 net 命名空间。如果指定了 file,则进入 file 的命名空间
-p, --pid[=<file>:进入 pid 命名空间。如果指定了 file,则进入 file 的命名空间
-U, --user[=<file>:进入 user 命名空间。如果指定了 file,则进入 file 的命名空间
-t, --target <pid> # 指定被进入命名空间的目标进程的 pid
-G, --setgid gid:设置运行程序的 GID
-S, --setuid uid:设置运行程序的 UID
-r, --root[=directory]:设置根目录
-w, --wd[=directory]:设置工作目录

3.nsenter使用示例 进入containerd容器的 namespace 中运行指定程序。

# 获取containerd容器相应PID
$ crictl ps | grep coredns
3d5b3c61f55dd       a4ca41631cc7a       4 hours ago         Running             coredns             0                   08de19dee62e3

$ crictl inspect 3d5b3c61f55dd|grep -2 network
          },
          {
            "type": "network",
            "path": "/proc/3913940/ns/net"
          }

# 使用相应参数进入程序所在的network命名空间并执行ip a
$ nsenter -n -t 3913940 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether ea:5c:d9:76:fa:33 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.233.31.164/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::e85c:d9ff:fe76:fa33/64 scope link 
       valid_lft forever preferred_lft forever
参考链接

http://manpages.ubuntu.com/manpages/xenial/man1/nsenter.1.html

如果您有其他问题,欢迎您联系火山引擎技术支持服务

91
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论