kubernetes - 是否可以在 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 吗?
解决方案
特权模式意味着您已启用所有功能,请参阅https://stackoverflow.com/a/36441605。因此,在您的示例中添加 CAP_SYS_ADMIN 看起来是多余的。
您可以授予所有权限,也可以通过挂载 /dev/fuse 并仅授予 SYS_ADMIN 功能(这仍然是一个重要权限)来执行更细粒度的操作。
我认为我们可以将问题改写为:我们可以在没有 SYS_ADMIN 功能的情况下运行 GCSFuse 吗?
实际上它看起来不可行,你可以在这里找到相关的 docker 问题:https ://github.com/docker/for-linux/issues/321 。
对于大多数项目来说,这不会是一个硬性问题。您可能希望针对您的威胁模型采取行动,并确定它是否可能对您的生产构成安全风险。
推荐阅读
- java - 尝试启动任何 Java 程序时出现“找不到主类”错误
- node.js - 想知道解压方法
- html - 我应该使用什么 META-tag 来指定英式英语?(打开图表)
- sql - 开始导入数据
- schema.org - 微数据 (schema.org) 中的自定义字段是否会使整个微数据出错?
- python - 将csv文件名添加到python中的列(200个文件)
- javascript - 具有查询问题的 Firestore 事务
- c# - 504 - 连接 sage50 云帐户时出现超时错误
- c# - MS Test - 在单独的类中定义 DataRows
- android - 任务“:app:processDebugManifest”执行失败:重复
AndroidManifest.xml 中的元素