Доступно в редакциях:  CE, BE, SE, SE+, EE, CSE Lite (1.67), CSE Pro (1.67)

Стадия жизненного цикла модуля: General Availability

Модуль registry-packages-proxy предоставляет сервис HTTP-прокси внутри кластера для доступа к пакетам из container registries. Он выступает в качестве посредника между компонентами кластера и внешними или внутренними container registry, предлагая возможности кеширования для оптимизации использования полосы пропускания и улучшения производительности извлечения пакетов.

Этот модуль — критически важный компонент инфраструктуры, который работает на master-узлах и используется во время загрузки кластера и операций во время выполнения для извлечения пакетов из container registries.

Модуль развертывает высокодоступный прокси-сервис, который:

  • Работает как deployment на master-узлах с включенным hostNetwork для обеспечения доступности во время загрузки, когда CNI еще недоступен.
  • Прослушивает порт 4219 (HTTPS) на IP-адресе каждого master-узла.
  • Предоставляет эндпоинт /package для извлечения пакетов container registry по дайджесту.
  • Реализует локальное кеширование извлеченных пакетов (до 1 ГБ) для снижения сетевого трафика и улучшения производительности.
  • Следит за кастомными ресурсами ModuleSource для получения учетных данных container registry для разных репозиториев.
  • Использует kube-rbac-proxy для защиты доступа к прокси и эндпоинтам метрик.

Архитектура

Прокси-сервис состоит из двух контейнеров:

  1. registry-packages-proxy — основное приложение прокси, которое:
    • извлекает пакеты из удаленных container registries с использованием дайджестов;
    • кеширует пакеты локально в эфемерном volume (максимум 1 ГБ);
    • поддерживает аутентификацию в container registry через учетные данные из ресурсов ModuleSource;
    • предоставляет проверки работоспособности и метрики Prometheus;
    • прослушивает 127.0.0.1:5080 (HTTP, внутренний).
  2. kube-rbac-proxy — обеспечивает контроль доступа на основе RBAC:
    • предоставляет сервис на порту 4219 (HTTPS);
    • защищает эндпоинт /metrics с авторизацией Kubernetes RBAC;
    • защищает эндпоинт /package, требуя соответствующих разрешений;
    • позволяет доступ к /healthz без аутентификации;

Поток извлечения пакетов

Когда компонент запрашивает пакет:

  1. Запрос включает параметр digest (обязательный) и опциональные параметры repository и path.
  2. Прокси проверяет локальный кеш на наличие запрошенного дайджеста.
  3. Если запрашиваемый пакет есть в кеше, он извлекается из кеша.
  4. Если запрашиваемый пакет отсутствует в кеше:
    • Прокси извлекает учетные данные для указанного репозитория из отслеживаемых ресурсов ModuleSource.
    • Пакет извлекается из удаленного container registry.
    • Пакет передается клиенту с одновременным кешированием для будущих запросов.
  5. Ответы включают соответствующие HTTP-заголовки для кеширования (Cache-Control, ETag, Content-Length).

Высокая доступность

Модуль обеспечивает высокую доступность через:

  • Запуск нескольких реплик на master-узлах (в HA-конфигурациях).
  • Правила anti-affinity для подов для распределения подов по разным master-узлам.
  • PodDisruptionBudget для предотвращения одновременного нарушения работы всех реплик.
  • Поддержку Vertical Pod Autoscaler для автоматической настройки ресурсов.

Ограничения

  • Модуль работает исключительно на master-узлах.
  • Требует hostNetwork: true для работы во время фазы загрузки.
  • Размер кеша ограничен 1 ГБ на под.
  • Модуль предназначен для внутреннего использования компонентами Deckhouse Kubernetes Platform и требует специфических разрешений RBAC для доступа.