在Openshift中,如何使用CLI使用环境变量创建新的构建,该变量的值是秘密?

时间:2020-07-22 16:05:30

标签: docker kubernetes openshift redhat

我有以下命令。

oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
  --source-secret='privatekey' \
  --name='testbuild' \
  --env=KEY=VALUE

我想将环境变量设置为具有一些秘密值,因为如果没有这些值,构建将失败,并且由于新的构建会立即构建新的容器,因此我需要在执行此命令之前执行此操作。

1 个答案:

答案 0 :(得分:1)

从Pod定义中添加

您可以这样引用环境定义中的秘密来创建环境变量:

apiVersion: v1
kind: Pod
metadata:
  name: secret-example-pod
spec:
  containers:
    - name: secret-test-container
      image: busybox
      command: [ "/bin/sh", "-c", "export" ]
      env:
        - name: TEST_SECRET_USERNAME_ENV_VAR
          valueFrom:
            secretKeyRef:
              name: test-secret
              key: username
  restartPolicy: Never

这里是documentation


从命令行添加机密

如果您需要从命令行执行所有操作,则可以使用JSONPath这样从所需的机密获取值:

oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
  --source-secret='privatekey' \
  --name='testbuild' \
  -e PRIVATE_KEY=$(oc get secret <your secret> -o jsonpath='{<path to field>}')

说明

这将在构建容器时将PRIVATE_KEY添加到容器的环境中,并在启动时可供应用程序使用。

OC命令周围的$()获取密码将在内部评估该命令,然后将其输出放在此处。

-o标志告诉OC CLI如何提供输出,因此,例如,如果您仅想要构建的名称,则可以运行:

oc get builds -o name

Here是受支持的输出选项。

示例

您需要将JSONPath提供给您要从秘密中提取的字段。例如,要从此机密获取密码字段:

apiVersion: v1
kind: Secret
metadata:
  name: test-secret
  namespace: my-namespace
type: Opaque 
data: 
  username: dmFsdWUtMQ0K 
  password: dmFsdWUtMg0KDQo=
stringData: 
  hostname: myapp.mydomain.com 

您将运行:

oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
  --source-secret='privatekey' \
  --name='testbuild' \
  -e PASSWORD=$(oc get secret test-secret -o jsonpath='{.data.password}')

这与在命令中添加-e PASSWORD='dmFsdWUtMg0KDQo='相同,容器中的应用程序将能够从容器的环境访问该变量。

这是使用JSONPath的documentation,如果无法正确找到路径,则使用evaluator

添加构建机密

您还可以使用--build-secret标志向构建环境添加机密,而无需将其暴露于环境中。

命令:

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

这会将密钥添加到构建环境中的目录中,在这种情况下,.npmrc文件已添加到/ etc。

我认为向环境添加秘密通常不是一个好习惯,并且您可能希望研究更改设置以避免这种情况。过去,我总是在模板定义中添加机密信息,但是看起来您是在让Openshift为您创建模板。