我来自Windows操作系统,对Linux的了解有限。
根据Microsoft文档
为使您的应用程序正确运行,pod应该以定义的用户或组而不是root身份运行。通过pod或容器的securityContext,可以定义诸如runAsUser或fsGroup之类的设置以采用适当的权限。仅分配所需的用户或组权限,而不使用安全上下文作为获取其他权限的方法。 runAsUser,特权升级和其他Linux功能设置仅在Linux节点和Pod上可用。
他们提供了以下示例
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
fsGroup: 2000
containers:
- name: security-context-demo
image: nginx:1.15.5
securityContext:
runAsUser: 1000
allowPrivilegeEscalation: false
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
根据给定的描述,我了解到pod没有获得root访问权限,并且没有获得对网络和时间的有限访问。
runAsUser: 1000
和fsGroup: 2000
是什么意思?如何设置fsGroup
?
答案 0 :(得分:2)
runAsUser: 1000
字段指定对于Pod中的任何容器,所有进程都以用户ID 1000
fsGroup: 2000
指定容器的所有进程也是补充组ID 2000
的一部分。此组ID与安装在容器中的emptyDir
卷以及创建的任何文件相关联在那个数量。您应该记住,只有某些卷类型允许kubelet更改要由Pod拥有的卷的所有权。如果卷类型允许使用此卷(作为emptyDir
卷类型),则拥有组ID将为fsGroup
。
fsGroup
要记住的一件事是,当您尝试从主机挂载文件夹时。当Docker装载主机卷并保留来自主机的UUID和GUID时,可能会在Docker卷中出现权限问题。运行该容器的用户可能没有适当的特权来写入该卷。
可能的解决方案是使用与主机相同的UUID和GUID运行容器,或者在将主机文件夹安装到容器之前更改主机文件夹的权限。
有关fsGroup
的更多详细信息,请参见docs