
Вариант использования: разрешить тянутьвыбрано(например, помеченные как *-public
) Docker Images анонимно. В противном случае требуются учетные данные.
Дано: последняя версия Nexus 3.52.0, работает с docker login
учетными данными AA и LDAP без проблем.
Пытался:
- Селектор + Привилегия + Роль (все с именем docker-images-public) > предоставлено использование «анонимного», «Анонимный доступ» включен, с тем же пользователем и локальной областью авторизации.
- Результат: Ошибка ответа от демона: Получить https://HOST/v2/infrastructure/IMAGE/manifests/VERSION-public: нет базовых учетных данных аутентификации Ожидается: возможность загрузки образов Docker, соответствующих селектору контента (например, ".*-public")
Дополнительно пробовал:
включение уровня журнала TRACE в журнале
Результат: много выходных данных, но без конкретной причины отказа (по крайней мере я не видел). Одна из строк:
DEBUG [qtp194038341-106] *UNKNOWN org.sonatype.nexus.repository.view.Router - Response: Response{status=Status{successful=false, code=401, message='null'}, payload=StringPayload{size=113, charset=UTF-8, contentType='application/json'}}
без Nginx впереди (например, docker pull HOST:5000/IMAGE:VERSION-public, через HTTP)
Результат: тот же. Причина: видел ответы StackOverflow, в которых упоминается модификация заголовка Auth. Хотел полностью исключить Nginx из уравнения.
простой селектор
Селектор
format == "docker" && ( path == "/v2/" || path =~ ".*public" || path == "/v2/.*")
был изменен в нескольких попытках, включая рекомендации отhttps://stackoverflow.com/questions/43354352/nexus-docker-and-restricting-access-via-content-selector(скорее всего, нет) Однако ошибка не связана с селектором, поскольку ошибка остается той же даже приformat == "docker" && path =~ ".*"
Предоставление роли
anonymous
пользователюnx-admin
Результат: та же ошибка, значит причина не в
anonymous
разрешенияхАктивация
Docker Bearer Token Realm
, согласноhttps://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authenticationРезультат: та же ошибка
Включение анонимного доступа на уровне репозитория (флажок «Разрешить анонимный docker pull (требуется Docker Bearer Token Realm)»)
Результат: ко всему репозиторию можно получить анонимный доступ. НЕ будет сделано.
Единственная альтернатива, которую я здесь вижу, — это создание отдельного репозитория Docker на другом порту ТОЛЬКО для публичного анонимного доступа.
решение1
Недостающей частью было удаление nx-anonymous
роли по умолчанию для anonymous
пользователя, что позволяло бы ему извлекать весь репозиторий.
В целом конфигурация:
- Создать селектор
format == "docker" && path =~ ".*-public"
+ привилегию + роль (все поименованыdocker-images-public
) - #admin/security/realms - активировать
Docker Bearer Token Realm
- #admin/repository/repositories:docker-repository, включите флажок
Allow anonymous docker pull ( Docker Bearer Token Realm required )
для репозитория docker - #админ/безопасность/пользователи:анонимные
- удалить
nx-anonymous
роль пользователяanonymous
, которому предоставлен доступ для извлечения всех изображений - предоставить новую
docker-images-public
роль