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

2019-10-29 16:22发布

目的

知道拍什么知识,如何麻烦,需要访问主机文件泊坞窗容器的排查权限问题。

问题

访问/var/run/docker.sock安装在OpenShift容器内通过hostPath导致权限被拒绝。 如果相同的容器被部署到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说svirt_sandbox_file_t需要RHEL 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或其他容器/泊坞窗权限是导致此,但需要知道如何查找原因。

Answer 1:

Openshift需要为了让荚中的节点使用量的特殊权限。

请执行下列操作:

  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> 


文章来源: Permission denied to access /var/run/docker.sock mounted in a OpenShift container