28

我从不同的文件创建了多个秘密。我想将它们全部存储在 common 目录中/var/secrets/。不幸的是,我无法做到这一点,因为 kubernetes在 pod 验证步骤中抛出“无效值:“/var/secret”:必须是唯一错误。下面是我的 pod 定义的示例。

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

4 回答 4

46

预计数量

您可以使用投影卷在同一目录中拥有两个机密

例子

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
于 2019-11-27T23:16:39.670 回答
5

(编辑:没关系 - 我刚刚注意到@Jonas 之前给出了相同的答案。+1 来自我)

从 Kubernetes v1.11+ 开始,可以使用projected卷:

投影卷将多个现有卷源映射到同一目录中。

目前,可以投影以下类型的音量源:

  • 秘密
  • 向下API
  • 配置映射
  • 服务帐户令牌

这是“...如何使用投影卷将多个现有卷源挂载到同一目录”的示例。

于 2019-11-28T01:09:52.843 回答
1

可能是 subPath (使用 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

在这里,您的 configMap 命名config-map-redis从作为文件redis.yaml挂载的文件创建。还将 configMap挂载为app/config/redis.yamlconfig-map-appapp/config/app.yaml

这里有一篇很好的文章:Injecting multiple Kubernetes volumes to the same directory

于 2021-06-29T12:55:08.843 回答
0

编辑: @Jonas 答案是正确的!

但是,如果您像我在问题中那样使用卷,简短的回答是您不能这样做,您必须指定mountPath一个未使用的目录 - 卷必须是唯一的并且不能安装到公共目录。

解决方案: 我最后所做的是,我将文件保存在单独的秘密中,而是创建了一个包含多个文件的秘密。

于 2019-11-27T22:30:46.550 回答