架构

架构概述

Tekton Triggers 是一个基于 Kubernetes 的事件监听和处理系统,它通过将外部事件(如 Git 提交、镜像推送等)转换为 Kubernetes 资源,从而实现 CI/CD pipeline 的自动触发。

Tekton Triggers 架构图

核心组件

1. EventListener

EventListener 是整个系统的入口点。它:

  • 创建一个 Kubernetes Service 和 Pod
  • 暴露用于接收外部事件的 HTTP endpoint
  • 管理事件处理流程
  • 支持多种认证方法

主要职责:

  • 接收并验证 Webhook 事件
  • 根据配置调用相应的 interceptor
  • 执行 trigger 逻辑
  • 创建 Kubernetes 资源

2. Trigger

Trigger 定义了如何处理接收到的事件,它包括:

  • TriggerBinding:数据提取规则
  • TriggerTemplate:资源模板
  • Interceptors:事件 interceptor(可选)

工作流程:

  1. 接收事件数据
  2. 通过 interceptor 进行处理(如果已配置)
  3. 使用 TriggerBinding 提取数据
  4. 将数据应用到 TriggerTemplate

3. Interceptor

Interceptor 在事件处理工作流中提供了一个额外的处理层:

  • 事件过滤
  • 载荷验证
  • 数据转换
  • 认证和授权

它支持两种类型:

  1. 内置 Interceptor
    • GitHub
    • GitLab
    • Bitbucket
    • CEL (Common Expression Language)
  2. 自定义 Interceptor
    • 独立部署的服务
    • 实现标准接口
    • 高扩展性

4. TriggerBinding

负责从事件数据中提取信息:

  • 定义数据映射规则
  • 支持 JSONPath 语法
  • 可为集群级别或命名空间级别

主要功能:

  • 参数提取
  • 数据转换
  • 变量映射

5. TriggerTemplate

定义要创建的 Kubernetes 资源:

  • 支持参数化模板
  • 可以创建多个资源
  • 支持动态命名

特性:

  • 资源模板化
  • 参数替换
  • 动态生成名称

工作流程

  1. 事件接收

    • 外部系统向 EventListener 发送 Webhook
    • EventListener 验证请求
  2. Interceptor 处理

    • 调用已配置的 interceptor 链
    • 执行验证和转换
    • 可以终止或修改请求
  3. 数据提取

    • TriggerBinding 从事件中提取数据
    • 应用数据映射规则
    • 准备参数
  4. 资源创建

    • TriggerTemplate 使用提取的数据
    • 替换模板中的参数
    • 创建 Kubernetes 资源

部署架构

基本组件

  1. EventListener Pod

    • 运行事件接收服务
    • 包含核心处理逻辑
    • 需要特定的 RBAC 权限
  2. EventListener Service

    • 暴露 HTTP endpoint
    • 支持不同的 Service 类型
    • 可配置 TLS

可选组件

  1. Interceptor Service

    • 独立部署的 interceptor
    • 自定义事件处理逻辑
    • 需要网络可达性
  2. Ingress/Route

    • 外部访问配置
    • TLS 终止
    • 路由规则

安全架构

认证机制

  1. Webhook 认证

    • Secret Token 验证
    • 签名验证
    • OAuth 集成
  2. Kubernetes 认证

    • ServiceAccount
    • RBAC 权限
    • Secret 管理

授权控制

  1. 资源访问控制

    • 基于角色的访问控制
    • 命名空间隔离
    • 最小权限原则
  2. 网络安全

    • TLS 加密
    • 网络策略
    • 访问限制

可扩展性设计

1. 自定义 Interceptor

  • 标准 HTTP 接口
  • 灵活的部署选项
  • 可插拔架构

2. 资源模板

  • 支持多种资源类型
  • 参数化配置
  • 动态生成