IBM Cloud Docs
使用具有外部化属性的 Delivery Pipeline Tekton 管道

使用具有外部化属性的 Delivery Pipeline Tekton 管道

您可以运行包含未随 Delivery Pipeline一起存储的管道属性的管道。 通过使用这些外部化属性,您可以在 Git 存储库 (存储库) 中管理管道环境属性,并使用版本控制和跟踪。

在管道外部化后,根据为管道配置的触发器,管道以相同方式运行。 当属性名称和属性类型匹配时,通过管道 UI 外部化和指定的任何属性的值将被 UI 中的值覆盖。

配置管道以使用外部化属性

最新的专用工作程序代理程序版本本机支持外部属性。 此支持使用 KustomizeExternal Secrets,并且需要配置为使用外部属性的管道。

从 Kubernetes V 1.14起,Kustomize 包含在 Kubernetes 中,以通过使用 yaml 文件提供集群配置和 Kubernetes 对象创建的声明式方法。 要使用外部化属性,管道需要 kustomization.yaml 文件。

通过使用“外部私钥”操作程序,可以将来自外部 API 的私钥与 Kubernetes 私钥同步。 受支持的提供程序包括 IBM Cloud® Secrets Manager。 通过使用操作程序,可以表示存储在存储库中的 yaml 文件 (例如 Git) 中的私钥和提供程序。 要使用外部化安全属性,管道定义必须提供同时定义 SecretStoreExternalSecretyaml 文件。

配置集群

具有外部化环境属性的管道在 管道专用工作程序安装 (V 0.14.9 或更高版本) 或 IBM提供的受管工作程序上受支持。

如果您正在使用自己的专用工作程序,那么必须在托管该工作程序的集群上运行以下命令。

kubectl set env deployment/private-worker-agent -n tekton-pipelines ENABLE_CDPR="true"

有关专用工作程序安装在集群上放置的映像的更多信息,请参阅 管道专用工作程序映像

配置管道

要设置管道以使用外部属性,必须指定两组属性: 基本属性触发器属性

基本属性 表示跨触发器运行的全局属性和私钥的集合。 您可以在 Tekton 管道的“环境属性”页面上指定的设置中找到这些值。

触发器属性 是在单个触发器上指定的属性和私钥。 属性优先顺序表示触发属性覆盖相同名称的基本属性。 虽然每个管道只有一组基本属性,但您可以具有许多不同的触发器属性集。

管道 UI 中具有相同名称的属性将覆盖任何外部化属性。

建议您通过将基本属性存储在 Git 存储库 (存储库) 内的单个文件夹中,并将每个触发器私钥存储在其自己的单独文件夹中,来分隔基本属性和私钥。

基本属性

基本属性文件夹必须包含以下文件:

  • .cdexternalpropbase: 将当前目录标记为包含外部化基本属性的空文件。
  • environment-properties.env: 密钥值对中非安全管道属性的外部化表示。
  • kustomization.yaml:YAML 文件,用于从环境属性生成 configmap,并标识目录中定义的私钥库和外部私钥。
  • external-secret-store.yaml: 外部密钥库的外部密钥定义,例如 HashiCorp Vault。 您可以有多个由不同私钥使用的商店。
  • external-secret.yaml: 存储在 external-secret-store.yaml 文件中定义的私钥存储库中的私钥的外部私钥定义。 您可以具有多个外部私钥。

示例

在用于包含外部化属性的存储库中完成以下步骤:

  1. 在包含现有 Tekton 资源定义的存储库中,添加名为 base 的文件夹。
  2. 将此文件夹的路径添加到管道定义。
  3. base 文件夹中,添加 .cdexternalpropbaseenvironment-properties.envkustomization.yamlexternal-secret-store.yamlexternal-secret.yaml 文件。
  4. 更新这些文件以匹配要外部化的属性。

示例外部化 environment-properties.env 文件

## Pipeline Environment Properties: base/environment-properties.env
REGION=eu-de
BRANCH=main
CLUSTER_NAMESPACE=default
pipeline-debug=0

示例外部化 kustomization.yaml 文件

## Pipeline Kustomize file: base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
  devops.cloud.ibm.com/cd: kustomize
generatorOptions:
  disableNameSuffixHash: true
resources:
  - external-secret.yaml
  - external-secret-store.yaml
configMapGenerator:
  - name: environment-properties
    envs:
      - environment-properties.env

示例外部化 external-secret-store.yaml 文件

## Pipeline HashiCorp vault secret store: base/external-secret-store.yaml
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: hv-vault-backend
spec:
  provider:
    vault:
      server: "https://VAULT:PORT"
      path: ""
      version: "v1"
      auth:
        appRole:
          path: "approle"
          roleId: "12345678-1234-1234-1234-123456789012"
          # Reference to a key in a K8 Secret that contains the App Role SecretId
          secretRef:
            name: "secure-properties"
            key: "vault_secret_id"

示例外部化 external-secret.yaml 文件

## Pipeline secure property stored externally: base/external-secret.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: "my-external-secret"
spec:
  secretStoreRef:
    name: hv-vault-backend
    kind: SecretStore
  refreshInterval: "0s"
  target:
    name: mysecrets
    creationPolicy: "Owner"
    deletionPolicy: "Delete"
  data:
  - secretKey: API_KEY
    remoteRef:
      key: VAULT/PATH/my-ibmcloud-apikey
      property: value

触发器属性

确保管道中的每个外部化触发器都有自己的触发器属性文件夹,其中包含要用于该触发器的属性和外部私钥。

每个触发器属性文件夹都必须包含以下文件:

  • .cdexternalproptrigger: 将当前目录标记为包含触发器属性的文件。 此文件必须具有具有触发器名称的 JSON 对象,如以下示例中所示。

    {
        "triggerName" : "Deploy - External"
    }
    
  • trigger-properties.env: 键值对中非安全管道属性的外部化表示。

  • kustomization.yaml:YAML 文件,用于从触发器属性生成 configmap,并标识目录中定义的私钥库和外部私钥。

  • external-secret.yaml: 基本文件夹中定义的私钥的外部私钥定义。

示例

在用于包含外部化属性的存储库中完成以下步骤:

  1. 在包含外部化属性的存储库中,添加具有唯一名称的文件夹,例如 trigger[#]
  2. 将此文件夹的路径添加到管道定义。
  3. base 文件夹中,添加 .cdexternalproptriggertrigger-properties.envkustomization.yamlexternal-secret.yaml 文件。
  4. 更新这些文件以匹配要外部化的属性。

配置根密钥

要使用外部私钥,必须至少配置一个私钥库。 此私钥库需要其自己的访问私钥,名为 根私钥

必须将此根私钥作为安全属性添加到要外部化的管道的“环境属性”页面中指定的设置。 根私钥名称必须与 SecretStore 定义中指定的 secretRef.key 值匹配,例如 vault_secret_id