為什麼我的 pod 在建立時會因為安全上下文限制 (SCC) 而出現權限被拒絕的錯誤?

虛擬私有雲 經典基礎架構

瞭解在建立或執行 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>