Вопрос: Как обрабатывать обновления безопасности в контейнерах Docker?


При развертывании приложений на серверах обычно существует разделение между тем, что приложение связывает с самим собой и тем, что он ожидает от платформы (операционной системы и установленных пакетов). Одним из моментов этого является то, что платформа может обновляться независимо от приложения. Это полезно, например, когда обновления безопасности необходимо срочно применять к пакетам, предоставляемым платформой, без восстановления всего приложения.

Традиционно обновления безопасности были применены просто путем выполнения команды диспетчера пакетов для установки обновленных версий пакетов в операционной системе (например, «yum update» на RHEL). Но с появлением контейнерных технологий, таких как Docker, где изображения контейнеров существенно связывают приложение а также платформа, каков канонический способ поддержания системы с контейнерами в актуальном состоянии? У хоста и контейнеров есть свои собственные независимые комплекты пакетов, которые нуждаются в обновлении и обновлении на хосте, не будут обновлять пакеты внутри контейнеров. С выпуском RHEL 7, где особенно важны контейнеры Docker, было бы интересно услышать, что рекомендуется Redhat для обработки обновлений безопасности контейнеров.

Мысли по нескольким вариантам:

  • Если пакет обновления пакетов пакета на хосте не будет обновлять пакеты внутри контейнеров.
  • Необходимость регенерации всех изображений контейнеров для применения обновлений, похоже, нарушает разделение между приложением и платформой (для обновления платформы требуется доступ к процессу сборки приложения, который генерирует изображения Docker).
  • Выполнение ручных команд внутри каждого из запущенных контейнеров кажется громоздким, и изменения могут быть перезаписаны в следующий раз, когда контейнеры обновляются из артефактов выпуска приложения.

Поэтому ни один из этих подходов не кажется удовлетворительным.


100
2017-07-08 21:54


Источник


Лучшая идея для этого, я видел до сих пор Проект Атомный, Я не думаю, что это довольно готовый к прайм-тайму. - Michael Hampton♦
Валко, с каким рабочим процессом вы закончили? Я использую долгосрочные контейнеры (например, php-cgi), и то, что я нашел до сих пор: docker pull debian/jessie чтобы обновить изображение, а затем перестроить мои существующие изображения, затем остановить контейнеры и запустить их снова (с новым изображением). Изображения, которые я создаю, имеют то же имя, что и предыдущие, поэтому запуск выполняется через скрипт. Затем я удаляю «неназванные» изображения. Я бы, безусловно, оценил лучший рабочий процесс. - miha
miha: Это похоже на то, что я закончил делать. В основном постоянно обновляется и восстанавливается все изображения в рамках создания новых выпусков. И перезапуск контейнеров с использованием новых изображений. - Mark Lindroos
Лучший ответ Вот помогает, потому что есть сценарий, который содержит основные командные строки, чтобы точно сказать, что сказал Йоханнес Цимке: - Hudson Santos


Ответы:


Приложение Docker связывает приложение и «платформу», это правильно. Но обычно изображение состоит из базового изображения и фактического приложения.

Таким образом, каноническим способом обработки обновлений безопасности является обновление базового образа, а затем восстановление образа приложения.


42
2017-08-12 11:41



Спасибо, это звучит разумно. Просто хочу обновить платформу, так что не нужно было бы переупаковывать все приложение (подумайте, например, о необходимости перестроить 100 различных изображений приложений из-за получения одного базового изображения, получающего обновление). Но, возможно, это неизбежно с философией Докера, которая объединяет все вместе в одном изображении. - Mark Lindroos
@ValkoSipuli Вы всегда можете написать сценарий для автоматизации процесса. - dsljanus
Почему бы не apt-получить обновление, обновление dnf, pacman -syu и т. Д. В контейнере? Вы даже можете создать сценарий оболочки, который делает это а потом запускает приложение, а затем использует его как точку входа контейнера, чтобы при запуске / перезапуске контейнера он обновлял все свои пакеты. - Arthur Kay
@ArthurKay Две причины: 1) Вы взорвали размер контейнера, так как все пакеты, которые будут обновлены, будут добавлены в слой контейнера, сохранив устаревший пакет на изображении. 2) Это поражает самое большое преимущество (контейнер) изображений: Образ, который вы запускаете, - это не то же самое, что вы создаете / проверяете, потому что вы меняете пакеты во время выполнения. - Johannes 'fish' Ziemke
Есть одна вещь, которую я не понимаю: если вы являетесь компанией, покупающей часть программного обеспечения, поставляемую в качестве контейнера докеров, вам придется ждать, пока производитель программного обеспечения перестраивает пакет приложений каждый раз, когда выходит проблема безопасности ? Какая компания откажется от контроля над своей открытой уязвимостью таким образом? - Sentenza


Контейнеры должны быть легкими и взаимозаменяемыми. Если в вашем контейнере возникла проблема с безопасностью, вы восстанавливаете версию контейнера, в который исправлена ​​и развертывается новый контейнер. (многие контейнеры используют стандартное базовое изображение, в котором используются стандартные инструменты управления пакетами, такие как apt-get для установки их зависимостей, перестройка будет извлекать обновления из репозиториев)

Хотя вы можете патчировать внутри контейнеров, это не будет хорошо масштабироваться.


5
2017-10-03 19:44





Это автоматически обрабатывается в SUSE Enterprise Linux с помощью zypper-docker (1)

SUSE / Zypper-докер

Быстрый старт Docker


1
2018-05-08 17:05





Прежде всего, многие из ваших обновлений, которые вы традиционно выполняли в прошлом, просто не будут находиться внутри самого контейнера. Контейнер должен быть довольно легким и небольшим подмножеством полной файловой системы, которую вы привыкли видеть в прошлом. Пакеты, которые вам нужно обновить, будут те, которые являются частью вашего DockerFile, и поскольку у вас есть DockerFile, вы должны иметь возможность отслеживать те пакеты и идентификаторы контейнеров, которые нуждаются в обновлениях. Пользовательский интерфейс Cloudstein, который будет выпущен в ближайшее время, отслеживает эти компоненты DockerFile для вас, чтобы можно было построить схему обновления, которая лучше всего подходит для их контейнеров. Надеюсь это поможет


0
2017-07-08 23:23