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

    Обзор

    Аутентификация должна быть настроена, чтобы можно было воспользоваться следующими возможностями Chains:

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

    Аутентификация в OCI registry

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

    1. В pod, выполняющем вашу Task
    2. В service account, настроенной для запуска вашей Task

    Создание учетных данных registry

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

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

    NOTE

    Убедитесь, что для хранения учетных данных не используется внешний хранилище учетных данных, например встроенная связка ключей операционной системы, и что 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, указав учетные данные в командной строке

    Сначала вам потребуется доступ к учетным данным для вашего registry (в этом примере они находятся в файле 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

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

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

    Пример TaskRun, настроенного с использованием Secret registry-credentials:

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

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

    Предоставьте service account доступ к Secret:

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

    Теперь Chains имеет права на push для любых TaskRun, выполняющихся под service account $SERVICE_ACCOUNT_NAME.

    TIP

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

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

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

    Базовая конфигурация

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

    signers.x509.fulcio.enabled: "true"

    Пользовательская конечная точка Fulcio

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

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

    Ссылки