权限被拒绝访问安装在OpenShift容器中的/var/run/docker.sock

时间:2018-01-19 08:47:43

标签: docker permissions openshift selinux

目的

了解如何解决问题以及解决Docker容器访问主机文件的权限问题所需的知识。

问题

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

log.info("List item :$l")

https://bugzilla.redhat.com/show_bug.cgi?id=1244634说svirt_sandbox_file_t RHEL需要SELinux标签,所以更改了标签。

[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

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

$ 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

默认情况下,OpenShift不允许使用hostPath,因此它已得到解决。

$ 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

我认为SELinux或OpenShift SCC或其他容器/ docker权限导致了这一点,但需要一个线索如何找到原因。

1 个答案:

答案 0 :(得分:0)

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. 将广告连播的服务帐户与上述安全上下文相关联

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