Kubernetes 部署在Google容器引擎中的非root用户的Docker容器无法写入已装入的GCE永久磁盘
我正在玩kubernetes和google容器引擎(GKE) 我从这个图像部署了一个容器 这是我的复制控制器:Kubernetes 部署在Google容器引擎中的非root用户的Docker容器无法写入已装入的GCE永久磁盘,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,我正在玩kubernetes和google容器引擎(GKE) 我从这个图像部署了一个容器 这是我的复制控制器: { "apiVersion": "v1", "kind": "ReplicationController", "metadata": { "name": "datalab-notebook" }, "spec&
{
"apiVersion": "v1",
"kind": "ReplicationController",
"metadata": {
"name": "datalab-notebook"
},
"spec": {
"replicas": 1,
"selector": {
"app": "datalab-notebook"
},
"template": {
"metadata": {
"name": "datalab-notebook",
"labels": {
"environment": "TEST",
"app": "datalab-notebook"
}
},
"spec": {
"containers": [{
"name": "datalab-notebook-container",
"image": "jupyter/all-spark-notebook",
"env": [],
"ports": [{
"containerPort": 8888,
"name": "datalab-port"
}],
"volumeMounts": [{
"name": "datalab-notebook-persistent-storage",
"mountPath": "/home/jovyan/work"
}]
}],
"volumes": [{
"name": "datalab-notebook-persistent-storage",
"gcePersistentDisk": {
"pdName": "datalab-notebook-disk",
"fsType": "ext4"
}
}]
}
}
}
}
如您所见,我安装了一个Google计算引擎持久磁盘。我的问题是,容器使用非root用户,而装载的磁盘由root所有。因此,我的容器无法写入磁盘
- 有没有办法挂载GCE持久磁盘,并使其对没有非root用户的容器进行读/写操作?
- 另一个一般性问题:在Google容器引擎中使用root用户运行容器安全吗?
提前感谢您的输入您可以使用pod安全上下文的FSGroup字段使GCE PDs可由非root用户写入 在本例中,gce卷将由组1234拥有,容器流程的补充组列表中将包含1234:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
securityContext:
fsGroup: 1234
containers:
- image: gcr.io/google_containers/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
# This GCE PD must already exist.
gcePersistentDisk:
pdName: my-data-disk
fsType: ext4
我遇到了同样的问题。我使用的解决方法是在运行容器的主机上运行
df-h
。从那里我可以找到持久存储的绑定点。它应该看起来像/var/lib/kubelet/plugins/kubernetes.io/gce pd/mounts/
。它也将是其中一个文件系统,该文件系统以/dev
开头,但未装入根目录
一旦您发现可以从主机框运行
sudo chmod-R 0777/var/lib/kubelet/plugins/kubernetes.io/gce pd/mounts/
,现在至少您的容器可以使用该目录,尽管这些文件仍然归root所有。您将如何定义安全?因为GKE提供了作为kubernetes集群一部分运行的每个VM,至少以前是这样,不确定是否仍然是这样,但我相信是这样。因此,root用户容器与在主机上运行root相同,因此,如果您的应用程序正常运行root,那么您应该很好。谢谢您的输入,我尝试了此解决方案,但GKE中似乎还不支持fsGroup。即使它不在文档中,我在这里找到它@med我会为你做一些挖掘。可能需要一到两天,我现在对Kube 1.2的东西感到疯狂,但我保证我不会忘记:)@PaulMorie我尝试使用fsGroup
和supplementalGroups
失败,例如错误创建:pods“”被禁止:SecurityContext.fsGroup被禁止
。CoreOS,Docker 1.10.3,Kube 1.2.2。很明显我遗漏了什么?@JoaoMorais您必须禁用“SecurityContextDeny”准入控制器才能在pod规范内设置securityContext。看:这项工作对我很有用。谢谢@funkymonkeymank,但我认为我们需要在kubernetes配置文件中配置这种权限更改。我也有同感。我认为需要一个更好的解决方案,但在这之前,这项工作很容易自动化到资源调配中。我们是否可以跟踪这项工作的PR?我很想把这个列入工作观察名单。我接受了你的回答作为临时解决办法。有一个很好的卷管理器,名为,它已经在Kubernetes中得到支持。现在的存储后端是AWS、OpenStack私有云和GCE。所以当普通中等教育考试开始时,我会这样做。我希望这将抽象卷管理me@funkymonkeymonk如何自动更改权限?