Доступно в редакциях: 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 для защиты доступа к прокси и эндпоинтам метрик
Архитектура
Прокси-сервис состоит из двух контейнеров:
- registry-packages-proxy — Основное приложение прокси, которое:
- Извлекает пакеты из удаленных реестров с использованием дайджестов
- Кеширует пакеты локально в эфемерном volume (максимум 1Gi)
- Поддерживает аутентификацию в реестрах через учетные данные из ресурсов
ModuleSource - Предоставляет проверки работоспособности и метрики Prometheus
- Прослушивает
127.0.0.1:5080(HTTP, внутренний)
- kube-rbac-proxy — Обеспечивает контроль доступа на основе RBAC:
- Предоставляет сервис на порту
4219(HTTPS) - Защищает эндпоинт
/metricsс авторизацией Kubernetes RBAC - Защищает эндпоинт
/package, требуя соответствующих разрешений - Позволяет неаутентифицированный доступ к
/healthz
- Предоставляет сервис на порту
Поток извлечения пакетов
Когда компонент запрашивает пакет:
- Запрос включает параметр
digest(обязательный) и опциональные параметрыrepositoryиpath - Прокси проверяет локальный кеш на наличие запрошенного дайджеста
- Если кешировано, пакет обслуживается непосредственно из кеша
- Если не кешировано:
- Прокси извлекает учетные данные для указанного репозитория из отслеживаемых ресурсов
ModuleSource - Пакет извлекается из удаленного реестра
- Пакет передается клиенту с одновременным кешированием для будущих запросов
- Прокси извлекает учетные данные для указанного репозитория из отслеживаемых ресурсов
- Ответы включают соответствующие HTTP-заголовки для кеширования (
Cache-Control,ETag,Content-Length)
Высокая доступность
Модуль обеспечивает высокую доступность через:
- Запуск нескольких реплик на master-узлах (в HA-конфигурациях)
- Правила анти-аффинности подов для распределения подов по разным master-узлам
- PodDisruptionBudget для предотвращения одновременного нарушения работы всех реплик
- Поддержку Vertical Pod Autoscaler для автоматической настройки ресурсов
Ограничения
- Модуль работает исключительно на master-узлах
- Требует
hostNetwork: trueдля работы во время фазы загрузки - Размер кеша ограничен 1Gi на под
- Модуль предназначен для внутреннего использования компонентами Deckhouse и требует специфических разрешений RBAC для доступа