一个秘密可以表示为单个文件吗?

时间:2017-04-19 15:59:01

标签: kubernetes

我是Kubernetes的新手(我们都不是吗?)。

由容器和值组成的Secret可以在容器使用时表示为单个文件吗?

我理解通常一个秘密,当mounted by a container时,本质上是一个目录。我想知道是否有一些我缺少的语法糖或其他构造可以代表它,例如,一个Java Properties文件,其密钥将是秘密的密钥,其值将是秘密的值

2 个答案:

答案 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对。