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

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

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

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

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

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

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

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

    Обзор

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

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

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

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

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

    • Self-hosted GitLab: Обычно доступен в установке GitLab или у CA вашей организации
    • GitHub Enterprise: Доступен у администратора GitHub Enterprise 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

    Примонтируйте сертификат в pod'ах контроллера 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 автоматически перезапустит pod'ы контроллера PAC

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

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

    kubectl apply -f your-cr-file.yaml

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

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

    Дождитесь перезапуска pod'ов контроллера 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. Перезапустите pod'ы контроллера 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 не перезапускается

    Проблема: Pod'ы контроллера 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 на наличие ошибок сертификатов
    • Резервные копии: Храните резервные копии рабочих конфигураций сертификатов

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