快速入门

本指南帮助新用户快速设置 Tekton Chains,以通过生成和验证加密签名来保护他们的 CI/CD 管道。

介绍

使用场景

Tekton Chains 通过自动生成构建产物的加密签名,帮助您保护软件供应链。本快速入门示例演示如何设置 Tekton Chains、生成签名密钥、运行简单任务及验证其签名。

预计阅读时间

10-15 分钟

重要说明

  • 使用 Alauda Devops Pipelines Operator 时,Tekton Chains 默认安装在 tekton-pipelines 命名空间中
  • 签名密钥应安全管理;在生产环境中,建议使用密钥管理系统 (KMS)
  • 本指南使用最简单的配置以便于演示

先决条件

  • 一个通过 Alauda Devops Pipelines Operator 安装了 Tekton Pipelines 和 Tekton Chains 的 Kubernetes 集群
  • 已安装并配置好访问您的集群的 kubectl CLI
  • 已安装 tkn(Tekton CLI)
  • 已安装 cosign CLI(用于密钥生成和签名验证)

流程概述

步骤操作描述
1生成签名密钥创建用于签名产物的密钥对
2配置 Tekton Chains设置 Chains 使用 Tekton 存储后端
3运行示例任务创建并运行一个简单的 TaskRun
4验证签名提取并验证 TaskRun 的签名

逐步说明

第 1 步:生成签名密钥

Tekton Chains 使用加密密钥签名产物。默认情况下,它在 Chains 命名空间中查找名为 signing-secrets 的秘密。

  1. 如果尚未安装 cosign,请进行安装。

  2. 生成一对密钥并将其存储为 Kubernetes 秘密:

    cosign generate-key-pair k8s://tekton-pipelines/signing-secrets
    

    系统会提示您输入一个密码,此密码将存储在秘密中。该命令还会在当前文件夹中生成一个公钥 cosign.pub,稍后在验证过程中将使用该公钥。

  3. 验证秘密是否已创建:

    kubectl get secret signing-secrets -n tekton-pipelines
    

第 2 步:配置 Tekton Chains

默认情况下,Tekton Chains 配置为在 OCI 注册表中存储签名。为便于本快速入门,我们将其配置为将签名存储为 TaskRun 本身的注释。

  1. 配置 Chains 使用 Tekton 存储后端:

    kubectl patch configmap chains-config -n tekton-pipelines -p='{"data":{"artifacts.taskrun.storage": "tekton"}}'
    
  2. 将格式设置为 in-toto(SLSA v0.2):

    kubectl patch configmap chains-config -n tekton-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}'
    
  3. 重新启动 Chains 控制器以应用更改:

    kubectl delete pod -n tekton-pipelines -l app=tekton-chains-controller
    

第 3 步:运行示例任务

现在,让我们创建一个简单的 TaskRun,Chains 将自动对此进行签名。

  1. 创建一个简单的 Task 和 TaskRun:

    cat <<EOF | kubectl apply -f -
    apiVersion: tekton.dev/v1
    kind: Task
    metadata:
      name: hello-world
    spec:
      steps:
        - name: hello
          image: alpine
          script: |
            #!/bin/sh
            
            echo 'Hello, Tekton Chains!'
    ---
    apiVersion: tekton.dev/v1
    kind: TaskRun
    metadata:
      name: hello-world-run
    spec:
      taskRef:
        name: hello-world
    EOF
    
    TIP

    如果您在隔离环境中工作,请将镜像修改为包含 sh 的本地镜像。

  2. 等待 TaskRun 完成:

    kubectl get taskrun hello-world-run -w
    

    等待状态显示为 Succeeded

第 4 步:验证签名

TaskRun 完成后,Tekton Chains 将自动对此进行签名。让我们验证签名。

  1. 获取 TaskRun UID:

    export TASKRUN_UID=$(kubectl get taskrun hello-world-run -o jsonpath='{.metadata.uid}')
    
  2. 提取签名:

    kubectl get taskrun hello-world-run -o jsonpath="{.metadata.annotations.chains\\.tekton\\.dev/signature-taskrun-$TASKRUN_UID}" | base64 -d > signature
    
  3. 使用 cosign 验证签名:

    cosign verify-blob-attestation \
      --key cosign.pub \
      --signature signature \
      --type slsaprovenance \
      --check-claims=false \
      --insecure-ignore-tlog \
      /dev/null
    

    如果成功,您将看到 Verified OK

  4. 清理工作:

    kubectl delete taskrun hello-world-run
    kubectl delete task hello-world
    

预期结果

完成此快速入门后:

  • 您已拥有一个设置完好的 Tekton Chains 环境和签名密钥
  • 您的 TaskRuns 在完成时会自动签名
  • 您可以验证签名以确保构建的完整性

这展示了 Tekton Chains 的基本功能。在实际场景中,您会:

  1. 配置 Chains 签名容器镜像并在注册表中存储签名
  2. 在部署过程中设置验证步骤
  3. 可能使用云 KMS 进行更安全的密钥管理

有关更高级的配置,请参考 Tekton Chains 文档