首页 > 解决方案 > 如何更改 configmap 数据的用户?

问题描述

我创建了以非 root 用户运行的映像,但是当我将 configmap 用于卷时,卷附带的文件是 root 用户。我想更改用户,但我不知道如何更改用户。

我从谷歌和stackoverflow搜索,但我一无所获。

   volumeMounts:
      - name: test
        mountPath: /opt/KOBIL/SSMS/home/configutil
  volumes:
    - name: test
      configMap:
        name: slaveconfig




Actual:
lrwxrwxrwx. 1 root root 17 May 21 12:53 config.xml -> ..data/config.xml
lrwxrwxrwx. 1 root root 18 May 21 12:53 modules.xml -> ..data/modules.xml

Expected:
lrwxrwxrwx. 1 xxuser xxuser 17 May 21 12:53 config.xml -> ..data/config.xml
lrwxrwxrwx. 1 xxuser xxuser 18 May 21 12:53 modules.xml -> ..data/modules.xml

标签: kubernetesconfigmap

解决方案


当您必须以非 root 用户身份在容器内运行进程时,这是 Kubernetes 部署/状态集的挑战之一。但是,当您将卷挂载到 pod 时,它总是在 root:root 的权限下挂载。因此,非 root 用户必须有权访问要读取和写入数据的文件夹。

请按照以下步骤进行操作。

在 Dockerfile 中创建用户组并分配 groudID。使用 userid 创建用户并添加到 Dockerfile 中的组。递归更改用户进程想要读/写的文件夹的所有权。在 pod 规范上下文中的 deployment/Statefulset 中添加以下行。

规格:securityContext:runAsUser:1099 runAsGroup:1099 fsGroup:1099

runAsUser:指定对于 Pod 中的任何 Container,所有进程都以用户 ID 1099 运行 runAsGroup:指定 Pod 中任何容器内的所有进程的主组 ID 为 1099。(如果省略此字段,则该字段的主组 ID容器将是 root(0),当指定 runAsGroup 时,创建的任何文件也将归用户 1099 和组 1099 所有非根组:非根组。


推荐阅读