Быстрый старт
Это руководство поможет вам начать работу с Tekton Triggers, создав простой сценарий триггера "Hello World", чтобы продемонстрировать его базовую функциональность. Руководство состоит из следующих шагов:
- Настроить правила автоматического экспонирования
EventListener, чтобы сделатьEventListenersдоступными извне - Создать
EventListenerи связанные ресурсы - Получить автоматически сгенерированный webhook-адрес из статуса
EventListener
Содержание
Предварительные требованияШаг 1: Настройте правила автоматического экспонирования EventListenerПредварительные требованияШаг 2: Создайте пример проектаШаг 3: Создайте Hello World TaskRunАльтернативный вариант: простая схема тестированияВариант A: использование Port-Forward (самый простой)Вариант B: использование NodePortШаг 4: Получите адрес webhook и протестируйте (с использованием автоматического экспонирования)Следующие шагиЧасто задаваемые вопросыПредварительные требования
-
Требования к окружению
Kubernetesверсии 1.21 или выше- Установлен
Tekton Operator - Убедитесь, что
Tekton Triggersустановлен и готов к работе через Operator
-
Необходимые инструменты
- Утилита командной строки
kubectl curl(для тестирования триггеров)
- Утилита командной строки
-
Права доступа
- Требуются права администратора кластера (для настройки правил автоматического экспонирования
EventListener) - Требуются права администратора namespace (для создания ресурсов
EventListener)
- Требуются права администратора кластера (для настройки правил автоматического экспонирования
Шаг 1: Настройте правила автоматического экспонирования EventListener
Об автоматическом экспонировании
Это улучшение платформы Alauda (не входит в стандартный Tekton Triggers), которое упрощает настройку внешнего доступа к EventListener.
Три способа экспонирования EventListener:
-
Автоматическое экспонирование (улучшение Alauda) ⭐ Рекомендуется для production
- Автоматически создает и управляет ресурсами
Ingress - Централизованная настройка через
TektonConfig - URL webhook автоматически заполняются в статусе
EventListener - Лучше всего подходит для production-окружений с несколькими
EventListener
- Автоматически создает и управляет ресурсами
-
Ручной Ingress (стандартный подход Tekton)
- Вы вручную создаете ресурсы
Ingressдля каждогоEventListener - Больше контроля, но требуется больше сопровождения
- Стандартный подход Kubernetes
- Вы вручную создаете ресурсы
-
Port-Forward или NodePort (тестирование/разработка) 🚀 Самый простой способ начать
- Не требуется настройка
Ingressили DNS - Отлично подходит для локального тестирования и изучения
- См. Перейти к простой схеме тестирования, если хотите быстро начать
- Не требуется настройка
Если вы впервые работаете с Triggers, можете пропустить этот шаг и перейти к разделу Простая схема тестирования, чтобы начать работу через port-forward. Вернитесь к настройке автоматического экспонирования позже, когда будете готовы к deployment в production.
Функция автоматического экспонирования EventListener автоматически создает ресурсы Ingress для ваших EventListener на основе настроенных вами правил экспорта. Это избавляет от необходимости вручную создавать и сопровождать ресурсы Ingress. Сначала нужно настроить эти правила, чтобы к EventListener можно было обращаться по внешним URL. Подробные инструкции по настройке см. в Configure EventListener automatic exposure rules.
Предварительные требования
Перед настройкой правил экспорта убедитесь, что выполнены следующие условия:
-
Настройка LoadBalancer или Gateway (рекомендуется для production):
- Для production-окружений рекомендуется использовать
LoadBalancerилиGatewayдля экспонированияEventListener LoadBalancer/Gatewayдолжны быть настроены и доступны- У вас должен быть внешний домен или IP-адрес, который будет использоваться для webhook
- Для production-окружений рекомендуется использовать
-
Ingress controller (если используется Ingress):
- В кластере должен быть установлен и запущен
Ingresscontroller (например,NGINX,ALBилиTraefik) - Вам нужно знать имя
IngressClass, которое будет использоваться - Дополнительные сведения о создании Ingress см. в Создание Ingress.
- В кластере должен быть установлен и запущен
-
Домен и сертификат (для HTTPS):
- Если используется HTTPS, убедитесь, что доменное имя настроено
- TLS-сертификаты должны быть подготовлены (созданы вручную или через
cert-manager)
Важные замечания:
- Функция автоматического экспонирования автоматически создаст для вас ресурсы
Ingressна основе правил экспорта. Обычно вручную создавать или изменять ресурсыIngressне требуется. - Если вы используете
LoadBalancerс пользовательским портом, обязательно укажите порт в полеexternalHosts(например,https://webhooks.example.com:8443). - Для development- или testing-окружений можно использовать
NodePortвместоIngress/LoadBalancer. Подробности см. в примере настройки NodePort.
Настройка правил экспорта через TektonConfig
Создайте или обновите ресурс TektonConfig, чтобы настроить правила экспорта. Создайте файл tektonconfig.yaml:
Как работает автоматическое экспонирование
Функция автоматического экспонирования работает следующим образом:
- Считывает настроенные вами правила экспорта в
TektonConfig - Автоматически создает ресурсы
IngressдляEventListener, которые соответствуют этим правилам - Заполняет поле
status.addressesуEventListenerURL webhook, которые можно отображать в UI - Устраняет необходимость вручную создавать и управлять ресурсами
Ingressдля каждогоEventListener
Этот подход обеспечивает централизованный способ управления тем, как EventListener доступны извне, что упрощает поддержание единообразных шаблонов URL webhook во всем кластере.
Выберите способ настройки Ingress
Функция автоматического экспонирования поддерживает два способа настройки Ingress для внешнего доступа к EventListener. Выберите метод, который лучше всего подходит для вашего окружения:
Альтернатива: настройка NodePort
Если у вас нет LoadBalancer или Ingress controller, либо вы предпочитаете более простую схему для development/testing, можно использовать NodePort. Подробности см. в примере настройки NodePort. При использовании NodePort функция автоматического экспонирования не требуется, поскольку доступ к EventListener будет осуществляться напрямую через IP-адрес узла и NodePort.
Способ 1: Общая настройка Ingress (рекомендуется для production)
Этот способ подходит для большинства окружений Kubernetes. Вам нужно:
-
Создать IngressClass (если он еще не существует): подробнее см. в Создание Ingress.
-
Или использовать Service LoadBalancer, чтобы получить внешний IP-адрес подробнее см. в Настройка Load Balancer.
-
Настроить правила экспорта в соответствии с вашей схемой Ingress:
- Если используется IngressClass: укажите
ingressClassс именем вашей IngressClass (например,nginx) - Если используется LoadBalancer: получите внешний IP/домен из сервиса LoadBalancer и настройте
hostиexternalHostsсоответствующим образом
- Если используется IngressClass: укажите
Пример конфигурации для IngressClass:
Настройка DNS: При настройке поля host с использованием доменного имени убедитесь, что:
- DNS-записи корректно настроены и разрешают домен в IP-адрес вашего Ingress controller
- Для локального тестирования можно добавить домен в
/etc/hosts(Linux/Mac) илиC:\Windows\System32\drivers\etc\hosts(Windows) - Домен должен разрешаться с систем, которые будут отправлять webhook (GitHub, GitLab и т. д.)
Способ 2: Быстрый старт для бизнес-кластеров ACP
Если вы используете бизнес-кластер ACP (Alauda Container Platform), можно воспользоваться встроенным gateway платформы для быстрой настройки:
- Получите адрес доступа к платформе ACP (например,
https://192.168.1.100) - Получите имя кластера (например,
test) - Настройте правила экспорта следующим образом:
- Установите
hostпустым (или используйте wildcard*) - Установите
externalHostsв:<Адрес доступа к платформе ACP>/clusters-rewrite/<Имя кластера> - Итоговый URL webhook будет:
<externalHost>/<urlPathPrefix>/<eventlistener-namespace>/<eventlistener-name>
- Установите
Пример конфигурации для ACP:
При такой конфигурации адрес webhook будет:
Формула конфигурации ACP:
- URL платформы ACP:
https://192.168.1.100 - Имя кластера:
test - Префикс пути URL:
/triggers(настраивается) - External Host:
https://192.168.1.100/clusters-rewrite/test - Итоговый URL webhook:
https://192.168.1.100/clusters-rewrite/test/triggers/<eventlistener-namespace>/<eventlistener-name>
Пример: если адрес платформы ACP — https://192.168.1.100, имя кластера — test, а urlPathPrefix — /triggers, то адрес доступа будет https://192.168.1.100/clusters-rewrite/test/triggers.
Важно: Замените значения-заполнители (webhooks.example.com, nginx и т. д.) на ваше реальное доменное имя, ingress class и URL внешнего host. Если домен не настроен, можно использовать пустое поле host и настроить externalHosts с вашим фактически доступным URL.
Применение TektonConfig
Проверка конфигурации
Подождите несколько секунд, пока Operator синхронизирует конфигурацию, затем выполните проверку:
ConfigMap должен содержать вашу конфигурацию правил экспорта. (Примечание: имя ConfigMap trigger-wrapper-config — это внутреннее техническое имя; запоминать его не нужно, поскольку вы управляете конфигурацией через TektonConfig.)
Шаг 2: Создайте пример проекта
Создание namespace
О ServiceAccount для EventListener
В этом quick start мы используем default ServiceAccount, который автоматически создается системой Tekton Triggers. Этот ServiceAccount называется triggers-default-sa и имеет права, ограниченные namespace.
Как это работает:
- При установке
Tekton Triggersон автоматически создает defaultServiceAccountв каждом namespace - Его можно найти, выполнив:
kubectl get sa -n tekton-triggers-demo -l triggers.tekton.dev/default-service-account - Этот
ServiceAccountимеет права на созданиеTaskRunsиPipelineRunsв пределах того же namespace - Ручная настройка не требуется — достаточно ссылаться на него по имени:
triggers-default-sa
Когда нужен пользовательский ServiceAccount:
- Если требуется создавать ресурсы в нескольких namespace (cross-namespace triggers)
- Если нужны дополнительные права сверх стандартной области действия
- См. Setup EventListener для настройки пользовательского
ServiceAccount
Шаг 3: Создайте Hello World TaskRun
Создание Task
Создайте файл hello-task.yaml:
Создание Trigger Template
Создайте файл trigger-template.yaml:
Создание Trigger Binding
Создайте файл trigger-binding.yaml:
Создание Event Listener
Создайте файл event-listener.yaml:
Примечание о ServiceAccount: Мы используем автоматически созданный default ServiceAccount (задав serviceAccountName как triggers-default-sa). Этот ServiceAccount создается системой Tekton Triggers и имеет права на создание TaskRuns/PipelineRuns в пределах того же namespace. Этого достаточно для данного примера, поскольку все ресурсы находятся в одном namespace. Функция автоматического экспонирования автоматически создаст Ingress для этого EventListener на основе правил экспорта, настроенных на шаге 1.
Применение конфигурации
Примените все созданные ресурсы:
Альтернативный вариант: простая схема тестирования
Если вы пропустили шаг 1 (настройку автоматического экспонирования) и хотите быстро протестировать, можно использовать port-forward или NodePort, чтобы получить доступ к EventListener без настройки Ingress или DNS.
Вариант A: использование Port-Forward (самый простой)
Дождитесь готовности EventListener
Перенаправьте локальный порт на EventListener
Оставьте этот терминал открытым. Теперь EventListener доступен по адресу http://localhost:8080.
Отправьте тестовый запрос через Port-Forward
Откройте новый терминал и выполните:
Просмотр результатов
Вариант B: использование NodePort
Для доступа к EventListener извне вашей локальной машины без Ingress:
Измените Service EventListener на NodePort
Получите NodePort
Отправьте тестовый запрос через NodePort
Когда использовать каждый метод:
- Port-forward: локальное тестирование, разработка, обучение
- NodePort: тестирование с других машин, development-кластеры
- Автоматическое экспонирование (Ingress): deployment в production, внешние webhook (GitHub, GitLab и т. д.)
Шаг 4: Получите адрес webhook и протестируйте (с использованием автоматического экспонирования)
Дождитесь готовности EventListener
Получите автоматически сгенерированный адрес webhook
Функция автоматического экспонирования автоматически генерирует внешние адреса webhook на основе правил экспорта, настроенных на шаге 1. Эти адреса заполняются в поле status.addresses объекта EventListener:
Формат адреса: адрес webhook имеет шаблон: <externalHost>/<urlPathPrefix>/<eventlistener-namespace>/<eventlistener-name>
Например: https://webhooks.example.com/triggers/tekton-triggers-demo/hello-listener
Если status.addresses пуст, проверьте:
- Правила экспорта, которые вы настроили, соответствуют namespace вашего
EventListener - Контроллер автоматического экспонирования запущен и обработал
EventListener - Посмотрите логи контроллера:
kubectl logs -n tekton-pipelines -l app=tektoncd-enhancement-controller
Доступность сети: Убедитесь, что внешний URL host доступен из среды, в которой вы тестируете. Если тестирование выполняется внутри кластера, может потребоваться использовать port-forward или обращаться к внутреннему адресу service.
Проверьте доступность домена webhook
Перед отправкой тестовых запросов убедитесь, что домен webhook доступен:
Важно: Убедитесь, что домен webhook на основе LoadBalancer/Gateway доступен из внешних систем. Если вы настраиваете webhook в GitHub, GitLab или других внешних системах, они должны иметь возможность достичь этого URL. Проверьте:
- DNS-записи настроены корректно
- LoadBalancer/Gateway настроен правильно и доступен
- Правила firewall разрешают входящий трафик
- TLS-сертификаты действительны (если используется HTTPS)
Отправьте тестовый запрос на webhook
Просмотр результатов
Очистка ресурсов
После тестирования вы можете удалить созданные ресурсы:
Следующие шаги
Теперь, когда вы успешно создали и протестировали базовый пример Tekton Triggers, вы можете:
- Изучить концепции Tekton Triggers
- Узнать, как использовать Setup EventListeners для общих инструкций по настройке
- Настроить правила автоматического экспонирования EventListener для более сложных сценариев экспонирования
- Настроить и использовать события GitLab для запуска pipeline
Часто задаваемые вопросы
-
Pod EventListener не запускается
- Проверьте, достаточно ли у default
ServiceAccountправ в пределах namespace - Убедитесь, что ресурс
EventListenerнастроен корректно - Посмотрите логи Pod
EventListener:kubectl logs -n tekton-triggers-demo -l app=el-hello-listener
- Проверьте, достаточно ли у default
-
Адрес webhook (status.addresses) пуст
- Убедитесь, что правила экспорта, которые вы настроили, соответствуют namespace вашего
EventListener - Проверьте, что контроллер автоматического экспонирования запущен:
kubectl get pods -n tekton-pipelines -l app=tektoncd-enhancement-controller - Посмотрите логи контроллера, чтобы проверить, есть ли совпадения или ошибки конфигурации
- Убедитесь, что namespace в
namespaceSelector.matchNamesсовпадает с namespace вашегоEventListener
- Убедитесь, что правила экспорта, которые вы настроили, соответствуют namespace вашего
-
Trigger не отвечает
- Убедитесь, что URL webhook доступен (проверьте
status.addresses) - Проверьте, что формат запроса правильный
- Посмотрите логи Pod
EventListener:kubectl logs -n tekton-triggers-demo -l app=el-hello-listener - Убедитесь, что
Ingressнастроен правильно:kubectl get ingress -n tekton-triggers-demo
- Убедитесь, что URL webhook доступен (проверьте
-
TaskRun не создается
- Подтвердите, что конфигурация
TriggerTemplateкорректна - Проверьте сопоставление параметров в
TriggerBinding - Посмотрите журналы ошибок Pod
EventListener
- Подтвердите, что конфигурация