¿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
uidygidcorrectos 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.
-
Cree una clase de almacenamiento con los
uidygidcorrectos 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 -
Cree la clase de almacenamiento personalizada en su clúster.
oc apply -f custom-storageclass.yaml -
Verifique que la clase de almacenamiento está disponible en el clúster.
oc get scSalida 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
Edite la app para que se ejecute como root con fsGroup: 0
-
Inicie una sesión en el clúster.
-
Identifique el despliegue en el clúster que desea editar.
kubectl get deployments -
Edite el despliegue añadiendo
fsGroup: 0en la secciónsecurityContextdel despliegue.kubectl get deployment -o yaml YOUR-DEPLOYMENTapiVersion: 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 -
Aplique los cambios al despliegue.