【问题标题】:How to link secret to default pipeline ServiceAccount in an OpenShift template?如何将秘密链接到 OpenShift 模板中的默认管道 ServiceAccount?
【发布时间】:2021-01-18 10:07:47
【问题描述】:

目前我正在尝试确保默认管道帐户能够在 Tekton 管道中执行 git-clone ClusterTask。使用以下 yaml,可以成功执行任务(repo 被拉取):

apiVersion: v1
kind: ServiceAccount
metadata:
  name: pipeline
secrets
  - name: git-secret

但是,当我在 OpenShift 模板中使用相同的配置时,例如:

apiVersion: v1
kind: Template
metadata:
  name: test-template
objects:
  - apiVersion: v1
    kind: Secret
    type: kubernetes.io/ssh-auth
    metadata:
      name: git-secret
      annotations:
        tekton.dev/git-0: bitbucket.org
    data:
      ssh-privatekey: ${GIT_SSH_KEY}

  - apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pipeline
    secrets
      - name: git-secret

密钥未与 ServiceAccount 链接,因此拉取失败。我试图给秘密提供以下注释:

kubernetes.io/service-account.name: pipeline

但这也无济于事。在模板中创建新的 ServiceAccount(例如pipeline-with-secret)时,一切正常。此外,当手动链接秘密时,它也很有效。但是,我希望模板正确设置链接以避免手动进行链接。这让我想知道:是否可以将秘密链接到默认创建的 ServiceAccount?

OpenShift 版本:4.5.19

谢谢。

【问题讨论】:

    标签: openshift tekton


    【解决方案1】:

    你快到了,

    问题是你错过了参数,请看我下面的最后一节:

    apiVersion: v1
    kind: Template
    metadata:
      name: test-template
    objects:
      - apiVersion: v1
        kind: Secret
        type: kubernetes.io/ssh-auth
        metadata:
          name: git-secret
          annotations:
            tekton.dev/git-0: bitbucket.org
        data:
          ssh-privatekey: ${GIT_SSH_KEY}
    
      - apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: pipeline
        secrets
          - name: git-secret
    parameters:
    - name:  GIT_SSH_KEY
      displayName: SSH Private Key
      description: SSH Private key to use for openshift pipelines
      required: true
      value: ssh-private-key...
    

    请参阅Templates Parameters section here。

    说实话,我讨厌模板,更喜欢 helm 作为标准。

    【讨论】:

    • 感谢您的回复。我已经在我的模板中定义了参数,只是忘记将它添加到我帖子中的示例中。不幸的是,即使定义了参数,它也不能像我预期的那样工作。秘密被创建。当我将它命名为 test-pipeline 并且秘密得到正确链接时,就会创建 ServiceAccount。当我想更新现有的默认管道 ServiceAccount 时,它只是不起作用。一定会看看 Helm 模板。
    • 您可以尝试为秘密添加注释为template.alpha.openshift.io/wait-for-ready: "true"(通常这适用于其他对象,不确定它是否适用于秘密,但值得一试。我认为秘密是创建 SA 时未准备好,这会导致它失败)
    • 好建议!我尝试在密钥和 ServiceAccount 上添加 wait-for-ready 注释(单独尝试)。不幸的是,该秘密仍未与该帐户相关联。我想我会创建一个新的 ServiceAccount,暂时不使用默认管道。奇怪的是,这样就可以了。 Helm 似乎是未来的可靠选择。
    • Redhat 建议在模板中的顺序具有“依赖关系”时使用管道。或者添加 wait-for-ready 注释,但这仅限于几个对象,不幸的是,我可以看到不适用于 SA 对象(仅适用于 Build、BuildConfig、Deployment、DeploymentConfig、Job , 或StatefulSet; 一个肮脏的解决方案可能就像设置一个创建秘密然后是 SA 的工作 - 正如所说的dirtyyyy)。我的建议绝对是 Helm。更简单、更漂亮的解决方案,也适用于其他 k8s 环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2018-12-26
    • 2012-02-13
    • 2021-04-11
    相关资源
    最近更新 更多