将输入密码安装到OpenShift构建配置中

时间:2018-08-14 22:59:49

标签: openshift

我有一个OpenShift 3.9构建配置my_bc和类型my_secret的秘密kubernetes.io/ssh-auth。秘密是这样创造的:

oc create secret generic my_secret \
  --type=kubernetes.io/ssh-auth \
  --from-file=key

我已将其作为源秘密安装到my_bc中,并且oc get bc/my_bc -o yaml揭示了此规范:

source:
  contextDir: ...
  git:
    uri: ...
  sourceSecret:
    name: my_secret
  type: Git

就此而言,从OpenShift构建器可以从我的私有Git存储库中提取并使用其Docker策略生成映像的角度来看,这已经很有效。

我现在想将my_secret也作为输入密码添加到my_bc。我的理解是,这不仅将允许构建器使用它(作为源秘密),而且还将允许构建中的其他组件也将其拾取(作为输入秘密)。例如。对于Docker策略,它将存在于WORKDIR中。

documentation通过一个示例来说明这一点,该示例在创建构建配置时添加输入密码:

oc new-build \
  openshift/nodejs-010-centos7~https://github.com/openshift/nodejs-ex.git \
  --build-secret secret-npmrc

现在,相应的规范引用了secrets下的机密(不是:sourceSecret),大概是因为它现在是输入机密(不是:源机密)。

source:
  git:
    uri: https://github.com/openshift/nodejs-ex.git
  secrets:
  - destinationDir: .
    secret:
      name: secret-npmrc
  type: Git

oc set build-secret显然允许向带有命令行参数--source(以及{{}的构建配置)添加源秘密(以及推和拉秘密-这些是与容器注册表交互的)。 1}} / --push),但是输入机密呢?我还没找到。

所以我有这些问题:

  1. 如何将--pull作为输入密码添加到现有构建配置(例如my_secret)中?

  2. 输入密码会在构建时显示在哪里,例如my_bc在哪个路径下可以提取存储在Dockerfile中的私钥?

2 个答案:

答案 0 :(得分:2)

此过程现在对我有用(感谢@GrahamDumpleton的指导):

  1. 现在将构建配置的源秘密保留下来; get bc/my_bc -o jsonpath='{.spec.source.sourceSecret}'个报告map[name:my_secret](无路径)
  2. 添加输入密码以使用.spec.source.secrets对应的YAML在oc explain bc.spec.source.secrets处进行配置:oc edit bc/my_bc
  3. 健全性检查:oc get bc/my_bc -o jsonpath='{.spec.source.secrets}'报告[map[destinationDir:secret secret:map[name:my_secret]]]oc describe bc/my_bc | grep 'Source Secret:'报告Source Secret: my_secret(无路径),oc describe bc/my_bc | grep "Build Secrets:"报告Build Secrets: my_secret->secret
  4. 以初步方式访问Dockerfile内部的机密:COPY secret/ssh-privatekey secret/my_secretRUN chmod 0640 secret/my_secret;如有必要,请调整ssh-privatekey(根据oc get secret/my_secret -o jsonpath='{.data}' | sed -ne 's/^map\[\(.*\):.*$/\1/p'的建议)
  5. 重建并重新部署图像
  6. 健全性检查:oc exec -it <pod> -c my_db file /secret/my_secret报告/secret/my_secret: PEM RSA private key(图片的WORKDIR/

答案 1 :(得分:0)

在对该问题的注释中,提到了修补BuildConfig。这是适用于v3.11.0的补丁:

$cat patch.json
{
    "spec": {
        "source": {
            "secrets": [
                {
                    "secret": {
                        "name": "secret-npmrc"
                    },
                    "destinationDir": "/etc"
                }
            ]
        }
    }
}
$ oc patch -n your-eng bc/tag-realworld -p "$(<patch.json)"
buildconfig "tag-realworld" patched