Interceptor
Interceptor — это мощный компонент в Tekton Triggers, который обрабатывает и фильтрует данные событий до того, как они попадут в TriggerBindings и TriggerTemplates. Он выступает в роли «привратника» и трансформатора входящих webhook-событий, позволяя проверять, фильтровать и изменять данные событий, чтобы только релевантные события запускали ваши пайплайны.
Содержание
Объяснение терминологииЗачем нужны InterceptorsПроблемы обработки событийКак Interceptors решают эти задачиПреимуществаПрименимые сценарииОграничения и недостаткиПринципыАрхитектура InterceptorТипы InterceptorsСтруктура InterceptorПримеры конфигурацииПример Interceptor для GitHubПример Interceptor для GitLab с CELПример пользовательского InterceptorВажные пояснения по параметрам InterceptorsВыражения CELПрименимые сценарииОграничения и недостаткиПринципы/Пояснения параметровПримеры конфигурацииКонфигурация HTTPSПрименимые сценарииОграничения и недостаткиПринципы/Пояснения параметровПримеры конфигурацииСсылки на материалыОбъяснение терминологии
Зачем нужны Interceptors
Проблемы обработки событий
В CI/CD системах, реагирующих на внешние события, возникают несколько проблем:
- Валидация событий: Внешние webhook-и необходимо проверять, чтобы убедиться, что они поступают из доверенных источников.
- Фильтрация событий: Не все события должны запускать пайплайны; требуется фильтрация по типам событий или содержимому.
- Трансформация данных: Исходные payload-ы webhook-ов часто содержат больше данных, чем нужно, или требуют реструктуризации.
- Вопросы безопасности: Без надлежащей проверки webhook-эндпоинты могут быть уязвимы для злоупотреблений.
Без Interceptors решение этих задач потребовало бы:
- Пользовательского кода для валидации каждого источника webhook
- Сложной логики, встроенной в определения пайплайнов
- Ручной фильтрации и трансформации в скриптах
- Отдельных механизмов безопасности для каждой интеграции
Как Interceptors решают эти задачи
Interceptors предоставляют стандартизированный декларативный способ:
- Валидации событий: Проверять подписи и токены webhook-ов для подтверждения подлинности.
- Фильтрации событий: Обрабатывать только релевантные события по типу, содержимому или другим критериям.
- Трансформации данных: Извлекать, изменять или добавлять данные для удобства использования в пайплайнах.
- Повышения безопасности: Внедрять единообразные меры безопасности для всех интеграций webhook.
- Модульности логики: Разделять обработку событий и выполнение пайплайнов.
Такой подход создаёт чёткое разделение между приёмом событий, их обработкой и выполнением пайплайнов, что делает вашу CI/CD систему более поддерживаемой и безопасной.
Преимущества
- Повышенная безопасность: Проверка подлинности webhook перед обработкой
- Снижение сложности пайплайнов: Вынос логики фильтрации и трансформации из пайплайнов
- Стандартизированная обработка: Единообразная работа с событиями из разных источников
- Гибкость: Возможность цепочки нескольких interceptors для сложной обработки
- Расширяемость: Создание пользовательских interceptors для специализированных задач
- Повторное использование: Определение interceptors один раз и использование в нескольких триггерах
- Декларативная конфигурация: Настройка обработки событий с помощью ресурсов Kubernetes
Применимые сценарии
Interceptors необходимы в следующих случаях:
-
Безопасная обработка webhook-ов: Когда нужно убедиться, что события webhook поступают из доверенных источников.
-
Условный запуск пайплайнов: Когда требуется запускать пайплайны только для определённых типов или содержимого событий (например, только при push в основную ветку).
-
Обогащение данных: Когда нужно добавить вычисляемые значения или извлечь конкретные данные из сложных payload-ов событий.
-
Интеграция с несколькими источниками: При работе с несколькими провайдерами webhook (GitHub, GitLab, Bitbucket) с единообразной обработкой.
-
Пользовательская обработка событий: При реализации специализированной логики обработки событий, выходящей за рамки стандартных interceptors.
Ограничения и недостатки
- Interceptors добавляют накладные расходы на обработку событий
- Сложные выражения CEL могут быть трудны для отладки
- Пользовательские interceptors требуют дополнительного развертывания и управления
- Рекомендуется использовать HTTPS для безопасности, поддержка HTTP будет удалена в будущих версиях
- Interceptors должны быть надёжно защищены от несанкционированного доступа
Принципы
Архитектура Interceptor
Interceptors располагаются между EventListener и пайплайном обработки триггера:
- EventListener принимает webhook-событие
- Interceptors обрабатывают и фильтруют событие
- TriggerBindings извлекают данные из обработанного события
- TriggerTemplates создают ресурсы на основе извлечённых данных
Interceptors могут быть связаны в цепочку, где каждый следующий получает результат предыдущего. Это позволяет строить сложные пайплайны обработки, где каждый interceptor выполняет свою функцию.
Типы Interceptors
Tekton Triggers поддерживает две реализации interceptors:
-
Standalone Interceptors: Реализованы как отдельные сервисы Kubernetes
- Interceptor: ресурс с областью действия в пространстве имён
- ClusterInterceptor: ресурс с областью действия на уровне кластера
- Более гибкие и расширяемые
- Могут быть реализованы на любом языке, поддерживающем HTTP-сервер
-
Встроенные Interceptors: Включены в pod EventListener
- GitHub, GitLab, Bitbucket, CEL и др.
- Сохраняются для обратной совместимости
- Проще в использовании, но менее расширяемы
Структура Interceptor
Базовый ресурс Interceptor имеет следующую структуру:
При ссылке в Trigger:
Примеры конфигурации
Пример Interceptor для GitHub
Пример Interceptor для GitLab с CEL
Пример пользовательского Interceptor
-
Создайте Deployment для вашего пользовательского interceptor:
-
Создайте Service для вашего пользовательского interceptor:
-
Зарегистрируйте ваш пользовательский interceptor:
Важные пояснения по параметрам Interceptors
Выражения CEL
CEL (Common Expression Language) — мощный инструмент, используемый в interceptor CEL для фильтрации и трансформации данных событий.
Применимые сценарии
- Фильтрация событий по сложным условиям
- Извлечение конкретных данных из payload-ов событий
- Создание новых полей на основе существующих данных
- Реализация условной логики
Ограничения и недостатки
- Сложные выражения могут быть трудны для отладки
- Ограничены функционалом CEL
- Возможное влияние на производительность при очень сложных выражениях
Принципы/Пояснения параметров
Распространённые шаблоны CEL:
- Доступ к полям body:
body.repository.full_name - Доступ к заголовкам:
header.X-GitHub-Event - Строковые операции:
body.ref.split('/')[2] - Условные выражения:
body.action in ['opened', 'reopened', 'synchronize'] - Булева логика:
body.pull_request.base.ref == 'main' && body.action == 'opened'
Примеры конфигурации
Конфигурация HTTPS
Рекомендуется запускать interceptors через HTTPS для безопасности, и это будет обязательным в будущих версиях.
Применимые сценарии
- Производственные среды
- Обработка конфиденциальных данных
- Соответствие требованиям безопасности
Ограничения и недостатки
- Требуется правильное управление сертификатами
- Дополнительная конфигурация по сравнению с HTTP
Принципы/Пояснения параметров
Для настройки interceptor с HTTPS:
- Добавьте метку
server/type: httpsк вашему interceptor - Предоставьте CA bundle для проверки сертификатов
- Убедитесь, что сервис interceptor настроен на работу по HTTPS