OpenShift 4.7自定义SCC挂载hostPath后Pod访问出现权限拒绝问题
OpenShift 4.7自定义SCC挂载hostPath只读权限拒绝问题排查方案
1. 确认自定义SCC已正确绑定到服务账号
你当前配置的SCC仅给system:cluster-admins组开放了调用权限,Deployment使用的ubuntu-test服务账号默认无权调用该SCC,会自动降级使用默认的restricted SCC,导致hostPath挂载权限受限。
- 验证Pod实际生效的SCC:
oc get pod <替换为实际Pod名称> -o yaml | grep openshift.io/scc
如果输出的SCC名称不是test-access,执行以下命令绑定SCC到对应服务账号,绑定后重建Pod再次验证:
oc adm policy add-scc-to-user test-access -z ubuntu-test -n ubuntu-test
2. 排查SELinux强制访问控制拦截
OpenShift节点默认开启SELinux,即使宿主机目录POSIX权限为755,不符合SELinux规则的访问依然会被拒绝:
- 临时验证方案:登录Pod所在的宿主机节点,执行
setenforce 0关闭SELinux强制模式,进入容器测试是否可以正常访问目录。如果访问恢复正常,即可确认是SELinux规则拦截。 - 永久修复二选一:
- 方案1:在Deployment的Pod
spec.securityContext中添加SELinux配置,适配宿主机日志目录的上下文规则:securityContext: seLinuxOptions: type: container_log_t - 方案2:修改自定义SCC配置,将
seLinuxContext.type从RunAsAny调整为MustRunAs,并配置对应SELinux级别适配hostPath卷访问。
- 方案1:在Deployment的Pod
3. 验证目录权限链完整性
你仅检查了目标挂载目录本身的权限,需确认所有上层目录具备执行权限(进入目录必须要有执行权限):
# 依次检查所有上层目录权限 ls -ld /var/log ls -ld /var/lib/docker ls -ld /var/lib/docker/containers
确保所有上层目录的other权限至少为r-x(数值权限≥555)。
补充验证
可在容器内执行id命令确认当前运行用户的UID,确保身份配置符合预期。
内容的提问来源于stack exchange,提问作者Yashar
相关产品推荐
相关产品推荐

