Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки

Для использования образов из пользовательского хранилища внутри кластера DKP, в котором оно располагается, воспользуйтесь способами описанными ниже.

Предварительные условия

Для доступа к хранилищу образов используется Ingress, публикующий сервис по адресу payload-registry.${PUBLIC_DOMAIN}. Сертификат для HTTPS выпускается автоматически, в соответствии с настройками управления сертификатами.

В случае использования собственного удостоверяющего центра (CA) или иного CA, который не может быть проверен узлами кластера, необходимо добавить соответствующую конфигурацию для дополнительного хранилища образов. В противном случае узлы кластера не смогут загрузить образы из-за ошибки проверки сертификата.

Использование образов при аутентификации с помощью токенов Kubernetes

Подробнее об этом способе аутентификации — в разделе «Аутентификация с использованием токенов Kubernetes»

Для использования токенов Kubernetes в роли imagePullSecrets:

  1. Создайте ServiceAccount и выдайте ему права с использованием PayloadRepositoryAccess (подробнее — в разделе «RBAC и PayloadRepositoryAccess»):

    d8 k create serviceaccount my-pull-sa
  2. Создайте секрет, который будет использоваться как imagePullSecrets:

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-pull-secret
      annotations:
        payload-registry.deckhouse.io/service-account.name: my-pull-sa
    type: kubernetes.io/dockerconfigjson
    data:
      # Временное значение, которое будет перезаписано актуальными значениями.
      .dockerconfigjson: eyJhdXRocyI6e319

    Указанный секрет будет удалён автоматически при удалении соответствующего ServiceAccount.

  3. Проверьте что данные в секрете обновились:

    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/expires-at. Данные обновляются за некоторое время до истечения срока действия.

  4. Добавьте 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

Использование образов при статической конфигурации пользователей (устаревший способ)

Данный способ аутентификации устарел (deprecated). Используйте токены Kubernetes вместо него.

Статическая конфигурация может быть удалена в будущих версиях.

Подробнее об этом способе аутентификации — в разделе «Статическая конфигурация пользователей (устаревший способ)».

Для использования статической конфигурации пользователей:

  1. Настройте пользователя с правами доступа READ/FULL к проекту. Пример:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: payload-registry
    spec:
      version: 1
      enabled: true
      settings:
        users:
          user-1:
            # Bcrypt-хеш пароля `password123`.
            passwordHash: "$2y$10$CeP/hYvBJ05Ih2azafVyIuuMRpf60am4z6USm4jhHfUPsFDBAmn/u"
            projects:
            - name: "project-1"
              subPath: "*"
              access: READ
  2. Создайте секрет в неймспейсе проекта project-1, используя следующую команду:

    d8 k create secret docker-registry my-img-pull-secret \
    --docker-server="https://payload-registry.${PUBLIC_DOMAIN}" \
    --docker-username=user-1 \
    --docker-password=password123 \
    --namespace=project-1
  3. Добавьте imagePullSecrets к компоненту кластера и укажите образ:

    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntu
    spec:
      containers:
        - name: ubuntu
          image: payload-registry.${PUBLIC_DOMAIN}/project-1/ubuntu:latest
      imagePullSecrets:
        - name: my-img-pull-secret