Стадия жизненного цикла модуля: Предварительная версия (preview)
У модуля есть требования для установки
Для использования образов из пользовательского хранилища внутри кластера DKP, в котором оно располагается, воспользуйтесь способами описанными ниже.
Предварительные условия
Для доступа к хранилищу образов используется Ingress, публикующий сервис по адресу payload-registry.${PUBLIC_DOMAIN}. Сертификат для HTTPS выпускается автоматически, в соответствии с настройками управления сертификатами.
В случае использования собственного удостоверяющего центра (CA) или иного CA, который не может быть проверен узлами кластера, необходимо добавить соответствующую конфигурацию для дополнительного хранилища образов. В противном случае узлы кластера не смогут загрузить образы из-за ошибки проверки сертификата.
Использование образов при аутентификации с помощью токенов Kubernetes
Подробнее об этом способе аутентификации — в разделе «Аутентификация с использованием токенов Kubernetes»
Для использования токенов Kubernetes в роли imagePullSecrets:
-
Создайте ServiceAccount и выдайте ему права с использованием PayloadRepositoryAccess (подробнее — в разделе «RBAC и PayloadRepositoryAccess»). ServiceAccount должен явно разрешить выпуск токенов для загрузки образов с помощью аннотации
payload-registry.deckhouse.io/allow-image-pull: "true":apiVersion: v1 kind: ServiceAccount metadata: name: my-pull-sa annotations: payload-registry.deckhouse.io/allow-image-pull: "true"Без аннотации
allow-image-pullконтроллер откажется выпускать токен для ServiceAccount: это не позволяет пользователю, который может только создавать секреты, сослаться на более привилегированный ServiceAccount и получить его токен. -
Создайте секрет, который будет использоваться как
imagePullSecrets:apiVersion: v1 kind: Secret metadata: name: my-pull-secret annotations: payload-registry.deckhouse.io/service-account.name: my-pull-sa # Необязательно: время жизни токена для этого секрета, в секундах (минимум 600). # Если не указано, используется значение по умолчанию модуля. # payload-registry.deckhouse.io/token-ttl: "3600" type: kubernetes.io/dockerconfigjson data: # Временное значение, которое будет перезаписано актуальными значениями. .dockerconfigjson: eyJhdXRocyI6e319Указанный секрет будет удалён автоматически при удалении соответствующего ServiceAccount.
Если указанный в аннотации ServiceAccount не существует (например, секрет создан не в том неймспейсе), контроллер не удаляет секрет, а оставляет его и записывает на него событие
Warning(ServiceAccountNotFound) с объяснением причины. Посмотреть события можно командойd8 k describe secret <имя>. -
Проверьте что данные в секрете обновились:
d8 k get secret my-pull-secret -o yamlПример вывода:
apiVersion: v1 kind: Secret metadata: name: my-pull-secret annotations: payload-registry.deckhouse.io/expires-at: "2026-03-06T02:14:19Z" payload-registry.deckhouse.io/hash: e3ba7bd9aeae15fdbce8ae1eed05f26732ebd82e4563115d34f335702071929e payload-registry.deckhouse.io/service-account.name: my-pull-sa payload-registry.deckhouse.io/service-account.uid: f847810d-bcdd-42b8-9f95-2c2d8d10bc8c type: kubernetes.io/dockerconfigjson data: # Значение, заполненное актуальными данными. .dockerconfigjson: ...Наличие аннотаций показывает что данные для доступа к хранилищу образов успешно добавлены и будут обновляться.
По умолчанию данные в секрете действительны в течение 24 часов с момента последнего обновления. Время жизни можно задать для каждого секрета аннотацией
payload-registry.deckhouse.io/token-ttl(в секундах, минимум 600). Время истечения срока действия указывается в аннотацииpayload-registry.deckhouse.io/expires-at. Данные обновляются за некоторое время до истечения срока действия. -
Добавьте
imagePullSecretsк компоненту кластера и укажите образ:apiVersion: v1 kind: Pod metadata: name: ubuntu spec: containers: - name: ubuntu image: payload-registry.${PUBLIC_DOMAIN}/project-1/ubuntu:latest imagePullSecrets: - name: my-pull-secret