Por que minha implementação do File Storage for VPC falha devido a um erro de permissões?
Nuvem Privada Virtual
Seu aplicativo que utiliza o File Storage for VPC apresenta uma falha devido a um erro de permissão.
Resolva problemas de acesso de usuários não root ao armazenamento de arquivos do VPC.
Você criou sua própria classe de armazenamento para usar com um compartilhamento de arquivo existente, mas não especificou uid e gid corretos. Quando os processos são executados no UNIX e no Linux, o sistema operacional
identifica um usuário por meio de um ID de usuário (UID) e um grupo por meio de um ID de grupo (GID). Esses IDs determinam quais recursos do sistema um usuário ou grupo pode acessar. Por exemplo, se o ID do usuário do armazenamento de arquivos
for 12345 e o ID do grupo for 6789, a montagem no nó host e no contêiner deverá ter esses mesmos IDs. O processo principal do contêiner deve corresponder a um ou ambos os IDs para acessar o compartilhamento de arquivos.
Você pode resolver o problema de uma das seguintes maneiras.
-
Se você precisar que seu app seja executado como não raiz, crie sua própria classe de armazenamento com os
uidegidcorretos que seu app precisa. -
Se você quiser executar seu aplicativo como usuário root, edite sua configuração de implantação para usar
fsGroup: 0``.
Crie sua própria classe de armazenamento e especifique as uid e gid que seu app precisa
Se desejar usar o File Storage for VPC com o fornecimento estático, deve-se fazer referência ao uid e ao gid corretos.
-
Crie uma classe de armazenamento com os
uidegidcorretos que seu app precisa. Para obter uma lista de perfis de armazenamento, 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 -
Crie a classe de armazenamento customizada no cluster.
oc apply -f custom-storageclass.yaml -
Verifique se a classe de armazenamento está disponível no cluster.
oc get scSaída de exemplo
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 seu app para executar como raiz com o fsGroup: 0
-
Efetue login em seu cluster.
-
Identifique a implementação em seu cluster que você deseja editar
kubectl get deployments -
Edite a implementação, incluindo
fsGroup: 0na seçãosecurityContextde sua implementaçãokubectl 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 as mudanças em sua implementação.