Разрешить один личный реестр с докером
Мне нужно заблокировать все реестры и разрешить только одному частному реестру для докера извлекать образы, как это можно сделать изначально в докере.
2 ответа
Использование опций RedHat не будет работать в вышестоящем движке Docker CE или EE, RedHat разветвил механизм докера и добавил свои собственные функции, которые несовместимы. Вы также обнаружите, что /etc/sysconfig/docker - это файл конфигурации только для RedHat, предназначенный для работы с их версией сценариев запуска.
Жесткое ограничение для серверов реестра в настоящее время не поддерживается в официальном движке Docker из коробки. Вы можете реализовать это с помощью правил брандмауэра для исходящих соединений, но это может привести к сбоям, если только вы не разрешите исходящие соединения только в известном белом списке. Даже если вам удастся реализовать это на сетевом уровне, это не помешает кому-либо импортировать изображение из файла tar или даже создать изображение, идентичное изображению на других серверах реестра.
Вместо этого подход Docker состоял в том, чтобы использовать нотариус / Доверие контента для криптографической подписи тега / манифеста изображения, чтобы убедиться, что он исходит из известного источника. Это обрабатывает изображения независимо от того, как они извлекаются, загружаются или собираются на хосте докера. В Docker CE это реализуется с помощью параметров на стороне клиента, и поэтому его можно легко отключить (хотя клиент в Docker CE с прямым доступом к вашему док-сокету может сделать гораздо больше, чем просто запускать общедоступные образы, они фактически являются пользователем root на вашем компьютере. хостов). Существуют инструменты для подключения к интерфейсу authz механизма докера, включая Twistlock и Open Policy Agent, но я не знаю, позволяют ли они применять Доверие к контенту.
С Docker EE этот параметр легко включить на стороне сервера. В UCP есть переключатель для принудительного применения только запущенных образов с доверенной подписью. Самым большим недостатком этого является то, что каждая установка докера, которую я сделал, требовала использования образов из внешнего источника, такого как Docker Hub. И чтобы использовать эти образы, теперь вам нужно извлечь их из-за пределов этой среды и отправить их в свой реестр, подписав их своими учетными данными. Это становится головной болью для поддержания.
В дополнение к тому, что я болел за поддержку, я вижу очень мало блокирующих Docker EE с этой опцией по другой причине: это идет вразрез со всеми целями DevOps, которые позволяют разработчикам управлять своим набором инструментов без необходимости одобрения со стороны ops. Если они хотят переключиться с Java 8 на Java 9, разработчики должны легко реализовать их, и задача ops должна заключаться в том, есть ли в этом результирующем образе уязвимости, а не базовый образ, используемый для его создания.
Только что нашел в Redhat Docs:
Это можно сделать в конфигурации демона Docker:
/ и т.д. /sysconfig/ Докер
BLOCK_REGISTRY='--block-registry=all'
ADD_REGISTRY='--add-registry=registry.access.redhat.com'
а затем сделать:
systemctl restart docker