架构

架构概览

Tekton Triggers 是一个基于 Kubernetes 的事件监听和处理系统,它通过将外部事件(例如 Git commits、image pushes 等)转换为 Kubernetes resources,从而实现对 CI/CD pipelines 的自动触发。

Tekton Triggers 架构图

核心组件

1. EventListener

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

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

主要职责:

  • 接收并验证 Webhook events
  • 根据配置调用相应的 interceptors
  • 执行 trigger 逻辑
  • 创建 Kubernetes resources

2. Trigger

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

  • TriggerBinding:数据提取规则
  • TriggerTemplate:resource templates
  • Interceptors:事件拦截器(可选)

工作流程:

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

3. Interceptor

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

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

它支持两种类型:

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

4. TriggerBinding

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

  • 定义数据映射规则
  • 支持 JSONPath 语法
  • 可以是 cluster-level 或 namespace-level

主要功能:

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

5. TriggerTemplate

定义要创建的 Kubernetes resources:

  • 支持参数化 templates
  • 可创建多个 resources
  • 支持动态命名

特性:

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

工作流程

  1. 事件接收

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

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

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

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

部署架构

基本组件

  1. EventListener Pod

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

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

可选组件

  1. Interceptor Service

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

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

安全架构

认证机制

  1. Webhook Authentication

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

    • ServiceAccount
    • RBAC permissions
    • Secret 管理

授权控制

  1. 资源访问控制

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

    • TLS 加密
    • Network policies
    • 访问限制

扩展性设计

1. 自定义 Interceptors

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

2. Resource Templates

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