• Русский
  • Настройка пользовательских сертификатов

    Для администраторов

    Это руководство предназначено для администраторов кластера, которым необходимо настроить PAC так, чтобы он доверял самоподписанным сертификатам или пользовательским сертификатам CA для провайдеров Git.

    Примечание: В этом документе <pac-namespace> или tekton-pipelines обозначает namespace, в котором развернут PAC. Namespace по умолчанию — tekton-pipelines, но вы можете изменить его через targetNamespace в CR OpenShiftPipelinesAsCode. Если у вас другое значение, замените <pac-namespace> или tekton-pipelines на фактическое имя вашего namespace.

    В этом руководстве объясняется, как настроить PAC для работы с сервисами Git-хостинга, использующими самоподписанные сертификаты или сертификаты, подписанные пользовательским CA. Эта настройка применяется ко всем провайдерам Git (GitHub Enterprise, GitLab self-hosted, Bitbucket Server и т. д.).

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

    Перед настройкой пользовательских сертификатов убедитесь, что у вас есть:

    • Развернутый компонент PAC
    • Права администратора в кластере
    • Доступ к файлу CA-сертификата
    • Возможность изменять CR OpenShiftPipelinesAsCode или CR TektonConfig

    Обзор

    Когда ваш сервис Git-хостинга использует самоподписанные сертификаты или сертификаты, подписанные пользовательским CA, pods контроллера PAC должны доверять этим сертификатам, чтобы успешно подключаться к сервису Git. Для этого требуется:

    1. Создать ConfigMap с CA-сертификатом
    2. Примонтировать сертификат в pods контроллера PAC
    3. Настроить Git на использование этого сертификата

    Шаг 1. Подготовьте CA-сертификат

    Получите файл CA-сертификата у администратора вашего сервиса Git-хостинга или в центре сертификации вашей организации.

    Типичные расположения CA-сертификатов:

    • Self-hosted GitLab: Обычно доступен в установке GitLab или в вашем CA организации
    • GitHub Enterprise: Доступен у администратора GitHub Enterprise Server
    • Bitbucket Server: Доступен у администратора Bitbucket Server

    Файл сертификата должен быть в формате PEM:

    -----BEGIN CERTIFICATE-----
    <certificate-content>
    -----END CERTIFICATE-----

    Шаг 2. Создайте ConfigMap с CA-сертификатом

    Создайте ConfigMap, содержащий CA-сертификат, в namespace PAC (по умолчанию: tekton-pipelines, при необходимости замените на фактический namespace PAC):

    Способ 1. Из файла

    kubectl create configmap git-ca-cert \
      --from-file=ca.crt=/path/to/ca.crt \
      -n <pac-namespace>  # Default: tekton-pipelines

    Пример вывода:

    configmap/git-ca-cert created

    Способ 2. Ручное создание

    Создайте YAML-файл git-ca-cert-configmap.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: git-ca-cert
      namespace: <pac-namespace>  # Default: tekton-pipelines
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        <your-ca-certificate-content>
        -----END CERTIFICATE-----

    Примените его:

    kubectl apply -f git-ca-cert-configmap.yaml

    Пример вывода:

    configmap/git-ca-cert created

    Примечание: Замените <your-ca-certificate-content> на фактическое содержимое сертификата.

    Шаг 3. Примонтируйте сертификат в контроллере PAC

    Примонтируйте сертификат в pods контроллера PAC, обновив CR OpenShiftPipelinesAsCode или CR TektonConfig.

    Для CR OpenShiftPipelinesAsCode

    Если вы используете CR OpenShiftPipelinesAsCode:

    apiVersion: operator.tekton.dev/v1alpha1
    kind: OpenShiftPipelinesAsCode
    metadata:
      name: pipelines-as-code
    spec:
      settings:
        application-name: Pipelines as Code CI
        hub-url: http://tekton-hub-api.tekton-pipelines:8000/v1
      targetNamespace: tekton-pipelines  # Default namespace, you can customize this
      options:
        deployments:
          pipelines-as-code-controller:
            spec:
              template:
                spec:
                  containers:
                  - name: pac-controller
                    volumeMounts:
                    - name: git-ca-cert
                      mountPath: /etc/ssl/certs/git-ca.crt
                      subPath: ca.crt
                      readOnly: true
                    env:
                    - name: GIT_SSL_CAINFO
                      value: /etc/ssl/certs/git-ca.crt
                    - name: SSL_CERT_FILE
                      value: /etc/ssl/certs/git-ca.crt
                  volumes:
                  - name: git-ca-cert
                    configMap:
                      name: git-ca-cert

    Для CR TektonConfig

    Если вы используете CR TektonConfig (для развертываний OpenShift):

    apiVersion: operator.tekton.dev/v1alpha1
    kind: TektonConfig
    metadata:
      name: config
    spec:
      platforms:
        openshift:
          pipelinesAsCode:
            enable: true
            options:
              deployments:
                pipelines-as-code-controller:
                  spec:
                    template:
                      spec:
                        containers:
                        - name: pac-controller
                          volumeMounts:
                          - name: git-ca-cert
                            mountPath: /etc/ssl/certs/git-ca.crt
                            subPath: ca.crt
                            readOnly: true
                          env:
                          - name: GIT_SSL_CAINFO
                            value: /etc/ssl/certs/git-ca.crt
                          - name: SSL_CERT_FILE
                            value: /etc/ssl/certs/git-ca.crt
                        volumes:
                        - name: git-ca-cert
                          configMap:
                            name: git-ca-cert

    Важно:

    • Сертификат монтируется в контейнер по пути /etc/ssl/certs/git-ca.crt
    • Переменные окружения GIT_SSL_CAINFO и SSL_CERT_FILE указывают Git использовать этот сертификат
    • После обновления CR Operator автоматически перезапустит pods контроллера PAC

    Шаг 4. Примените конфигурацию

    Примените обновленный CR:

    kubectl apply -f your-cr-file.yaml

    Пример вывода:

    openshiftpipelinesascode.operator.tekton.dev/pipelines-as-code configured

    Дождитесь перезапуска pods контроллера PAC:

    kubectl rollout status deployment/pipelines-as-code-controller -n <pac-namespace>  # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)

    Пример вывода:

    Waiting for deployment "pipelines-as-code-controller" rollout to finish: 0 of 1 updated replicas are available...
    deployment "pipelines-as-code-controller" successfully rolled out

    Шаг 5. Проверьте конфигурацию сертификата

    Проверьте, что сертификат примонтирован

    Убедитесь, что сертификат примонтирован в pod контроллера PAC:

    # Set your PAC namespace (default: tekton-pipelines)
    PAC_NAMESPACE="tekton-pipelines"
    
    kubectl get pod -n ${PAC_NAMESPACE} \
      -l app=pipelines-as-code-controller \
      -o jsonpath='{.items[0].spec.volumes}' | jq

    Пример вывода:

    [
      {
        "name": "tls",
        "secret": {
          "defaultMode": 420,
          "optional": true,
          "secretName": "pipelines-as-code-tls-secret"
        }
      }
    ]

    Вы должны увидеть конфигурацию volume, которая показывает, что сертификат примонтирован.

    Проверьте логи контроллера PAC

    Проверьте логи контроллера PAC на наличие ошибок, связанных с сертификатами:

    # Set your PAC namespace (default: tekton-pipelines)
    PAC_NAMESPACE="tekton-pipelines"
    
    kubectl logs -n ${PAC_NAMESPACE} \
      -l app=pipelines-as-code-controller \
      --tail=100

    Если все настроено правильно, в логах не должно быть ошибок SSL/TLS-сертификатов.

    Проверьте на репозитории

    Запустите тестовый pipeline из репозитория, размещенного в вашем сервисе Git:

    # Push a commit to trigger the pipeline
    git commit --allow-empty -m "Test certificate configuration"
    git push origin main

    Пример вывода:

    [main abc1234] Test certificate configuration
    Enumerating objects: 3, done.
    Writing objects: 100% (2/2), 240 bytes | 240.00 KiB/s, done.
    To https://gitlab.example.com/user/repo
       def5678..abc1234  main -> main

    Проверьте, что PipelineRun создан успешно:

    kubectl get pipelineruns -n <your-namespace>

    Пример вывода:

    NAME                    STARTED        DURATION   STATUS
    test-pipeline-xxxxx     1 minute ago  25s        Succeeded

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

    Проверьте, является ли сертификат недоверенным

    Проблема: PAC по-прежнему не может подключиться к вашему сервису Git из-за проблем с сертификатом.

    Решения:

    1. Проверьте формат сертификата: Убедитесь, что сертификат находится в формате PEM с корректными маркерами BEGIN/END
    2. Проверьте путь к сертификату: Убедитесь, что сертификат примонтирован по правильному пути
    3. Проверьте переменные окружения: Убедитесь, что GIT_SSL_CAINFO и SSL_CERT_FILE заданы правильно
    4. Проверьте ConfigMap: Убедитесь, что ConfigMap существует и содержит сертификат:
      kubectl get configmap git-ca-cert -n <pac-namespace> -o yaml  # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)

    Пример вывода:

    apiVersion: v1
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        MIIDXTCCAkWgAwIBAgIJAK...
        -----END CERTIFICATE-----
    kind: ConfigMap
    metadata:
      name: git-ca-cert
      namespace: tekton-pipelines

    Проверьте, не истек ли срок действия сертификата

    Проблема: Срок действия CA-сертификата истек.

    Решения:

    1. Получите новый CA-сертификат в вашем центре сертификации

    2. Обновите ConfigMap:

      # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)
      kubectl create configmap git-ca-cert \
        --from-file=ca.crt=/path/to/new-ca.crt \
        -n <pac-namespace> \
        --dry-run=client -o yaml | kubectl apply -f -

      Пример вывода:

      configmap/git-ca-cert configured
    3. Перезапустите pods контроллера PAC:

      kubectl rollout restart deployment/pipelines-as-code-controller -n <pac-namespace>  # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)

    Неверный сертификат

    Проблема: Используется неверный CA-сертификат для вашего сервиса Git.

    Решения:

    1. Убедитесь, что вы используете правильный CA-сертификат для вашего сервиса Git-хостинга
    2. Для self-hosted-сервисов получите сертификат напрямую из сервиса
    3. Для enterprise-сервисов обратитесь к администратору за правильным сертификатом

    Pod не перезапускается

    Проблема: Pods контроллера PAC не перезапускаются после обновления CR.

    Решения:

    1. Проверьте статус CR:

      kubectl get openshiftpipelinesascodes

      Пример вывода:

      NAME                  VERSION   READY   REASON
      pipelines-as-code    0.x.x     True    Ready
    2. Проверьте логи Operator:

      kubectl logs -n tekton-operator -l app=tekton-operator --tail=100

    Пример вывода (пример записей журнала):

    {"level":"info","ts":"2024-01-01T12:00:00Z","logger":"operator","msg":"Processing OpenShiftPipelinesAsCode CR"}
    1. Перезапустите deployment вручную:
      kubectl rollout restart deployment/pipelines-as-code-controller -n <pac-namespace>  # Replace <pac-namespace> with your actual namespace (default: tekton-pipelines)

    Несколько сертификатов

    Если вам нужно доверять нескольким CA-сертификатам (например, нескольким сервисам Git-хостинга), вы можете:

    Вариант 1. Объединить сертификаты в один ConfigMap

    Объедините несколько сертификатов в один файл:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: git-ca-cert
      namespace: <pac-namespace>  # Default: tekton-pipelines
    data:
      ca.crt: |
        -----BEGIN CERTIFICATE-----
        <certificate-1-content>
        -----END CERTIFICATE-----
        -----BEGIN CERTIFICATE-----
        <certificate-2-content>
        -----END CERTIFICATE-----

    Вариант 2. Использовать отдельные ConfigMap

    Используйте отдельные ConfigMap и примонтируйте их в разные места, а затем настройте Git на использование bundle сертификатов:

    env:
    - name: GIT_SSL_CAINFO
      value: /etc/ssl/certs/ca-bundle.crt
    - name: SSL_CERT_FILE
      value: /etc/ssl/certs/ca-bundle.crt

    Создайте bundle сертификатов, объединив все сертификаты в один файл.

    Рекомендации

    1. Управление сертификатами

    • Храните безопасно: Сохраняйте CA-сертификаты в защищенном хранилище
    • Контроль версий: Отслеживайте изменения сертификатов в системе контроля версий (если это не конфиденциально)
    • Документация: Документируйте, какие сертификаты используются и из каких источников они получены
    • Контроль срока действия: Отслеживайте даты истечения сертификатов

    2. Безопасность

    • Минимальные привилегии: Предоставляйте доступ только к необходимым сертификатам
    • Ротация: Регулярно выполняйте ротацию сертификатов
    • Проверка: Проверяйте сертификаты перед развертыванием

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

    • Сначала протестируйте: Проверьте конфигурацию сертификата на тестовом репозитории перед применением в production
    • Мониторинг логов: Регулярно проверяйте логи контроллера PAC на наличие ошибок сертификатов
    • Резервное копирование: Храните резервные копии рабочих конфигураций сертификатов

    Следующие шаги