Быстрый старт
Это руководство поможет вам начать работу с Tekton Triggers, создав простой сценарий триггера "Hello World", чтобы продемонстрировать его базовую функциональность. Руководство состоит из следующих шагов:
- Настроить правила автоматического предоставления доступа к
EventListener, чтобы сделатьEventListenersдоступными извне - Создать
EventListenerи связанные ресурсы - Получить автоматически сгенерированный адрес webhook из статуса
EventListener
Содержание
ТребованияШаг 1: Настройка правил автоматического предоставления доступа к EventListenerТребованияШаг 2: Создание примера проектаШаг 3: Создание Hello World TaskRunАльтернатива: простая тестовая настройкаВариант A: Использование Port-Forward (самый простой)Вариант B: Использование NodePortШаг 4: Получение адреса webhook и тестирование (с использованием автоматического предоставления доступа)Следующие шагиЧасто задаваемые вопросыТребования
-
Требования к окружению
- Версия
Kubernetes1.21 или выше - Установлен
Tekton Operator - Убедитесь, что
Tekton Triggersустановлен и готов через Operator
- Версия
-
Необходимые инструменты
- Инструмент командной строки
kubectl curl(для тестирования triggers)
- Инструмент командной строки
-
Права доступа
- Требуются права администратора кластера (для настройки правил автоматического предоставления доступа к
EventListener) - Требуются права администратора namespace (для создания ресурсов
EventListener)
- Требуются права администратора кластера (для настройки правил автоматического предоставления доступа к
Шаг 1: Настройка правил автоматического предоставления доступа к EventListener
Об автоматическом предоставлении доступа
Это улучшение платформы Alauda (не входит в стандартный Tekton Triggers), которое упрощает настройку внешнего доступа к EventListener.
Три способа предоставить доступ к EventListener:
-
Автоматическое предоставление доступа (улучшение Alauda) ⭐ Рекомендуется для production
- Автоматически создает и управляет ресурсами
Ingress - Централизованная настройка через
TektonConfig - URL webhook автоматически заполняются в статусе
EventListener - Лучше всего подходит для production-окружений с несколькими
EventListeners
- Автоматически создает и управляет ресурсами
-
Ручной Ingress (стандартный подход Tekton)
- Вы вручную создаете ресурсы
Ingressдля каждогоEventListener - Больше контроля, но требуется больше обслуживания
- Стандартный подход Kubernetes
- Вы вручную создаете ресурсы
-
Port-Forward или NodePort (тестирование/разработка) 🚀 Самый простой способ начать
- Не требуется настройка
Ingressили DNS - Отлично подходит для локального тестирования и обучения
- См. Перейти к простой тестовой настройке, если хотите быстро начать
- Не требуется настройка
Если вы только начинаете работать с Triggers, вы можете пропустить этот шаг и перейти к разделу Простая тестовая настройка, чтобы начать с port-forward. Вернитесь к настройке автоматического предоставления доступа позже, когда будете готовы к production-развертыванию.
Функция автоматического предоставления доступа для EventListener автоматически создает ресурсы Ingress для ваших EventListeners на основе настроенных вами правил экспорта. Это устраняет необходимость вручную создавать и управлять ресурсами Ingress. Сначала нужно настроить эти правила, чтобы к EventListeners можно было обращаться по внешним URL. Подробные инструкции по настройке см. в разделе Настройка правил автоматического предоставления доступа к EventListener.
Требования
Перед настройкой правил экспорта убедитесь, что выполнены следующие условия:
-
Настройка LoadBalancer или Gateway (рекомендуется для production):
- Для production-окружений рекомендуется использовать
LoadBalancerилиGatewayдля предоставления доступа кEventListeners LoadBalancer/Gatewayдолжен быть настроен и доступен- У вас должно быть внешнее доменное имя или IP-адрес, который будет использоваться для webhook
- Для production-окружений рекомендуется использовать
-
Ingress Controller (если используется Ingress):
- В кластере должен быть установлен и запущен
Ingress-controller (например,NGINX,ALBилиTraefik) - Вы должны знать имя
IngressClass, которое будет использоваться - Дополнительную информацию о создании Ingress см. в Создание Ingress.
- В кластере должен быть установлен и запущен
-
Домен и сертификат (для HTTPS):
- Если используется HTTPS, убедитесь, что доменное имя настроено
- TLS-сертификаты должны быть подготовлены (либо созданы вручную, либо через
cert-manager)
Важные замечания:
- Функция автоматического предоставления доступа автоматически создаст для вас ресурсы
Ingressна основе правил экспорта. Обычно вам не нужно вручную создавать или изменять ресурсыIngress. - Если вы используете
LoadBalancerс пользовательским портом, обязательно укажите порт в полеexternalHosts(например,https://webhooks.example.com:8443). - Для окружений разработки или тестирования вы также можете использовать
NodePortвместоIngress/LoadBalancer. Подробности см. в примере настройки NodePort.
Настройка правил экспорта через TektonConfig
Создайте или обновите ресурс TektonConfig, чтобы настроить правила экспорта. Создайте файл tektonconfig.yaml:
Понимание автоматического предоставления доступа
Функция автоматического предоставления доступа работает следующим образом:
- Читает правила экспорта, которые вы настроили в
TektonConfig - Автоматически создает ресурсы
IngressдляEventListeners, которые соответствуют правилам - Заполняет поле
status.addressesуEventListenerURL webhook, которые можно отобразить в UI - Устраняет необходимость вручную создавать и управлять ресурсами
Ingressдля каждогоEventListener
Такой подход обеспечивает централизованный способ управления тем, как публикуются EventListeners, и упрощает поддержание единообразных шаблонов URL webhook в кластере.
Выберите способ настройки Ingress
Функция автоматического предоставления доступа поддерживает два способа настройки Ingress для внешнего доступа к EventListeners. Выберите способ, который лучше всего подходит для вашего окружения:
Альтернатива: настройка NodePort
Если у вас нет LoadBalancer или Ingress controller, либо вы предпочитаете более простую настройку для разработки/тестирования, можно использовать NodePort. Подробности см. в примере настройки NodePort. Функция автоматического предоставления доступа не требуется при использовании NodePort, так как доступ к EventListener осуществляется напрямую через IP-адрес узла и NodePort.
Способ 1: Общая настройка Ingress (рекомендуется для production)
Этот способ подходит для большинства окружений Kubernetes. Вам нужно:
-
Создать IngressClass (если он еще не существует): подробнее см. в Создание Ingress.
-
Или использовать Service LoadBalancer, чтобы получить внешний IP-адрес подробнее см. в Настройка Load Balancer.
-
Настроить правила экспорта в соответствии с вашей схемой Ingress:
- Если используется IngressClass: задайте
ingressClassравным имени вашего IngressClass (например,nginx) - Если используется LoadBalancer: получите внешний IP/домен из service 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 Business Clusters
Если вы используете бизнес-кластер ACP (Alauda Container Platform), можно воспользоваться встроенным gateway платформы для быстрой настройки:
- Получите адрес доступа к платформе ACP (например,
https://192.168.1.100) - Получите имя кластера (например,
test) - Настройте правила экспорта следующим образом:
- Установите
hostпустым (или используйте wildcard*) - Установите
externalHostsв значение:<ACP Platform Access Address>/clusters-rewrite/<Cluster Name> - Итоговый URL webhook будет:
<externalHost>/<urlPathPrefix>/<eventlistener-namespace>/<eventlistener-name>
- Установите
Пример настройки для ACP:
При такой настройке адрес webhook будет следующим:
Формула настройки ACP:
- URL платформы ACP:
https://192.168.1.100 - Имя кластера:
test - Префикс пути URL:
/triggers(настраивается) - Внешний хост:
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 и настроить externalHosts с вашим реальным доступным URL.
Применение TektonConfig
Проверка конфигурации
Подождите несколько секунд, пока Operator синхронизирует конфигурацию, затем проверьте:
ConfigMap должен содержать конфигурацию ваших правил экспорта. (Примечание: имя ConfigMap trigger-wrapper-config — это внутреннее техническое имя; вам не нужно его запоминать, поскольку вы управляете конфигурацией через TektonConfig.)
Шаг 2: Создание примера проекта
Создание namespace
О ServiceAccount для EventListener
Для этого быстрого старта мы будем использовать 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
Когда нужен custom ServiceAccount:
- Если вам нужно создавать ресурсы в нескольких namespace (cross-namespace triggers)
- Если вам нужны дополнительные права, выходящие за пределы default scope
- См. Настройка EventListener для конфигурации custom
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): 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 - Запущен ли controller автоматического предоставления доступа и обработал ли он
EventListener - Логи controller:
kubectl logs -n tekton-pipelines -l app=tektoncd-enhancement-controller
Сетевой доступ: Убедитесь, что внешний URL хоста доступен из места, откуда вы выполняете тест. Если вы тестируете внутри кластера, может потребоваться использовать port-forward или обратиться к внутреннему адресу service вместо этого.
Проверка доступности домена webhook
Перед отправкой тестовых запросов убедитесь, что ваш домен webhook доступен:
Важно: Убедитесь, что ваш домен webhook, основанный на LoadBalancer/Gateway, доступен из внешних систем. Если вы настраиваете webhook в GitHub, GitLab или других внешних системах, они должны иметь возможность достичь этого URL. Проверьте:
- DNS-записи настроены корректно
- LoadBalancer/Gateway настроен правильно и доступен
- Правила firewall разрешают входящий трафик
- TLS-сертификаты действительны (если используется HTTPS)
Отправка тестового запроса на webhook
Просмотр результатов
Очистка ресурсов
После тестирования вы можете удалить созданные ресурсы:
Следующие шаги
Теперь, когда вы успешно создали и протестировали базовый пример Tekton Triggers, вы можете:
- Изучить концепции Tekton Triggers
- Узнать, как использовать Настройка EventListeners для общих инструкций по настройке
- Настроить правила автоматического предоставления доступа к EventListener для более сложных сценариев предоставления доступа
- Настроить и использовать события Gitlab для запуска pipelines
Часто задаваемые вопросы
-
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 - Проверьте, что controller автоматического предоставления доступа запущен:
kubectl get pods -n tekton-pipelines -l app=tektoncd-enhancement-controller - Посмотрите логи 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
- Подтвердите, что конфигурация