Warum schlägt die Bereitstellung von File Storage for VPC aufgrund eines Berechtigungsfehlers fehl?

Virtual Private Cloud

Ihre App, die „ File Storage for VPC “ verwendet, bricht mit einem Berechtigungsfehler ab.

Behebung von Problemen beim Zugriff durch Nicht-Root-Benutzer auf den VPC-Dateispeicher.

Sie haben eine eigene Speicherklasse für die Verwendung mit einer vorhandenen Dateifreigabe erstellt, aber nicht die richtigen uid und gid angegeben. Wenn Prozesse unter UNIX und Linux ausgeführt werden, identifiziert das Betriebssystem einen Benutzer anhand einer Benutzer-ID (UID) und eine Gruppe anhand einer Gruppen-ID (GID). Diese IDs bestimmen, auf welche Systemressourcen ein Benutzer oder eine Gruppe zugreifen kann. Wenn beispielsweise die Benutzer-ID für den Dateispeicher 12345 und die Gruppen-ID 6789 lautet, müssen die Mount-Einträge auf dem Host-Knoten und im Container dieselben IDs aufweisen. Der Hauptprozess des Containers muss mit einer oder beiden dieser IDs übereinstimmen, um auf die Dateifreigabe zugreifen zu können.

Sie können das Problem auf eine der folgenden Weisen beheben.

  • Wenn Ihre App als Benutzer ohne Rootberechtigung ausgeführt werden soll, erstellen Sie Ihre eigene Speicherklasse mit den richtigen uid und gid, die für Ihre App erforderlich sind.

  • Wenn Sie Ihre App als Root-Benutzer ausführen möchten, passen Sie Ihre Bereitstellung so an, dass „ fsGroup: 0 “ verwendet wird.

Erstellen Sie Ihre eigene Speicherklasse und geben Sie die uid und gid Anforderungen für Ihre App an.

Wenn Sie File Storage for VPC mit statischer Bereitstellung verwenden möchten, müssen Sie auf die richtigen uid und gid verweisen.

  1. Erstellen Sie eine Speicherklasse mit den richtigen uid und gid, die Ihre App benötigt. Eine Liste der Speicherprofile finden Sie unter 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. Erstellen Sie die angepasste Speicherklasse in Ihrem Cluster.

    oc apply -f custom-storageclass.yaml
    
  3. Überprüfen Sie, ob Ihre Speicherklasse im Cluster verfügbar ist.

    oc get sc
    

    Beispielausgabe

    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. Dateispeicher zur App hinzufügen

Bearbeiten Sie Ihre App so, dass sie als Root mit fsGroup: 0 ausgeführt wird.

  1. Melden Sie sich bei Ihrem Cluster an.

  2. Geben Sie die Bereitstellung in Ihrem Cluster an, die Sie bearbeiten möchten.

    kubectl get deployments
    
  3. Bearbeiten Sie die Bereitstellung, indem Sie fsGroup: 0 im Abschnitt securityContext Ihrer Bereitstellung hinzufügen.

    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. Wenden Sie die Änderungen auf Ihre Bereitstellung an.