Authentication for Chains

目录

Overview

必须设置认证以利用 Chains 中的以下功能:

  • 在对镜像签名后将签名推送到 OCI 注册表
  • 使用 Fulcio 获取签名证书以实现无密钥签名

OCI Registry Authentication

要推送到 OCI 注册表,Chains 控制器将在两个位置查找凭据:

  1. 执行您的 Task 的 pod 中
  2. 配置为运行您的 Task 的 service account 中

Creating Registry Credentials

Create a Secret based on existing credentials

如果您已经运行过 docker login,可以将存储在 config.json 中的凭据复制到 Kubernetes。

NOTE

确保没有使用任何外部凭据存储,例如操作系统的本地钥匙串,并且 config.json 格式如下:

{
 "auths": {
   "<registry>": {
     "auth": "redacted"
   }
 }
}

使用 config.json 创建 secret:

kubectl create secret generic docker-registry \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson \
    -n $NAMESPACE

Create a Secret by providing credentials on the command line

首先,您需要获取注册表的凭据(在此示例中存储在名为 credentials.json 的文件中)。然后,创建一个 Docker config 类型的 Kubernetes secret:

kubectl create secret docker-registry registry-credentials \
  --docker-server=<gcr.io> \
  --docker-username=<username> \
  --docker-email=<email> \
  --docker-password=<password> \
  -n $NAMESPACE

设置 config.json

$ DOCKER_CONFIG=$(kubectl get secret -n $NAMESPACE $REGISTRY_CREDENTIALS -o jsonpath='{.data.\.dockerconfigjson}')
$ kubectl patch secret -n $NAMESPACE $REGISTRY_CREDENTIALS -p "{\"data\":{\"config.json\":\"$DOCKER_CONFIG\"}}"

Setting up credentials using the pod

Using Pod Template

Tekton 支持指定 Pod 模板以自定义运行 Task 的 Pod。您必须在使用 cli 启动 Task 或将其嵌入 TaskRun 时提供 Pod 模板。

下面是一个配置了 registry-credentials secret 的 TaskRun 示例:

apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: mytaskrun
  namespace: default
spec:
  taskRef:
    name: mytask
  podTemplate:
    imagePullSecrets:
    - name: registry-credentials

Using ServiceAccount

授予 service account 访问 secret 的权限:

kubectl patch serviceaccount $SERVICE_ACCOUNT_NAME \
  -p "{\"secrets\": [{\"name\": \"registry-credentials\"}]}" -n $NAMESPACE

现在,Chains 对运行在 service account $SERVICE_ACCOUNT_NAME 下的任何 TaskRuns 拥有推送权限。

TIP

ServiceAccount 的 imagePullSecrets 属性中的 secrets 也会被考虑,但其他 Tekton 组件可能不会如此。推荐使用 secrets 属性的方式。

Fulcio Authentication for Keyless Signing

NOTE
  • 此方法要求环境能够访问互联网。
  • 如果您已部署私有的 Fulcio 服务,也可以通过调整相关配置来使用这些功能。
  • 部署私有 Fulcio 服务不在本文档范围内,请参考相关文档。

Basic Configuration

默认部署假设安装在 EKS 或 GKE 集群中,将使用公共 Fulcio。您只需在 tekton-chains 命名空间的 chains-config ConfigMap 的 data 部分添加以下内容:

signers.x509.fulcio.enabled: "true"

Custom Fulcio Endpoint

如果您运行自己的 Fulcio 实例,需要为此配置 Fulcio。您还需要通过向 chains-config 添加以下内容来指向您的 fulcio 实例:

signers.x509.fulcio.address: <"http://fulcio.fulcio-system.svc">

References