NORA: лёгкий artifact registry для Kubernetes с карантином свежих пакетов и блокировкой CVE
В мире разработки каждый разработчик сталкивается с проблемой хранения артефактов, таких как Docker-образы, npm-пакеты, Maven-артефакты, Python wheels и др. Публичные реестры (Docker Hub, npmjs.org, PyPI) не надёжны из-за rate limit и блокировок. На тяжёлой Java-платформе (Nex...
NORA: Лёгкий Artifact Registry для Kubernetes с Карантином свежих пакетов и блокировкой CVE
В мире разработки каждый разработчик сталкивается с проблемой хранения артефактов, таких как Docker-образы, npm-пакеты, Maven-артефакты, Python wheels и др. Публичные реестры (Docker Hub, npmjs.org, PyPI) не надёжны из-за rate limit и блокировок. На тяжёлой Java-платформе (Nexus, Artifactory, Harbor) требуется от 2 до 4 ГБ RAM и до десятка минут на старт.
NORA** — это открытый исходный кодный реестр артефактов на Rust, созданный как прямая альтернатива этим гигантам. Вместо Java-стека — один бинарник <27 МБ. Вместо 2-4 ГБ RAM — <50 МБ в простое, т.е. на порядок меньше. Вместо десятков минут на старт — 3 секунды. Внешних зависимостей нет вообще: ни Java 11+, ни отдельной СУБД — метаданные хранятся на файловой системе, а артефакты сразу можно отправлять в S3, чего бесплатные версии Nexus и Artifactory не умеют. При этом поддерживается 15 форматов: Docker, Maven, npm, PyPI, Cargo, Go, Raw, RubyGems, Terraform, Ansible Galaxy, NuGet, Pub (Dart/Flutter), Conan (C/C++), RPM (yum/dnf), Debian/APT. Плюс Helm-чарты через OCI, карантин свежих пакетов (Min Release Age), блокировка уязвимых версий (CVE Blocking) и лицензия MIT. В этой статье мы развернём NORA в Kubernetes на Yandex Managed Kubernetes, а затем попробуем все основные сценарии использования.
Чем NORA отличается от Nexus и Artifactory?
1. **Объем и скорость**: NORA занимает около 27 МБ, чего достаточно для хранения артефактов даже для больших проектов. Активный размер при обычной загрузке составляет меньше 50 МБ. В Nexus и Artifactory требуется до 4 ГБ для хранения и десятки минут на старт.
2. **Зависимости и стоимость**: NORA не требует дополнительных зависимостей, например, Java 11+, и хранения метаданных на отдельной СУБД. Наоборот, метаданные хранятся на файловой системе. Это делает NORA менее сложным и быстрым по сравнению с Nexus и Artifactory.
3. **Форматы поддержки**: NORA поддерживает 15 форматов: Docker, Maven, npm, PyPI, Cargo, Go, Raw, RubyGems, Terraform, Ansible Galaxy, NuGet, Pub (Dart/Flutter), Conan (C/C++), RPM (yum/dnf), Debian/APT. Это больше, чем поддерживаемые Nexus и Artifactory.
4. **Блокировка уязвимых версий (CVE Blocking)**: NORA автоматически блокирует уязвимые версии, что позволяет значительно уменьшить риск инцидентов и позволяет управлять безопасностью более эффективно.
Применение NORA в Kubernetes
Для тестирования NORA в Kubernetes мы воспользовались Yandex Managed Kubernetes. Это позволяет развернуть облачную среду без необходимости самостоятельного монтирования инфраструктуры. Достаточно всего лишь выбрать публичный IP-адрес Yandex Managed Kubernetes и подключить его к нашей сети.
Сценарии использования
#### 1. Docker
Для Docker поддерживается стандартный формат, который устанавливается в NORA в качестве формата по умолчанию. Мы можем загрузить Docker-образы в NORA и использовать их в наших Docker контейнерах.
#### 2. Maven
Для поддержки Maven, который используется для управления зависимостями в Java-проектах, NORA предоставляет специальный формат для хранения Maven-артефактов.
#### 3. npm
npm-пакеты могут быть подключены к NORA как отдельный формат для управления npm-источниками.
#### 4. Helm
NORA поддерживает Helm-чарты, которые могут быть загружены через OCI (Open Container Initiative) формат.
Что это значит для разработчиков и организаций?
1. **Упрощение управления артефактами**: NORA предоставляет легкую и надёжную альтернативу публичным реестрам, минимизируя риск блокировок и нестабильности. Это уменьшает сложность управления артефактами и облегчает процессы развертывания и тестирования.
2. **Блокировка уязвимых версий**: Автоматическое применение карантина для уязвимых версий минимизирует риск инцидентов и упрощает управление безопасностью.
3. **Метаданные и блокировка**: Поддержка карантина свежих пакетов и блокировки уязвимых версий позволяет эффективно управлять артефактами и обновлениями.
Чем дальше стоит посмотреть?
1. **Сопоставление NORA с другими архитектурными решениями**: Исследование возможностей и ограничений NORA в сравнении с другими архитектурными решениями, такими как Nexus и Artifactory.
2. **Внедрение в реальные проекты**: Проведение NORA в реальные проекты и аналитика использования, чтобы получить инсайты в отношении эффективности и масштабируемости.
3. **Оптимизация производительности**: Исследование способов улучшить производительность NORA, такими как использование оптимизированных форматов и увеличение размера бинарника.
FAQ
Q: Какой объем памяти занимает NORA?**
A: NORA занимает менее 50 МБ в простое, что значительно меньше, чем 2-4 ГБ RAM, требуемый для хранения на тяжёлой Java-платформе (Nexus и Artifactory).
Q: Какие форматы поддерживает NORA?**
A: NORA поддерживает 15 форматов, включая Docker, Maven, npm, PyPI, Cargo, Go, Raw, RubyGems, Terraform, Ansible Galaxy, NuGet, Pub (Dart/Flutter), Conan (C/C++) и RPM (yum/dnf), Debian/APT.
Q: Какие преимущества предоставляет NORA по сравнению с Nexus и Artifactory?**
A: NORA обеспечивает минимизацию потребностей в дополнительных зависимостях (Java 11+ и отдельной СУБД) и имеет уменьшенный объем памяти, что позволяет значительно уменьшить сложность и ускорить процесс развертывания и использования артефактов.
Источники
https://habr.com/ru/articles/1074042/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1074042
https://habr.com/ru/companies/productradar/articles/1073888/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1073888
https://3dnews.ru/1147377