Pourquoi mon déploiement File Storage for VPC échoue-t-il en raison d'une erreur de droits d'accès?

Cloud privé virtuel

Votre application qui utilise File Storage for VPC rencontre une erreur liée aux autorisations.

Dépannage des problèmes d'accès des utilisateurs non root au stockage de fichiers VPC.

Vous avez créé votre propre classe de stockage à utiliser avec un partage de fichiers existant, mais vous n'avez pas indiqué les uid et gid appropriés. Lorsque des processus s'exécutent sous UNIX et sur l' Linux, le système d'exploitation identifie un utilisateur à l'aide d'un identifiant utilisateur (UID) et un groupe à l'aide d'un identifiant de groupe (GID). Ces ID déterminent les ressources système auxquelles un utilisateur ou un groupe peut accéder. Par exemple, si l'ID utilisateur du stockage de fichiers est 12345 et que son ID de groupe est 6789, alors le montage sur le nœud hôte et dans le conteneur doit utiliser ces mêmes ID. Le processus principal du conteneur doit correspondre à un des deux ID ou aux deux ID pour accéder au partage de fichiers.

Vous pouvez résoudre le problème de l'une des manières suivantes.

  • Si vous avez besoin que votre application s'exécute en tant que non-root, créez votre propre classe de stockage avec les uid et gid appropriés dont votre application a besoin.

  • Si vous souhaitez exécuter votre application en tant qu'utilisateur root, modifiez votre déploiement pour utiliser fsGroup: 0.

Créez votre propre classe de stockage et spécifiez les uid et gid dont votre application a besoin

Si vous souhaitez utiliser File Storage for VPC avec la mise à disposition statique, vous devez référencer les uid et gid appropriés.

  1. Créez une classe de stockage avec les uid et gid appropriés dont votre application a besoin. Pour une liste des profils de stockage, voir 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. Créez la classe de stockage personnalisée dans votre cluster.

    oc apply -f custom-storageclass.yaml
    
  3. Vérifiez que votre classe de stockage est disponible dans le cluster.

    oc get sc
    

    Exemple de sortie

    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. Ajout de filestorage à votre application

Editez votre application pour qu'elle s'exécute en tant que root avec fsGroup: 0

  1. Connectez-vous à votre cluster.

  2. Identifiez le déploiement dans votre cluster que vous souhaitez éditer.

    kubectl get deployments
    
  3. Editez le déploiement en ajoutant fsGroup: 0 dans la section securityContext de votre déploiement.

    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. Appliquez les modifications à votre déploiement.