架构

目录

Tekton Chains 架构概述

Tekton Chains 是一个 Kubernetes 自定义资源定义(CRD)控制器,旨在为 Tekton pipelines 提供供应链安全功能。Tekton Chains 的架构由多个关键组件协同工作,提供安全的工件签名和验证能力。

Tekton Chains Architecture

注:上图展示了 Tekton Chains 的高层架构。实际实现可能会根据配置有所不同。

核心组件

Tekton Chains Controller

Tekton Chains Controller 是架构的核心组件。它作为 Kubernetes 控制器运行,负责:

  • 监听集群中 TaskRun 和 PipelineRun 的完成事件
  • 对已完成的 TaskRun 和 PipelineRun 进行快照
  • 处理这些快照以生成加密签名和证明
  • 将签名和证明存储到配置的存储后端

该控制器以 Kubernetes Deployment 形式运行在 tekton-pipelines 命名空间中,负责 Tekton Chains 的所有核心功能。

签名组件

Tekton Chains 支持多种签名机制,以提供工件安全的灵活性:

  • X509 Signer:使用 X509 证书对工件进行签名
  • Cosign Signer:集成 Cosign 用于容器镜像签名
  • KMS Signers:支持多种密钥管理系统:
    • GCP KMS
    • AWS KMS
    • Azure KMS
    • HashiCorp Vault

这些签名组件负责对 Tekton Chains 生成的工件和证明进行加密签名。

存储组件

Tekton Chains 可以将签名和证明存储在多种后端:

  • Tekton Storage:将签名作为注解存储在 TaskRun 或 PipelineRun 对象上
  • OCI Storage:将签名和证明与容器镜像一起存储在兼容 OCI 的镜像仓库中
  • GCS Storage:将签名和证明存储在 Google Cloud Storage 桶中
  • DocDB Storage:将签名和证明存储在文档数据库(如 MongoDB、Firestore)中
  • Grafeas Storage:将签名和证明存储在 Grafeas 服务器中

数据流

Tekton Chains 的数据流遵循以下步骤:

  1. 观察:Chains Controller 观察 Kubernetes 集群中的 TaskRun 和 PipelineRun 执行情况。

  2. 快照创建:当 TaskRun 或 PipelineRun 完成时,控制器对其状态进行快照,包括输入、输出和执行细节。

  3. 格式转换:将快照转换为一个或多个标准负载格式(例如 in-toto 证明、SLSA 溯源)。

  4. 签名:使用配置的签名机制(X509、Cosign、KMS)对格式化的负载进行签名。

  5. 存储:将签名后的负载存储到配置的存储后端。

  6. 验证:外部工具随后可以检索并验证这些签名,以确保工件的完整性。

SLSA 溯源生成

针对 SLSA(软件工件供应链等级)溯源,Tekton Chains 会:

  1. 从 TaskRun 结果中提取输入工件(源代码、依赖项)信息
  2. 捕获构建环境和过程的详细信息
  3. 记录输出工件(容器镜像、二进制文件)信息
  4. 生成标准化的 SLSA 溯源文档
  5. 对溯源文档进行签名
  6. 将签名的溯源文档与工件一起或存储在指定位置

部署架构

Tekton Chains 作为 Kubernetes 控制器部署在集群中:

  • 命名空间:控制器运行在 tekton-chains 命名空间
  • 部署:单个 Deployment 管理控制器 Pod
  • 服务账户:控制器使用具有适当权限的专用服务账户
  • 配置:通过名为 chains-config 的 ConfigMap 管理配置
    • 默认情况下,Tekton Chains 通过 TektonConfig 资源自动部署。您可以修改 TektonConfig 资源来配置 Chains。
    • 本质上,Tekton Operator 会将 Chains 配置从 TektonConfig 资源同步到 TektonChains 资源,最终反映到 chains-config ConfigMap 中。
  • Secrets:签名密钥和凭据存储为 Kubernetes Secret

高可用性考虑

Tekton Chains 控制器支持水平扩展以实现高可用性:

  • 可部署多个副本以实现冗余
  • 通过 Leader election 确保一次只有一个实例处理事件
  • 状态通过 Kubernetes 资源维护,实现无缝故障切换

集成点

Tekton Chains 与多个外部系统集成:

  • Tekton Pipelines:监听 Tekton Pipelines 的 TaskRun 和 PipelineRun
  • OCI Registries:将签名和证明与容器镜像一起存储
  • Key Management Systems:集成多种 KMS 提供商,实现安全密钥管理
  • Transparency Logs:可将证明发布到如 Rekor 的透明日志
  • Verification Systems:提供可被 Kyverno、OPA 或 Cosign 等系统验证的签名

该架构使 Tekton Chains 能够在保持部署和配置灵活性的同时,提供全面的供应链安全功能。