OpenShift 4.3 - 在没有特权访问的情况下将 PVC 附加到 pod

OpenShift 4.3 - Attach PVC to pod without privileged access

我正在尝试在没有特权访问的情况下将 PVC 安装到 MongoDB 部署。 我尝试通过以下方式为 pods 设置 anyuid

oc adm policy add-scc-to-user anyuid -z default --as system:admin

在部署中我使用 securityContext 配置。我已经尝试了 fsGroup 等的几种组合。:

spec:
      securityContext:
        runAsUser: 99
        runAsGroup: 99
        supplementalGroups:
          - 99
        fsGroup: 99

当我转到 pod uid 并且 guid 设置正确时:

bash-4.2$ id
uid=99(nobody) gid=99(nobody) groups=99(nobody)
bash-4.2$ whoami
nobody
bash-4.2$ cd /var/lib/mongodb/data
bash-4.2$ touch test.txt
touch: cannot touch 'test.txt': Permission denied

但是pod无法写入pvc目录:

ERROR: Couldn't write into /var/lib/mongodb/data
CAUSE: current user doesn't have permissions for writing to /var/lib/mongodb/data directory
DETAILS: current user id = 99, user groups: 99 0
DETAILS: directory permissions: drwxr-xr-x owned by 0:0, SELinux: system_u:object_r:container_file_t:s0:c234,c491

我也尝试使用 PVC 实例化 MySQL 模板,而没有从 OpenShift 目录更改任何配置,这是同样的问题。

感谢您的帮助。

临时解决方案是使用具有root权限的init容器来更改挂载路径的所有者:

initContainers:
    - name: mongodb-init
      image: alpine
      command: ["sh", "-c", "chown -R 99 /var/lib/mongodb/data"]
      volumeMounts:
      - mountPath: /var/lib/mongodb/data
        name: mongodb-pvc

但我也在寻找名为 Udica 的工具。它可以为容器生成 SELinux 安全策略:https://github.com/containers/udica