我有不同文件创建的多个机密。我想将它们全部存储在公用目录/var/secrets/
中。不幸的是,我无法执行此操作,因为kubernetes会在Pod验证步骤期间抛出“无效值:“ / var / secret”:必须唯一错误。以下是我的广告连播定义的示例。
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xfile
mountPath: "/var/secrets/"
readOnly: true
- name: yfile
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xfile
secret:
secretName: my-secret-one
- name: yfile
secret:
secretName: my-secret-two
如何将来自多个机密的文件存储在同一目录中?
答案 0 :(得分:4)
您可以使用projected volume在同一目录中拥有两个秘密
示例
apiVersion: v1
kind: Pod
metadata:
labels:
run: alpine-secret
name: alpine-secret
spec:
containers:
- command:
- sleep
- "3600"
image: alpine
name: alpine-secret
volumeMounts:
- name: xyfiles
mountPath: "/var/secrets/"
readOnly: true
volumes:
- name: xyfiles
projected:
sources:
- secret:
name: my-secret-one
- secret:
name: my-secret-two
答案 1 :(得分:1)
已编辑: @乔纳斯答案是正确的!
但是,如果像我在问题中那样使用卷,则简短的回答是您不能这样做,您必须为未使用的目录指定mountPath
-卷必须是唯一,无法挂载到公共目录。
解决方案: 最后,我要做的是,而不是将文件保存在单独的秘密中,而是创建了一个包含多个文件的秘密。
答案 2 :(得分:0)
(编辑:没关系-我只是注意到@Jonas早些时候给出了相同的答案。+ 1来自我)
从Kubernetes v1.11 +开始,可以使用projected
卷:
预计的体积会将多个现有的体积源映射到同一体积 目录。
当前,可以投影以下类型的体积源:
- 秘密
- downwardAPI
- configMap
- serviceAccountToken
This is an example用于“ ...如何使用计划的卷将多个现有卷源装载到同一目录中。”
答案 3 :(得分:0)
可能 subPath (using subPath) 会有所帮助。
示例:
volumeMounts:
- name: app-redis-vol
mountPath: /app/config/redis.yaml
subPath: redis.yaml
- name: app-config-vol
mountPath: /app/config/app.yaml
subPath: app.yaml
volumes:
- name: app-redis-vol
configMap:
name: config-map-redis
items:
- key: yourKey
path: redis.yaml
- name: app-config-vol
configMap:
name: config-map-app
items:
- key: yourKey
path: app.yaml
这里您的名为 config-map-redis
的 configMap 是从文件 redis.yaml
创建的,文件 app/config/
挂载为文件 redis.yaml
。
configMap config-map-app
也安装在 app/config/
中作为 app.yaml
这里有一篇很好的文章:Injecting multiple Kubernetes volumes to the same directory