如何在Kubernetes的公共目录中挂载多个文件/秘密?

时间:2019-11-27 22:30:46

标签: kubernetes kubernetes-secrets

我有不同文件创建的多个机密。我想将它们全部存储在公用目录/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

如何将来自多个机密的文件存储在同一目录中?

4 个答案:

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