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
uidundgid, 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.
-
Erstellen Sie eine Speicherklasse mit den richtigen
uidundgid, 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 -
Erstellen Sie die angepasste Speicherklasse in Ihrem Cluster.
oc apply -f custom-storageclass.yaml -
Überprüfen Sie, ob Ihre Speicherklasse im Cluster verfügbar ist.
oc get scBeispielausgabe
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
Bearbeiten Sie Ihre App so, dass sie als Root mit fsGroup: 0 ausgeführt wird.
-
Melden Sie sich bei Ihrem Cluster an.
-
Geben Sie die Bereitstellung in Ihrem Cluster an, die Sie bearbeiten möchten.
kubectl get deployments -
Bearbeiten Sie die Bereitstellung, indem Sie
fsGroup: 0im AbschnittsecurityContextIhrer Bereitstellung hinzufügen.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 -
Wenden Sie die Änderungen auf Ihre Bereitstellung an.