由于安全上下文限制 (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 许可权。

  1. 描述 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
    
  2. 描述安全上下文约束,并在 访问权 部分中检查用户和组。

    oc describe scc <scc>
    

    示例输出

    NAME:                        anyuid
    Priority:                    <none>
    Access:                        
        Users:                    <none>
        Groups:                    system:authenticated
    
  3. 如果您不希望用户或组具有 SCC 的许可权,请从 SCC 中除去该用户或组。 有关更多信息,请查看集群中设置的缺省 Red Hat OpenShiftIBM Cloud SCC。

    oc adm policy remove-scc-from-group <scc> <(user|group)>
    
  4. 将具有相应许可权的用户或组添加到 SCC。

    oc adm policy add-scc-to-group <scc> <(user|group)>
    
  5. 删除 pod,以便使用新的 SCC 许可权重新调度 pod。

    oc delete pod -n <project> <pod>