首页 > 解决方案 > 是否可以在 GCP kubernetes 内不使用特权模式运行 gcsfuse?

问题描述

按照本指南,我正在尝试在 GKE 的 pod 内运行 gcsfuse。下面是我正在使用的部署清单:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gcsfuse-test
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: gcsfuse-test
    spec:
      containers:
        - name: gcsfuse-test
          image: gcr.io/project123/gcs-test-fuse:latest
          securityContext:
            privileged: true
            capabilities:
              add:
                - SYS_ADMIN
          lifecycle:
            postStart:
              exec:
                command: ["mkdir", "/mnt"]
                command: ["gcsfuse", "-o", "nonempty", "cloudsql-p8p", "/mnt"]
            preStop:
              exec:
                command: ["fusermount", "-u", "/mnt"]

但是,我想在我的 GKE 集群中不使用特权模式运行 gcsfuse。我认为(由于 SO 上的这些问题)可以使用某些标志运行 docker 映像,并且无需在特权模式下运行它。

GKE 中有什么方法可以在不以特权模式运行容器的情况下运行 gcsfuse 吗?

标签: kubernetesfusekubernetes-podgcsfuse

解决方案


特权模式意味着您已启用所有功能,请参阅https://stackoverflow.com/a/36441605。因此,在您的示例中添加 CAP_SYS_ADMIN 看起来是多余的。

您可以授予所有权限,也可以通过挂载 /dev/fuse 并仅授予 SYS_ADMIN 功能(这仍然是一个重要权限)来执行更细粒度的操作。

我认为我们可以将问题改写为:我们可以在没有 SYS_ADMIN 功能的情况下运行 GCSFuse 吗?

实际上它看起来不可行,你可以在这里找到相关的 docker 问题:https ://github.com/docker/for-linux/issues/321 。

对于大多数项目来说,这不会是一个硬性问题。您可能希望针对您的威胁模型采取行动,并确定它是否可能对您的生产构成安全风险。


推荐阅读