Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 部署在Google容器引擎中的非root用户的Docker容器无法写入已装入的GCE永久磁盘_Kubernetes_Google Kubernetes Engine - Fatal编程技术网

Kubernetes 部署在Google容器引擎中的非root用户的Docker容器无法写入已装入的GCE永久磁盘

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&

我正在玩kubernetes和google容器引擎(GKE)

我从这个图像部署了一个容器

这是我的复制控制器:

{
  "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如何自动更改权限?