• Русский
  • Ошибка создания pod из-за ошибки конфигурации при использовании пользовательских images в Tekton

    Описание проблемы

    В pipeline Tekton использование images, предоставляемых продуктом, работает корректно, но при использовании пользовательских images могут возникать сбои при выполнении TaskRun.

    Проявление ошибки

    1. Выполнение TaskRun завершается со статусом False, а причиной является CreateContainerConfigError:

      $ kubectl get taskruns -n ${namespace} ${taskrun_name}
      NAME                     SUCCEEDED   REASON                       STARTTIME   COMPLETIONTIME
      hello-c7pnj-run-script   False       CreateContainerConfigError   9m43s
    2. В событии TaskRun отображается сообщение об ошибке:

      Failed: Failed to create pod due to config error
    3. Соответствующие события pod показывают сообщение об ошибке:

      Failed: Error: container's runAsUser breaks non-root policy

    Анализ первопричины

    Такие проблемы обычно вызваны одной из следующих двух причин:

    1. В самой image есть проблемы.
    2. Image несовместима с конфигурацией Task.

    Устранение неполадок

    Если эта проблема возникает только при использовании пользовательских images, рекомендуется выполнить следующие шаги для устранения неполадок:

    1. Проверьте, нет ли проблем в самой image:

      $ podman run -it --rm ${registry} ${cmd}
    2. Проверьте совместимость конфигурации Task с image:

      • Проверьте, настроен ли Task с runAsNonRoot: true.
      • Проверьте, является ли пользователь по умолчанию в image root или ненумерическим user ID.

    Пример конфигурации Task:

    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: foo
    spec:
      steps:
        - name: bar
          securityContext:
            runAsNonRoot: true

    Пример конфигурации Containerfile:

    USER root

    Решение

    Вариант 1: Настроить сборку image так, чтобы пользователь по умолчанию был не-root

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

    • Среда и права для пересборки image.

    Шаги

    См. Настройка Containerfile для совместимых с Task пользовательских images, чтобы изменить конфигурацию Containerfile.

    Вариант 2: Изменить конфигурацию выполнения TaskRun или PipelineRun

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

    • Права на изменение TaskRun или PipelineRun.

    Шаги

    1. Добавьте конфигурацию при отдельном выполнении TaskRun:

      apiVersion: tekton.dev/v1
      kind: TaskRun
      metadata:
        name: foo
      spec:
        taskRef:
          name: foo
        podTemplate:
          securityContext:
            runAsUser: 65532
    2. Добавьте конфигурацию при выполнении PipelineRun:

      # Способ 1: добавить конфигурацию для всех Tasks
      apiVersion: tekton.dev/v1
      kind: PipelineRun
      spec:
        taskRunTemplate:
          podTemplate:
            securityContext:
              runAsUser: 65532
      
      # Способ 2: добавить конфигурацию для определённых Tasks
      apiVersion: tekton.dev/v1
      kind: PipelineRun
      spec:
        taskRunSpecs:
          - pipelineTaskName: example-git-clone
            podTemplate:
              securityContext:
                runAsUser: 65532
                fsGroup: 65532

    Вариант 3: Изменить глобальную конфигурацию Tekton

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

    • Права на операции в cluster.
    • Права на изменение ресурса TektonConfig.
    • Примечание: Эта конфигурация повлияет на все Tasks.

    Шаги

    1. Измените ресурс TektonConfig: Увеличьте следующую конфигурацию spec.pipeline.default-pod-template:

      apiVersion: config.tekton.dev/v1beta1
      kind: TektonConfig
      metadata:
        name: config
      spec:
        pipeline:
          default-pod-template: |
            securityContext:
              runAsUser: 65532
    2. Проверьте, вступила ли конфигурация в силу:

      $ kubectl get configmap -n tekton-pipelines config-defaults -o yaml | grep 'default-pod-template: |' -A2
      
      # Expected output
      default-pod-template: |
        securityContext:
          runAsUser: 65532

    Вариант 4: Изменить определение Task

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

    • Права на изменение Task.
    • Примечание: Эта конфигурация повлияет на все TaskRuns или PipelineRuns, использующие этот Task.

    Шаги

    1. Способ 1: Уберите конфигурацию runAsNonRoot:

      apiVersion: tekton.dev/v1
      kind: Task
      metadata:
        name: foo
      spec:
        steps:
          - name: bar
            securityContext:
              # runAsNonRoot: true
    2. Способ 2: Добавьте конфигурацию runAsUser:

      apiVersion: tekton.dev/v1
      kind: Task
      metadata:
        name: foo
      spec:
        steps:
          - name: bar
            securityContext:
              runAsNonRoot: true
              runAsUser: 65532

    Как предотвратить ошибки

    1. Сборка image

      • По возможности используйте не-root пользователей для сборки images.
      • Последовательно используйте UID 65532 как не-root пользователя.
      • Убедитесь, что приложение может нормально работать с не-root пользователем.
    2. Конфигурация Task

      • Решайте, нужно ли включать runAsNonRoot, исходя из требований безопасности.
      • Если требуется, соответствующим образом настройте runAsUser.
    3. Управление правами

      • Соблюдайте принцип наименьших привилегий.
      • Заранее планируйте права доступа к каталогам.
      • Регулярно проверяйте конфигурации прав доступа.

    Связанный контент