Короткий ответ
Команда kubectl exec -it <pod> -- /bin/sh (или bash) открывает интерактивную сессию внутри указанного контейнера; ограничение в том, что это работает только если в образе вообще есть соответствующая оболочка, а изменения внутри контейнера не сохранятся после его перезапуска.
Как это работает подробнее
kubectl exec отправляет запрос через API сервер на kubelet узла, где запущен контейнер, и запускает указанную команду внутри пространства имён контейнера — это не похоже на SSH, а использует механизм container runtime (exec в namespace процесса).
Пример кода
Команды и вывод
kubectl exec -it web-7d9f -- /bin/sh
curl -sv http://backend:8080/healthЧто использовать на практике
- Практика. внутри контейнера можно посмотреть переменные окружения, проверить сетевую доступность (
curl,nslookup, если утилиты установлены в образе), посмотреть содержимое смонтированных ConfigMap/Secret. Для минимальных образов (distroless, scratch) без оболочки используютkubectl debugс эфемерным контейнером отладки, подключаемым к тому же namespace процессов.
Подводные камни
- Риски. вносить ручные правки конфигурации прямо внутри контейнера через
execкак "постоянное" решение — они исчезнут при следующем перезапуске или пересоздании Pod; пытаться выполнитьexec -itв контейнер, который уже находится вCrashLoopBackOffи не успевает стартовать достаточно долго для подключения; забывать указывать-c <container>в multi-container Pod.