【问题标题】:Permission denied to access /var/run/docker.sock mounted in a OpenShift container访问挂载在 OpenShift 容器中的 /var/run/docker.sock 的权限被拒绝
【发布时间】:2018-06-28 11:03:42
【问题描述】:

目标

知道如何排查问题,排查Docker容器访问主机文件的权限问题需要哪些知识。

问题

通过 hostPath 访问挂载在 OpenShift 容器内的 /var/run/docker.sock 会导致权限被拒绝。如果将相同的容器部署到 K8S 1.9.x,则不会发生此问题,因此这是 OpenShift 特定的问题。

[ec2-user@ip-10-0-4-62 ~]$ ls -laZ /var/run/docker.sock
srw-rw----. root docker system_u:object_r:container_var_run_t:s0 /var/run/docker.sock

[ec2-user@ip-10-0-4-62 ~]$ docker exec 9d0c6763d855 ls -laZ /var/run/docker.sock
srw-rw----. 1 root 1002 system_u:object_r:container_var_run_t:s0 0 Jan 16 09:54 /var/run/docker.sock

https://bugzilla.redhat.com/show_bug.cgi?id=1244634 表示 RHEL 需要 svirt_sandbox_file_t SELinux 标签,因此更改了标签。

$ chcon -Rt container_runtime_t docker.sock 
[ec2-user@ip-10-0-4-62 ~]$ ls -aZ /var/run/docker.sock 
srw-rw----. root docker system_u:object_r:svirt_sandbox_file_t:s0 /var/run/docker.sock

重新部署容器,但权限仍然被拒绝。

$ docker exec -it 9d0c6763d855 curl -ivs --unix-socket /var/run/docker.sock http://localhost/version
*   Trying /var/run/docker.sock...
* Immediate connect fail for /var/run/docker.sock: Permission denied
* Closing connection 0

默认情况下,OpenShift 不允许 hostPath,因此已解决。

oc adm policy add-scc-to-user privileged system:serviceaccount:{{ DATADOG_NAMESPACE }}:{{ DATADOG_SERVICE_ACCOUNT }}

我想 SELinux 或 OpenShift SCC 或其他容器/docker 权限是导致此问题的原因,但需要知道如何找到原因。

【问题讨论】:

  • 有一个默认设置禁止容器在 OpenShift 中以 root 身份运行。要使用 docker socker,您需要 root 权限。也许让您的容器以 root 身份运行会有所帮助? (前段时间我碰过这个,如果我错了请不要开枪):oadm policy add-scc-to-user anyuid -z default
  • @lvthillo 感谢您的评论。使用 privileged: true,我可以以 root 身份运行 pod 并避免该问题,但这是不允许的。需要找到一种方法来解决 SELinux 并管理 pod 权限。

标签: docker permissions openshift selinux


【解决方案1】:

Openshift 需要特殊权限才能允许 pod 使用节点中的卷。

执行以下操作:

  1. 创建标准安全上下文 yaml:

    kind: SecurityContextConstraints
    apiVersion: v1
    metadata:
      name: scc-hostpath
    allowPrivilegedContainer: true
    runAsUser:
      type: RunAsAny
    seLinuxContext:
      type: RunAsAny
    fsGroup:
      type: RunAsAny
    supplementalGroups:
      type: RunAsAny
    users:
    - my-admin-user
    groups:
    - my-admin-group
    
    oc create -f scc-hostpath.yam
    
  2. 将“allowHostDirVolumePlugin”权限添加到此安全上下文:

    oc patch scc scc-hostpath -p '{"allowHostDirVolumePlugin": true}'
    
  3. 将 pod 的服务帐户与上述安全上下文相关联

    oc adm policy add-scc-to-user scc-hostpath system:serviceaccount:<service_account_name>
    

【讨论】:

    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2011-10-28
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多