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

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

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

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

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

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

Архитектура

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

  1. registry-packages-proxy — Основное приложение прокси, которое:
    • Извлекает пакеты из удаленных реестров с использованием дайджестов
    • Кеширует пакеты локально в эфемерном volume (максимум 1Gi)
    • Поддерживает аутентификацию в реестрах через учетные данные из ресурсов 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
    • Пакет извлекается из удаленного реестра
    • Пакет передается клиенту с одновременным кешированием для будущих запросов
  5. Ответы включают соответствующие HTTP-заголовки для кеширования (Cache-Control, ETag, Content-Length)

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

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

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

Ограничения

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