(java || kotlin) && devOps
Ссылка
нажмите — покажем
нажмите — покажем
distroless образы Docker.
Что такое Docker - это Linux...
Но нет, на самом деле.
Linux-а внутри может не быть.
Это легко проверить, сделав образ
from scratch
Но что полезного в таком образе?
Ок, добавим Java.
Но на самом деле для работы реальных сервисов нужно чуть больше Linux обвязки.
Пользователи, временные настройки, папка /tmp, корневые сертификаты (если нет SSL origination на egress).
Вот для таких случаев и в то же время для упрощения реализации требований по безопасности придумали distroless образы.
Грубо говоря это что-то среднее между scratch и обычным образом. Есть конфиги и структура папок, но практически нет исполняемых файлов. И библиотек C-ных по минимуму.
Детальнее тут https://habr.com/ru/companies/flant/articles/822427/
Плюсы подхода понятны - меньше компонентов в образе = меньше уязвимостей.
Минусы тоже есть.
Для начала - логи локальные никуда не денутся. Stdout/stderr перехватывается драйвером Docker/k8s и сохраняется на хост-сервере.
Будем работать команда
docker cp
ей shell не нужен.
Но изучать файловую систему контейнера так будет сложно.
А уж запустить внутри образа, скажем, curl для проверки локальных endpoints так просто не получится. Ну и из бизнесового сервиса shell команду конечно же не запустишь.
Какие варианты?
1) классический: "хорошо делай - хорошо будет") В смысле пиши достаточно подробные логи, сделай возможность управлять уровнем логирования, отбрасывай метрики и трейсы, отдавай подробные healthcheck. И будет счастье. Или нет)
2) держать рядом нормальный образ сервиса - т.е делать два образа каждый раз. И иметь возможность быстро накатить отладочный образ на ПРОМ. Тур вставк встает вопрос - можно ли итоги тестирования одного образа автоматически применить ко второму? Или тесты гонять дважды? Не хотелось бы.
3) debug ephemeral sidecars. Отличаются от обычных тем, что могут быть добавлены к поду в любой момент и исчезают после его рестарта. Запускаются командой
kubectl debug pod/mypod
-it
--target=myapp
--image=busybox
Ещё надо бы включить в Deployment sharing процессов, чтобы работала ps.
shareProcessNamespace: true
Ну и согласовать все это с безопасниками. Детальнее https://habr.com/ru/companies/timeweb/articles/720510/
Кажется, хороший вариант как раз для distroless контейнеров.
#docker #security
139 ·