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

注意:上述图示展示了 Tekton Chains 的高层架构。实际实现可能会根据配置有所不同。
核心组件
Tekton Chains 控制器
Tekton Chains 控制器是架构的核心组件。它作为一个 Kubernetes 控制器运行,负责以下功能:
- 监控集群中的 TaskRun 和 PipelineRun 完成情况
- 对已完成的 TaskRuns 和 PipelineRuns 进行快照
- 处理这些快照以生成加密签名和证明
- 将签名和证明存储在配置的存储后端中
该控制器作为一个 Kubernetes 部署运行在 tekton-chains
命名空间中,负责 Tekton Chains 的所有核心功能。
签名组件
Tekton Chains 支持多种签名机制,以提供工件保护的灵活性:
- X509 签名器:使用 X509 证书对工件进行签名
- Cosign 签名器:与 Cosign 集成进行容器镜像签名
- KMS 签名器:支持多种密钥管理系统:
- GCP KMS
- AWS KMS
- Azure KMS
- HashiCorp Vault
这些签名组件负责对 Tekton Chains 生成的工件和证明进行加密签名。
存储组件
Tekton Chains 可以在多种后端中存储签名和证明:
- Tekton 存储:将签名作为 TaskRun 或 PipelineRun 对象的注释存储
- OCI 存储:在 OCI 兼容的注册表中将签名和证明与容器镜像一起存储
- GCS 存储:在 Google Cloud Storage 存储桶中存储签名和证明
- DocDB 存储:在文档数据库(例如 MongoDB、Firestore)中存储签名和证明
- Grafeas 存储:在 Grafeas 服务器中存储签名和证明
数据流
Tekton Chains 的数据流遵循以下步骤:
-
观察:Chains 控制器观察 Kubernetes 集群中的 TaskRun 和 PipelineRun 执行情况。
-
快照创建:当 TaskRun 或 PipelineRun 完成时,控制器会对其状态进行快照,包括输入、输出和执行细节。
-
格式转换:快照被转换为一个或多个标准负载格式(例如,in-toto 证明,SLSA 来源)。
-
签名:使用配置的签名机制对格式化的负载进行签名(X509、Cosign、KMS)。
-
存储:将签名的负载存储在配置的存储后端中。
-
验证:外部工具可以稍后检索并验证这些签名,以确保工件的完整性。
SLSA 来源生成
对于 SLSA(软件工件供应链级别)来源,Tekton Chains:
- 从 TaskRun 结果提取输入工件(源代码、依赖项)的信息
- 捕获构建环境和过程的细节
- 记录输出工件(容器镜像、二进制文件)信息
- 生成标准化的 SLSA 来源文档
- 签署来源文档
- 将签署的来源文档与工件一起存储或存储在指定位置
部署架构
Tekton Chains 作为 Kubernetes 控制器部署在集群中:
- 命名空间:控制器运行在
tekton-chains
命名空间中
- 部署:单个部署管理控制器 Pods
- 服务账户:控制器使用具有适当权限的专用服务账户
- 配置:通过名为
chains-config
的 ConfigMap 管理配置
- 密钥:签名密钥和凭证作为 Kubernetes 密钥存储
高可用性考虑
Tekton Chains 控制器可以横向扩展以实现高可用性:
- 可以部署多个副本以实现冗余
- 领导者选举确保只有一个实例同时处理事件
- 通过 Kubernetes 资源保持状态,从而实现无缝故障转移
集成点
Tekton Chains 与多个外部系统集成:
- Tekton Pipelines:观察来自 Tekton Pipelines 的 TaskRuns 和 PipelineRuns
- OCI 注册表:将签名和证明与容器镜像一起存储
- 密钥管理系统:与各种 KMS 提供商集成以实现安全密钥管理
- 透明日志:可以将证明发布到诸如 Rekor 的透明日志
- 验证系统:提供可由如 Kyverno、OPA 或 Cosign 的系统验证的签名
该架构使 Tekton Chains 能够提供全面的供应链安全功能,同时保持部署和配置的灵活性。