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

时间:2018-10-02 14:07:27

标签: openshift

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

我已经为OpenShift的Source构建策略(sourceStrategy)找到了documented example,但是在使用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建立了一个关系数据库(在其ENTRYPOINT脚本中),并且需要为三个角色配置密码,而这些密码应该来自秘密。

1 个答案:

答案 0 :(得分:1)

这是我的错误:env应该作为dockerStrategy的子对象(而不是兄弟姐妹)驻留在模板中(如oc explain的引用路径所建议的那样)。现在,我已修复此问题,因此所需的部件现在同时显示在模板和构建配置中。