我创建的映像运行与非根用户,但当我使用configmap的卷,文件来与卷是根用户。我想更改用户,但我不知道如何更改用户。
我从谷歌和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
字符串
2条答案
按热度按时间57hvy0tb1#
这是Kubernetes部署/statefulsets面临的挑战之一,当你必须以非root用户的身份在容器内运行进程时。但是,当您将卷挂载到pod时,它总是使用root:root的权限挂载。因此,非root用户必须有权访问要读写数据的文件夹。
请按照以下步骤进行相同操作。
在Dockerfile中创建用户组并分配groudID。使用userid创建用户并添加到Dockerfile中的组。递归地改变用户进程想要读/写的文件夹的所有权。在pod spec上下文中的deployment/Statefulset中添加以下行。
字符串
runAsUser
:指定Pod中的所有容器,所有进程都以用户ID 1099运行runAsGroup
:为Pod中任意容器内的所有进程指定主组ID为1099。(如果省略此字段,则容器的主组ID为root(0),当指定runAsGroup时,创建的任何文件也将归用户1099和组1099所有)fsGroup
:指定任何附加卷的所有者将是GroupId 1099的所有者,并且在其下创建的任何文件将具有nonrootgroup:nonrootgroup的权限。bkhjykvo2#
为了防止在root用户下创建
configMap
指定的文件(无论容器用户ID如何,使用securityContext.runAsUser
指定,configMap
在创建文件时忽略并默认为root用户),您可以使用configMap.defaultMode
将运行时配置文件的默认权限设置更改为a+rwx
(0777):字符串
不幸的是,ConfigMaps上的k8s文档忽略了这个关键的细节,从这篇Github帖子中可以看出,这个设置必须从Secrets转移过来(参见文档)。
该文件仍将由root用户创建(
securityContext.runAsUser
仍将被忽略),但所有用户的权限将更改为rwx
,例如jupyter_notebook_config.py
文件的OpenEBS Hostpath(其中Jupyter Notebook需要具有写入权限):型