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



我有以下命令。

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

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

从Pod Definition添加

您可以通过引用环境定义中的机密来创建环境变量,如下所示:

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

这是文件。


从命令行添加机密

如果您需要从命令行执行所有操作,可以使用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

以下是支持的输出选项。

示例

您需要向要从机密中提取的字段提供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的文档,如果您在正确获取路径时遇到问题,请提供评估器。

添加生成机密

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

命令:

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

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

我认为在环境中添加秘密通常不是一个好的做法,你可能需要考虑改变你的设置来避免这种情况。在过去,我总是在模板定义中添加秘密,但看起来你是在让Openshift为你创建模板。

最新更新