kubernetes - 更改安装在投影卷上的 kubernetes secret 文件的默认文件所有者和组所有者

标签 kubernetes mounted-volumes kubernetes-secrets

我是 K8S 的新手。我有一个 yaml 文件,它生成安装在投影卷上的 kubernetes secret 。执行后,我发现 secret 文件(与 secret 一起打包)将“root”显示为文件所有者和组所有者。我想将文件所有者和组所有者更改为同一特定用户(比如 450)。

我曾尝试使用 init 容器中的“chown”(尝试过但失败),但出现“只读文件系统”错误并且无法修改文件和组所有者。
我不想在安全上下文下使用“fsGroup”。我观察到,当使用 fsGroup 时,“items”下的“mode:”选项以不可预测的方式运行。

有没有办法修改通过投影卷挂载的 kubernetes secret 文件的默认文件和组所有者?

我提供了下面的示例代码。假设我想在下面的示例中更改“密码”文件(在“mysecret2”下)的文件和组所有者。如何实现呢?

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox
    volumeMounts:
    - name: all-in-one
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: all-in-one
    projected:
      sources:
      - secret:
          name: mysecret
          items:
            - key: username
              path: username
      - secret:
          name: mysecret2
          items:
            - key: password
              path: password
              mode: 511

最佳答案

据我所知,无法更改 secret 的所有者 UID。

解决方法是将 secret 复制到普通文件,然后更改其所有权和模式,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
spec:
  containers:
  - name: container-test
    image: busybox
    command: |
      - "/bin/bash"
      - "-exc"
        cp /etc/secrets-mount/*_pgpass /etc/secrets
        chown my-user /etc/*_pgpass
        chmod 600 /etc/*_pgpass
        exec su-exec my-user /entrypoint.sh
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets-mount/

....

关于kubernetes - 更改安装在投影卷上的 kubernetes secret 文件的默认文件所有者和组所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945437/

相关文章:

azure - 如何在 Azure AKS 混合群集上为 RabbitMQ 指定节点选择器

docker - 孤立的 Docker 安装的主机卷?

mongodb - Windows Docker mongo 容器不适用于卷安装

kubernetes - K8S - RoleBinding - 无法从服务帐户 cert-manager-webhook-ovh 访问 secret

kubernetes - Kubernetes在所有集群上更改kubelet配置

kubernetes - 如何确定 Tomcat 应用程序所需的Openshift Pod的资源限制?

kubernetes - 如果我更新一个 secret ,它会自动更新到它卷挂载的所有资源吗?

configmap - 在 Golang K8s 客户端中设置 ConfigMapRef 和 SecretRef 以进行部署

kubernetes - 如何使用 java 在我的集群中找到所有 HelmRelease?

jenkins - 在Kubernetes中挂载持久 “dynamic”文件的解决方案