¿Por qué falla mi despliegue de File Storage for VPC debido a un error de permisos?

Nube privada virtual

Tu aplicación, que utiliza « File Storage for VPC », falla debido a un error de permisos.

Soluciona problemas de acceso de usuarios que no son root con el almacenamiento de archivos VPC.

Ha creado su propia clase de almacenamiento para utilizarla con una compartición de archivos existente, pero no ha especificado los uid y gid correctos. Cuando los procesos se ejecutan en UNIX y en Linux, el sistema operativo identifica a un usuario mediante un identificador de usuario (UID) y a un grupo mediante un identificador de grupo (GID). Estos ID determinan a qué recursos del sistema puede acceder un usuario o grupo. Por ejemplo, si el ID de usuario del almacenamiento de archivos es 12345 y su ID de grupo es 6789, el montaje en el nodo anfitrión y en el contenedor debe tener esos mismos ID. El proceso principal del contenedor tendrá que coincidir con uno o ambos ID para poder acceder a la compartición de archivos.

Puede resolver el problema de una de las siguientes maneras.

  • Si necesita que la app se ejecute como no root, cree su propia clase de almacenamiento con los uid y gid correctos que necesita la app.

  • Si quieres ejecutar tu aplicación como usuario root, modifica tu configuración de implementación para utilizar fsGroup: 0.

Cree su propia clase de almacenamiento y especifique uid y gid las necesidades de la app

Si desea utilizar File Storage for VPC con el suministro estático, debe hacer referencia a los uid y gid correctos.

  1. Cree una clase de almacenamiento con los uid y gid correctos que necesita la app. Para obtener una lista de perfiles de almacenamiento, consulte File Storage for VPC profiles.

    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. Cree la clase de almacenamiento personalizada en su clúster.

    oc apply -f custom-storageclass.yaml
    
  3. Verifique que la clase de almacenamiento está disponible en el clúster.

    oc get sc
    

    Salida de ejemplo

    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. Añadir un almacenamiento de archivos a la app

Edite la app para que se ejecute como root con fsGroup: 0

  1. Inicie una sesión en el clúster.

  2. Identifique el despliegue en el clúster que desea editar.

    kubectl get deployments
    
  3. Edite el despliegue añadiendo fsGroup: 0 en la sección securityContext del despliegue.

    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. Aplique los cambios al despliegue.