Что это дает:
- Можно зайти в network namespace контейнера или pod'а без Docker/K8s CLI.
- Можно дебажить процессы, которые живут в своём mount/network/ipc пространстве.
- Можно "войти" в зависший контейнер даже если обычные средства не помогают.
Базовый пример:
nsenter --target <PID> --net --uts --ipc --mount -- pidof bash
Вы окажетесь *в том же network/mount пространстве*, что и целевой процесс.
Пример: войти в network-namespace контейнера Docker:
nsenter --target $(docker inspect -f '{{.State.Pid}}' <container>) --net bash
Лайфхаки:
1) Проверить сетевой стек проблемного пода в Kubernetes:
nsenter --target $(crictl inspect <container> | jq .info.pid) --net bash
2) Посмотреть реальную файловую систему процесса:
nsenter --target <PID> --mount bash
3) Разобраться, почему сервис не видит DNS:
nsenter --target <PID> --net cat /etc/resolv.conf
4) Проверить firewall/NAT внутри network namespace:
nsenter --target <PID> --net iptables -L -n
Почему полезно:
- Это самый низкоуровневый способ «зайти внутрь» изолированного окружения.
- Работает даже когда Docker/K8s/ctr разваливаются.
- Отлично подходит для сложного дебага сетевых и файловых проблем.
nsenter - инструмент, который большинство DevOps слышали, но редко используют. А зря.