目的
知道拍什么知识,如何麻烦,需要访问主机文件泊坞窗容器的排查权限问题。
问题
访问/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或其他容器/泊坞窗权限是导致此,但需要知道如何查找原因。