我是Kubernetes的新手(我们都不是吗?)。
由容器和值组成的Secret可以在容器使用时表示为单个文件吗?
我理解通常一个秘密,当mounted by a container时,本质上是一个目录。我想知道是否有一些我缺少的语法糖或其他构造可以代表它,例如,一个Java Properties
文件,其密钥将是秘密的密钥,其值将是秘密的值
答案 0 :(得分:1)
目前无法做到这一点。解决这个问题的唯一方法是使用一个键值对,其中值是base64编码的JSON对象。
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
conf.json: eyJrZXkiOiAidmFsdWUiLCAia2V5MiI6ICJ2YWx1ZTIifQ==
conf.json
值只是:
echo -n '{"key": "value", "key2": "value2"}' | base64
答案 1 :(得分:0)
对于其他访问者,现在可以使用stringData
定义的Secret
字段来实现。
因此,在此示例中,我有一个秘密,名为environment-secrets
。此密钥包含一个名为env.yml
的密钥,它本身是一个YAML文件,其中包含许多key=value
配对。我想将此秘密安装在/credentials/env/env.yml
的豆荚上。
首先,我在一个名为environment-secret.yml
的文件中为秘密定义对象定义:
- kind: Secret
apiVersion: v1
metadata:
name: environment-secret
type: Opaque
stringData:
env.yml: |-
db_host=my-db.host
db_user=db-user
db_password=db-pass
然后,我使用kubectl create -f environment-secret.yml
创建密码。创建后,env.yml
stringData
字段中的值将转换为密钥的env.yml
字段中的data
条目。
接下来,我更新我的PodSpec
,以将机密安装在所需的位置。因此,我首先将秘密定义为卷:
volumes:
- name: environment-secret
secret:
optional: false
secretName: environment-secret
然后更新mountPoints
,以将此秘密安装在我的容器中的首选位置:
volumeMounts:
- mountPath: /credentials/env
name: environment-secret
此后,我在/credentials/env/env.yml
的容器上有一个文件,其中包含我的key=value
对。