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