我有以下命令。
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为你创建模板。