使用Docker构建策略从OpenShift secret填充环境变量

使用Docker构建策略从OpenShift secret填充环境变量,openshift,Openshift,我想在构建pod中使用不透明的OpenShift secret作为环境变量。这个秘密包含三个键值对,因此它们应该作为三个环境变量可用。(这适用于OpenShift 3.9) 我已经找到了OpenShift的源代码构建策略(sourceStrategy),但在使用Docker构建策略(dockerStrategy)的构建配置上下文中需要它oc explain建议将秘密提取到环境变量中应与两种构建策略一起使用。到目前为止,一切顺利: oc explain bc.spec.strategy.sourc

我想在构建pod中使用不透明的OpenShift secret作为环境变量。这个秘密包含三个键值对,因此它们应该作为三个环境变量可用。(这适用于OpenShift 3.9)

我已经找到了OpenShift的源代码构建策略(
sourceStrategy
),但在使用Docker构建策略(
dockerStrategy
)的构建配置上下文中需要它
oc explain
建议将秘密提取到环境变量中应与两种构建策略一起使用。到目前为止,一切顺利:

oc explain bc.spec.strategy.sourceStrategy.env.valueFrom.secretKeyRef
oc explain bc.spec.strategy.dockerStrategy.env.valueFrom.secretKeyRef
我的构建配置是从模板创建的,因此我添加了一个类似这样的部分作为
dockerStragegy
的兄弟,其中模板引用构建配置:

  env:
  - name: SECRET_1
    valueFrom:
      secretKeyRef:
        name: my-secret
        key: role-1
  - name: SECRET_2
    valueFrom:
      secretKeyRef:
        name: my-secret
        key: role-2
  - name: SECRET_3
    valueFrom:
      secretKeyRef:
        name: my-secret
        key: role-3
秘密是这样创造的:

oc create secret generic my-secret \
  --from-literal=role-1=... --from-literal=role-2=... --from-literal=role-3=...
在上载新模板(使用
oc replace
)并重新创建应用程序以及由此生成的构建配置(使用
oc new app
)后,我观察到以下情况:

  • 模板包含预期的
    env
    (使用
    oc get template-o yaml检查)
  • 生成配置不包含所需的
    env
    (使用
    oc get bc-o yaml
    进行检查)

假设Docker构建策略的环境变量中可以提供秘密,这是什么原因?我是否正确。上下文:我的Dockerfile设置了一个关系数据库(在其
入口点
脚本中),需要为三个角色配置密码,这应该源于秘密。

这是我的错误:
env
应该作为
dockerStrategy
的子级(而不是同级)驻留在模板中(正如
oc explain
引用的路径所建议的那样)。我现在已经解决了这个问题,因此所需的部分现在显示在模板和构建配置中。

这是我的错误:
env
应该作为
dockerStrategy
的子级(而不是同级)驻留在模板中(正如
ocexplain
引用的路径所建议的那样)。我现在已经解决了这个问题,因此所需的部分现在显示在模板和构建配置中