Технологии

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

Источники

Читайте также

Смотреть больше материалов