由于安全上下文限制 (SCC),为什么我的 pod 在未构建时会出现权限被拒绝的错误?
虚拟私有云 传统基础设施
了解在构建或运行 pod 时,如何解决与安全上下文限制 (SCC) 相关的权限拒绝错误。
使用安全上下文约束 (SCC) 的系统 pod 或其他 pod 具有持续重试但失败的操作,发生 permission denied 错误。 例如,您可以登录内部 image-registry pod 并尝试运行 docker push 命令。
将映像推送到内部注册表时的错误信息示例。
error: build error: Failed to push image: error copying layers and metadata
pod 可能使用 SCC 或属于使用 SCC 的系统组,但没有正确的权限。 您可能已通过运行 oc adm policy add-scc-to-group <scc> system:<group> 命令在 SCC 中添加了一个系统组。
如果 pod 安装卷,那么由 SCC 授权的 pod 许可权可能不再允许 pod 读取数据或将数据写入该卷。
例如,内部注册表安装卷以将映像数据读写到文件存储器实例。 如果内部注册表所属的 system:authenticated 组将 SCC 从 restricted 更改为 anyuid,那么 pod 将使用不同的 UID 运行。 不同的 UID 可防止内部注册表 pod 从存储设备推送或拉取映像。
更改 pod 的 SCC 许可权。
-
描述 pod 并检查 注释 部分中的
openshift.io/scc: <scc>安全上下文约束。oc describe pod -n <project> <pod>示例输出
NAME: image-registry-1234567 Namespace: openshift-image-registry Priority: 2000000000 PriorityClassName: system-cluster-critical Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Wed, 19 Feb 2020 15:38:53 -0500 Labels: docker-registry=default Annotations: openshift.io/scc: anyuid -
描述安全上下文约束,并在 访问权 部分中检查用户和组。
oc describe scc <scc>示例输出
NAME: anyuid Priority: <none> Access: Users: <none> Groups: system:authenticated -
如果您不希望用户或组具有 SCC 的许可权,请从 SCC 中除去该用户或组。 有关更多信息,请查看集群中设置的缺省 Red Hat OpenShift 和 IBM Cloud SCC。
oc adm policy remove-scc-from-group <scc> <(user|group)> -
将具有相应许可权的用户或组添加到 SCC。
oc adm policy add-scc-to-group <scc> <(user|group)> -
删除 pod,以便使用新的 SCC 许可权重新调度 pod。
oc delete pod -n <project> <pod>