Perché il pod non viene compilato con un errore di autorizzazione negata a causa del vincolo del contesto di sicurezza (SCC)?

Virtual Private Cloud Infrastruttura classica

Imparate a risolvere gli errori di autorizzazione negata relativi ai vincoli del contesto di sicurezza (SCC) durante la creazione o l'esecuzione dei pod.

Un pod di sistema o un altro pod che utilizza un vincolo di contesto di sicurezza (o SCC, security context constraint) ha un'operazione che continua a effettuare nuovi tentativi ma non riesce con un errore permission denied. Ad esempio, si potrebbe accedere al pod interno image-registry e provare a eseguire un comando docker push.

Esempio di messaggio di errore durante il push di un'immagine nel registro interno.

error: build error: Failed to push image: error copying layers and metadata

Il pod potrebbe utilizzare un SCC o appartenere a un gruppo di sistema che utilizza un SCC senza le autorizzazioni corrette. È possibile che abbiate aggiunto un gruppo di sistema a un SCC eseguendo il comando oc adm policy add-scc-to-group <scc> system:<group>.

Se il pod monta un volume, le autorizzazioni del pod autorizzate da SCC potrebbero non consentire più al pod di leggere o scrivere dati sul volume.

Ad esempio, il registro interno monta un volume per leggere e scrivere i dati di immagine in un'istanza di archiviazione file. Se il gruppo system:authenticated a cui appartiene il registro interno modifica l'SCC da restricted a anyuid, il pod viene eseguito con un UID diverso. L'UID diverso impedisce al pod del registro interno di eseguire il push o il pull delle immagini dal dispositivo di archiviazione.

Modifica le autorizzazioni SCC del pod.

  1. Descrivere il pod e controllare il vincolo del contesto di sicurezza openshift.io/scc: <scc> nella sezione Annotazioni.

    oc describe pod -n <project> <pod>
    

    Output di esempio

    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. Descrivi il vincolo del contesto di sicurezza (SCC) e controlla gli utenti e i gruppi nella sezione Access.

    oc describe scc <scc>
    

    Output di esempio

    NAME:                        anyuid
    Priority:                    <none>
    Access:                        
        Users:                    <none>
        Groups:                    system:authenticated
    
  3. Se non volete che l'utente o il gruppo abbia i permessi dell'SCC, rimuovete l'utente o il gruppo dall'SCC. Per ulteriori informazioni, consultare le sezioni predefinite Red Hat OpenShift e IBM Cloud SCC impostati nel cluster.

    oc adm policy remove-scc-from-group <scc> <(user|group)>
    
  4. Aggiungi l'utente o il gruppo all'SCC con le autorizzazioni appropriate.

    oc adm policy add-scc-to-group <scc> <(user|group)>
    
  5. Elimina il pod in modo che venga ripianificato con le nuove autorizzazioni SCC.

    oc delete pod -n <project> <pod>