• Русский
  • Аутентификация для Chains

    Обзор

    Для использования следующих возможностей в Chains необходимо настроить аутентификацию:

    • Отправка подписей в OCI-реестр после подписания образа
    • Использование Fulcio для получения сертификатов подписи при использовании Keyless signing

    Аутентификация в OCI-реестре

    Для отправки в OCI-реестр контроллер Chains будет искать учетные данные в двух местах:

    1. В поде, выполняющем вашу задачу (Task)
    2. В сервисном аккаунте, настроенном для запуска вашей задачи

    Создание учетных данных для реестра

    Создание Secret на основе существующих учетных данных

    Если вы уже выполнили podman login, вы можете скопировать учетные данные из config.json в Kubernetes.

    NOTE

    Убедитесь, что для хранения учетных данных не используется внешний менеджер учетных данных, например, нативный keychain операционной системы, и что config.json имеет формат:

    {
     "auths": {
       "<registry>": {
         "auth": "redacted"
       }
     }
    }

    Создайте secret с config.json:

    kubectl create secret generic registry-credentials \
        --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
        --type=kubernetes.io/dockerconfigjson \
        -n $NAMESPACE

    Создание Secret, предоставляя учетные данные через командную строку

    Сначала вам понадобятся учетные данные для вашего реестра (в этом примере они находятся в файле credentials.json). Затем создайте Kubernetes secret типа kubernetes.io/dockerconfigjson:

    kubectl create secret docker-registry registry-credentials \
      --docker-server=<gcr.io> \
      --docker-username=<username> \
      --docker-email=<email> \
      --docker-password=<password> \
      -n $NAMESPACE

    Установите ключ config.json

    $ DOCKER_CONFIG=$(kubectl get secret -n $NAMESPACE $REGISTRY_CREDENTIALS -o jsonpath='{.data.\.dockerconfigjson}')
    $ kubectl patch secret -n $NAMESPACE $REGISTRY_CREDENTIALS -p "{\"data\":{\"config.json\":\"$DOCKER_CONFIG\"}}"

    Настройка учетных данных с использованием пода

    Использование Pod Template

    Tekton поддерживает указание Pod template для настройки пода, выполняющего вашу задачу. Вы должны предоставить Pod template при запуске задачи через CLI или встроить его в TaskRun.

    Пример TaskRun, настроенного с секретом registry-credentials:

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: mytaskrun
      namespace: default
    spec:
      taskRef:
        name: mytask
      podTemplate:
        imagePullSecrets:
        - name: registry-credentials

    Использование ServiceAccount

    Предоставьте сервисному аккаунту доступ к секрету:

    kubectl patch serviceaccount $SERVICE_ACCOUNT_NAME \
      -p "{\"secrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACE

    Теперь Chains имеет права на push для любых TaskRuns, запускаемых под сервисным аккаунтом $SERVICE_ACCOUNT_NAME.

    TIP

    Секреты в атрибуте imagePullSecrets сервисного аккаунта также учитываются. Однако другие компоненты Tekton могут этого не делать. Рекомендуется использовать атрибут secrets.

    Аутентификация Fulcio для Keyless Signing

    NOTE
    • Этот метод требует, чтобы среда имела доступ в Интернет.
    • Если вы развернули приватные сервисы Fulcio, вы также можете использовать эти возможности, настроив соответствующие параметры.
    • Развертывание приватных сервисов Fulcio не входит в рамки данного документа, пожалуйста, обратитесь к соответствующей документации.

    Базовая настройка

    Стандартное развертывание будет работать с публичным Fulcio, если оно установлено в кластере EKS или GKE. Вам нужно просто добавить следующее в секцию данных ConfigMap chains-config в пространстве имен tekton-chains:

    signers.x509.fulcio.enabled: "true"

    Пользовательский Fulcio Endpoint

    Если вы запускаете собственный экземпляр Fulcio, необходимо настроить Chains для работы с ним. Для этого добавьте в chains-config:

    signers.x509.fulcio.address: <"http://fulcio.fulcio-system.svc">

    Ссылки