Kubernetes:hostPath 存储权限

Yud*_*udi 4 kubernetes docker-volume

问题:无法写入容器内的目录。

我正在使用 hostPath 存储来满足持久存储要求。我没有使用 PV 和 PVC 来使用 hospath,而是使用它的卷插件。例如

{
    "apiVersion": "v1",
    "id": "local-nginx",
    "kind": "Pod",
    "metadata": {
        "name": "local-nginx"
    },
    "spec": {
        "containers": [
             {
                 "name": "local-nginx",
                 "image": "fedora/nginx",
                 "volumeMounts": [
                     {
                         "mountPath": "/usr/share/nginx/html/test",
                         "name": "localvol"
                     }
                 ]
             }
        ],
        "volumes": [
            {
                 "name": "localvol",
                 "hostPath": {
                    "path": "/logs/nginx-logs"
                 }
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:nginx pod 只是为了举例。

我在主机上的目录被创建为“drwxr-xr-x。2 root root 6 Apr 23 18:42 /logs/nginx-logs”并且相同的权限反映在 pod 内,但由于它是 755,其他用户即用户在里面pod 无法在挂载的目录中写入/创建文件。

问题:

  1. 有没有办法避免上面指定的问题?

  2. 在 Hostpath 存储的情况下,有没有办法指定目录权限?

  3. 我可以在以下定义中设置任何字段以提供所需的权限吗?


"volumes":{
   "name": "vol",
    "hostPath": {
      "path": "/any/path/it/will/be/replaced"}}
Run Code Online (Sandbox Code Playgroud)

Ott*_*sky 5

我认为您遇到的问题与用户或组无关(您的 pod 定义没有 RunAsUser 规范,因此默认情况下它以 root 身份运行),而是与 SELinux 策略有关。为了使用 rw 权限将主机目录挂载到 pod,它应该具有以下标签:svirt_sandbox_file_t. 您可以使用以下命令检查当前的 SElinux 标签:ls -laZ <your host directory>并使用chcon -Rt svirt_sandbox_file_t <your host directory>.