Perché la mia distribuzione File Storage for VPC non riesce a causa di un errore di autorizzazioni?

Cloud privato virtuale

La tua app che utilizza File Storage for VPC genera un errore relativo alle autorizzazioni.

Risolvere i problemi relativi all'accesso degli utenti non root all'archivio file VPC.

È stata creata la propria classe di archiviazione da utilizzare con una condivisione file esistente, ma non sono stati specificati uid e gid corretti. Quando i processi vengono eseguiti su UNIX e su Linux, il sistema operativo identifica un utente tramite un ID utente (UID) e un gruppo tramite un ID gruppo (GID). Questi ID determinano a quali risorse di sistema un utente o un gruppo può accedere. Ad esempio, se l'ID utente dell'archiviazione file è 12345 e il relativo ID gruppo è 6789, il montaggio sul nodo host e nel contenitore deve avere gli stessi ID. Il processo principale del contenitore deve corrispondere a uno o a entrambi gli ID per accedere alla condivisione file.

È possibile risolvere il problema in uno dei seguenti modi.

  • Se hai bisogno che la tua applicazione venga eseguita come non root, crea la tua classe di archiviazione con i uid e gid corretti di cui la tua applicazione ha bisogno.

  • Se desideri eseguire la tua app come utente root, modifica la configurazione di distribuzione in modo da utilizzare fsGroup: 0.

Crea la tua classe di archiviazione e specifica le uid e gid di cui hai bisogno la tua applicazione

Se vuoi utilizzare File Storage for VPC con provisioning statico, devi fare riferimento a uid e gid corretti.

  1. Crea una classe di archiviazione con uid e gid corretti di cui la tua applicazione ha bisogno. Per un elenco dei profili di archiviazione, vedere File Storage for VPC.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: custom-storageclas
    provisioner: vpc.file.csi.ibm.io
    mountOptions:
        - hard
        - nfsvers=4.0
        - sec=sys
    parameters:
      profile: "custom-iops"            # The VPC Storage profile used.
      iops: "400"                       # Default IOPS. User can override from secrets
      billingType: "hourly"             # The default billing policy used. User can override this default
      encrypted: "false"                # By default, all PVC using this class will only be provider managed encrypted. The user can override this default
      encryptionKey: ""                 # If encrypted is true, then a user must specify the encryption key used associated KP instance
      resourceGroup: ""                 # Use resource group if specified here. Otherwise, use the one mentioned in storage-secrete-store
      zone: ""                          # By default, the storage vpc driver will select a zone. The user can override this default
      tags: ""                          # A list of tags "a, b, c" that will be created when the volume is created. This can be overidden by user
      classVersion: "1"
      uid: "1234"                           # The initial user identifier for the file share.
      gid: "5678"                           # The initial group identifier for the file share.
    reclaimPolicy: "Delete"
    allowVolumeExpansion: true
    
  2. Crea la classe di archiviazione personalizzata nel tuo cluster.

    oc apply -f custom-storageclass.yaml
    
  3. Verifica che la tua classe di archiviazione sia disponibile nel cluster.

    oc get sc
    

    Output di esempio

    NAME                                          PROVISIONER
    ibmc-vpc-file-10iops-tier                     vpc.file.csi.ibm.io
    ibmc-vpc-file-3iops-tier                      vpc.file.csi.ibm.io
    ibmc-vpc-file-5iops-tier                      vpc.file.csi.ibm.io
    ibmc-vpc-file-retain-10iops-tier              vpc.file.csi.ibm.io
    ibmc-vpc-file-retain-3iops-tier               vpc.file.csi.ibm.io
    ibmc-vpc-file-retain-5iops-tier               vpc.file.csi.ibm.io
    ibmc-vpc-file-custom                         vpc.file.csi.ibm.io
    
  4. Aggiungi filestorage alla tua app

Modifica la tua app da eseguire come root con fsGroup: 0

  1. Accedi al tuo cluster.

  2. Identifica la distribuzione nel tuo cluster che vuoi modificare.

    kubectl get deployments
    
  3. Modifica la distribuzione aggiungendo fsGroup: 0 nella sezione securityContext della tua distribuzione.

    kubectl get deployment -o yaml YOUR-DEPLOYMENT
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      securityContext:
        fsGroup: 0
    selector:
        matchLabels:
        app: <app_name>
    template:
        metadata:
        labels:
            app: <app_name>
        spec:
        containers:
        - image: <image_name>
            name: <container_name>
            volumeMounts:
            - name: <volume_name>
            mountPath: /<file_path>
        volumes:
        - name: <volume_name>
            persistentVolumeClaim:
            claimName: PVC-NAME
    
  4. Applica le modifiche alla tua distribuzione.