Provisionnement de revendications de volume persistant dans le service de stockage de fichiers

Découvrez comment provisionner des revendications de volume persistant pour les grappes que vous avez créées à l'aide de Kubernetes Engine (OKE) en montant des systèmes de fichiers à partir du service File Storage.

Le service de stockage de fichiers pour Oracle Cloud Infrastructure fournit un système de fichiers de réseau durable, évolutif, distribué et de niveau entreprise. Vous utilisez le plugiciel de volume CSI pour connecter des grappes aux systèmes de fichiers du service de stockage de fichiers.

Vous pouvez utiliser le service File Storage pour provisionner des revendications de volume persistant de deux façons :

  • En définissant et en créant une nouvelle classe de stockage (en spécifiant éventuellement l'OCID d'une cible de montage existante), puis en définissant et en créant une nouvelle revendication de volume persistant basée sur la classe de stockage. Lorsque vous créez la revendication de volume persistant, le plugiciel de volume CSI crée dynamiquement à la fois un nouveau système de fichiers du service de stockage de fichiers et un nouveau volume persistant soutenu par le nouveau système de fichiers. Voir Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI.
  • En créant manuellement un système de fichiers et une cible de montage dans le service File Storage, puis en définissant et en créant une valeur actualisée potentielle soutenue par le nouveau système de fichiers, et enfin en définissant une nouvelle revendication de volume persistant. Lorsque vous créez la revendication de volume persistant, le moteur Kubernetes lie la revendication de volume persistant à la valeur résiduelle soutenue par le service de stockage de fichiers. Voir Provisionnement d'une revendication de volume persistant sur un système de fichiers existant.

Notez ce qui suit :

  • Lorsque vous utilisez le plugiciel de volume CSI pour créer dynamiquement un nouveau système de fichiers, ne mettez pas à jour manuellement les propriétés du nouveau volume persistant créé par le plugiciel de volume CSI.
  • Les systèmes de fichiers, les cibles de montage et les exportations du service de stockage de fichiers créés dynamiquement par le plugiciel de volume CSI portent les noms commençant par csi-fss-.
  • Tous les systèmes de fichiers, cibles de montage et exportations du service File Storage créés dynamiquement par le plugiciel de volume CSI s'affichent dans la console. En revanche, n'utilisez pas la console (ni l'interface de ligne de commande ni l'API Oracle Cloud Infrastructure) pour modifier ces ressources créées dynamiquement. Les modifications apportées aux ressources Oracle Cloud Infrastructure, créées dynamiquement par le plugiciel de volume CSI, ne sont pas rapprochées des objets Kubernetes.
  • Si vous supprimez une revendication de volume persistant liée à un PV soutenu par un système de fichiers créé par le plugiciel de volume CSI, le plugiciel de volume CSI supprime le système de fichiers et PV qu'il a créé. Si le plugiciel de volume CSI a également créé une nouvelle cible de montage (car vous n'avez pas spécifié l'OCID d'une cible de montage existante dans la définition de la classe de stockage), le plugiciel de volume CSI supprime également la cible de montage. Notez que si vous avez spécifié l'OCID d'une cible de montage existante, le plugiciel de volume CSI ne supprime pas la cible de montage.
  • Le provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers créé dynamiquement par le plugiciel de volume CSI est disponible lorsque des grappes exécutent Kubernetes version 1.22 ou ultérieure. Voir Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI.
  • Le provisionnement d'une revendication de volume persistant en la liant à une valeur actualisée soutenue par un système de fichiers existant est disponible lorsque les grappes exécutent Kubernetes version 1.18 ou ultérieure. Voir Provisionnement d'une revendication de volume persistant sur un système de fichiers existant.

Chiffrement des données au repos et des données en transit avec le service de stockage de fichiers

Lorsque vous utilisez le service File Storage pour provisionner des PVC, vous spécifiez le chiffrement en transit indépendamment du chiffrement au repos.

Le service File Storage chiffre toujours les données au repos, à l'aide de clés de chiffrement gérées par Oracle par défaut. Toutefois, vous avez la possibilité de spécifier le chiffrement au repos à l'aide de vos propres clés de chiffrement principales que vous gérez vous-même dans le service de chambre forte. La façon de spécifier le chiffrement au repos dépend du fait de savoir si vous provisionnez une revendication de volume persistant sur :

Si vous voulez gérer vos propres clés de chiffrement principales pour chiffrer les données au repos, vous devez :

Le service File Storage peut facultativement chiffrer les données en transit. Si vous spécifiez le chiffrement en transit, les données en transit sont chiffrées à l'aide d'un certificat TLS (Transport Layer Security) toujours géré par Oracle, que les données au repos soient chiffrées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur. Le chiffrement en transit sécurise le transfert de données entre des instances et des systèmes de fichiers montés à l'aide du chiffrement TLS v.1.2. Pour plus d'informations sur le chiffrement en transit et le service de stockage de fichiers, voir Utilisation du chiffrement TLS en transit. La façon de spécifier le chiffrement en transit varie selon que vous provisionnez une revendication de volume persistant sur :

Notez que lorsque vous utilisez le service File Storage pour provisionner des PVC, le chiffrement en transit n'est pris en charge que lorsque les instances de calcul hébergeant des noeuds de travail exécutent Oracle Linux 7 et Oracle Linux 8.

Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI

Note

Les préalables suivants s'appliquent lors du provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers créé dynamiquement par le plugiciel de volume CSI :
  • Les grappes doivent exécuter Kubernetes 1.22 ou une version ultérieure pour provisionner une revendication de volume persistant sur un nouveau système de fichiers créé dynamiquement par le plugiciel de volume CSI.
  • Des politiques IAM appropriées doivent exister pour permettre au plugiciel de volume CSI de créer et de gérer des ressources de stockage de fichiers. Plus précisément :

    • Politique permettant de créer ou de gérer des systèmes de fichiers, des cibles de montage et des chemins d'exportation. Par exemple :
      ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
    • Politique d'utilisation des cartes vNIC, des adresses IP privées, des zones DNS privées et des sous-réseaux. Par exemple :
      ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
  • Si le compartiment auquel appartient un groupe de noeuds, un sous-réseau de noeuds de travail, un système de fichiers ou une cible de montage est différent du compartiment auquel appartient une grappe, des politiques IAM doivent exister pour permettre au plugiciel de volume CSI d'accéder à l'emplacement approprié. Par exemple :

    ALLOW any-user to manage file-family in TENANCY where request.principal.type = 'cluster'
    ALLOW any-user to use virtual-network-family in TENANCY where request.principal.type = 'cluster'
  • Pour spécifier une clé de chiffrement principale gérée par l'utilisateur particulière à partir du service de chambre forte afin de chiffrer les données dans les systèmes de fichiers, des politiques IAM appropriées doivent exister pour permettre au plugiciel de volume CSI d'accéder à cette clé de chiffrement principale. Voir Créer une politique pour accéder aux clés de chiffrement gérées par l'utilisateur pour chiffrer les volumes de démarrage, les volumes par blocs ou les systèmes de fichiers.

Pour provisionner dynamiquement une revendication de volume persistant dans un nouveau système de fichiers créé dynamiquement par le plugiciel de volume CSI dans le service de stockage de fichiers :

  1. (Facultatif) Créez une cible de montage dans le service de stockage de fichiers. Voir Création d'une cible de montage.

    Le plugiciel de volume CSI nécessite une cible de montage active (c'est-à-dire une cible de montage avec une adresse IP affectée) pour créer un nouveau système de fichiers. Si vous ne créez pas de cible de montage à l'avance, spécifiez le sous-réseau dans lequel le plugiciel de volume CSI doit créer une nouvelle cible de montage lorsque vous définissez la classe de stockage.

  2. Définissez une nouvelle classe de stockage qui utilise le provisionneur fss.csi.oraclecloud.com :
    1. Créez un fichier manifeste (par exemple, dans un fichier nommé fss-dyn-st-class.yaml), spécifiez un nom pour la nouvelle classe de stockage et spécifiez des valeurs pour les paramètres obligatoires et facultatifs :
      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: <storage-class-name>
      provisioner: fss.csi.oraclecloud.com
      parameters:
        availabilityDomain: <ad-name>
        mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
        compartmentOcid: <compartment-ocid>
        kmsKeyOcid: <key-ocid>
        exportPath: <path>
        exportOptions: "[{<options-in-json-format>}]"
        encryptInTransit: "true"|"false"
        oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
        oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'

      où :

      • name: <storage-class-name> : Obligatoire. Nom de votre choix pour la classe de stockage.
      • availabilityDomain: <ad-name> : Obligatoire. Nom du domaine de disponibilité dans lequel créer le nouveau système de fichiers (et dans lequel créer la nouvelle cible de montage, si l'OCID d'une cible de montage existante n'est pas spécifié). Par exemple : US-ASHBURN-AD-1. Pour connaître le nom du domaine de disponibilité à utiliser, exécutez la commande d'interface de ligne de commande oci iam availability-domain list (ou utilisez l'opération ListAvailabilityDomains). Pour plus d'informations, voir Noms de domaine de disponibilité de votre location.
      • mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid> : Obligatoire. OCID d'une cible de montage active existante (mountTargetOcid: <mt-ocid>) ou OCID d'un sous-réseau dans lequel créer une nouvelle cible de montage (mountTargetSubnetOcid: <mt-subnet-ocid>). Spécifiez mountTargetOcid ou mountTargetSubnetOcid. Si vous spécifiez mountTargetOcid et mountTargetSubnetOcid dans la définition de la classe de stockage, la cible de montage existante spécifiée par mountTargetOcid est utilisée et mountTargetSubnetOcid est ignoré. Par exemple :
        • mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        • mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
      • compartmentOcid: <compartment-ocid> : Facultatif. L'OCID du compartiment auquel le nouveau système de fichiers (et la nouvelle cible de montage, si l'OCID d'une cible de montage existante n'est pas spécifié) doit appartenir. S'il n'est pas spécifié, le compartiment par défaut est le même que celui de la grappe. Par exemple, compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      • kmsKeyOcid: <key-ocid> : Facultatif. OCID d'une clé de chiffrement principale que vous gérez, avec laquelle chiffrer les données au repos. S'il n'est pas spécifié, les données sont chiffrées au repos à l'aide de clés de chiffrement gérées par Oracle. Voir Chiffrement des données au repos dans un nouveau système de fichiers. Par exemple, kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      • exportPath: <path> : Facultatif. Chemin dans une exportation qui identifie de manière unique le système de fichiers dans la cible de montage. Le chemin d'exportation doit commencer par une barre oblique (/) suivie d'une séquence de zéros ou de plusieurs éléments séparés par une barre oblique. Par exemple, /FileSystem1. Pour plus d'informations, voir Chemins dans les systèmes de fichiers.

        Si vous incluez exportPath: <path> dans une définition de classe de stockage, ne spécifiez pas de chemin (soit comme chemin, soit comme sous-chemin d'un chemin existant) qui existe déjà. Si vous spécifiez un chemin qui existe déjà, une erreur est retournée car plusieurs systèmes de fichiers avec la même cible de montage ne peuvent pas avoir le même chemin d'exportation. Par conséquent, si vous incluez exportPath: <path> dans la définition de la classe de stockage, utilisez cette définition de classe de stockage uniquement pour créer un système de fichiers.

        Si vous n'incluez pas exportPath: <path> dans la définition de la classe de stockage, le chemin d'accès par défaut est le nom d'affichage du système de fichiers créé par le plugiciel de volume CSI (commençant par /csi-fss-).

      • exportOptions: "[{<options-in-json-format>}]" Facultatif. Jeu de paramètres (dans un format JSON valide) dans l'exportation qui spécifie le niveau d'accès accordé aux clients NFS lors de la connexion à une cible de montage. Une entrée d'options d'exportation NFS dans une exportation définit l'accès pour une adresse IP ou un intervalle de blocs CIDR. Pour plus d'informations, voir Utilisation des options d'exportation et d'exportation NFS. En l'absence de valeur, la valeur par défaut suivante est utilisée :
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
      • encryptInTransit: "true"|"false" : Facultatif. Indique s'il faut chiffrer les données en transit. Si vous spécifiez "true", assurez-vous d'effectuer les étapes de configuration décrites dans Chiffrement des données en transit dans un nouveau système de fichiers. Si vous ne spécifiez pas de valeur, la valeur par défaut est "false". Par exemple, encryptInTransit: "true".
      • oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}' Facultatif. Spécifie un marqueur défini pour le nouveau système de fichiers. Par exemple, oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'

        Notez que pour appliquer des marqueurs définis d'un espace de noms de marqueur appartenant à un compartiment à une ressource de système de fichiers appartenant à un autre compartiment, vous devez inclure un énoncé de politique pour permettre à la grappe d'utiliser l'espace de noms de marqueur. Voir Politique IAM supplémentaire lorsqu'une grappe et un espace de noms de marqueur se trouvent dans des compartiments différents.

      • oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}' Facultatif. Spécifie un marqueur à structure libre pour le nouveau système de fichiers. Par exemple, oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'

      Par exemple :

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: fss-dyn-storage
      provisioner: fss.csi.oraclecloud.com
      parameters:
        availabilityDomain: US-ASHBURN-AD-1
        mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
        compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
        kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
        exportPath: /FileSystem1
        exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
        encryptInTransit: "true"
    2. Créez la classe de stockage à partir du fichier manifeste en entrant :
      kubectl create -f <filename>
      Par exemple :
      kubectl create -f fss-dyn-st-class.yaml
  3. Créez des règles de sécurité dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité pour la cible de montage référencée dans (ou créée par) la définition de classe de stockage et pour les noeuds de travail de la grappe.

    Les règles de sécurité à créer dépendent des emplacements de réseau relatifs de la cible de montage et des noeuds de travail, selon les scénarios suivants :

    Ces scénarios, les règles de sécurité à créer et leur emplacement, sont entièrement décrits dans la documentation du service File Storage (voir Configuration des règles de sécurité de réseau VCN pour le service de stockage de fichiers).

  4. Créez une revendication de volume persistant à provisionner par le nouveau système de fichiers dans le service File Storage, comme suit :
    1. Créez un fichier manifeste pour définir la revendication de volume persistant :
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: <pvc-name>
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "<storage-class-name>"
        resources:
          requests:
            storage: 50Gi

      où :

      • name: <pvc-name> : Obligatoire. Par exemple, fss-dynamic-claim
      • storageClassName: "<storage-class-name>" : Obligatoire. Nom de la classe de stockage que vous avez définie précédemment. Par exemple, fss-dyn-storage.
      • accessModes: - ReadWriteMany : Obligatoire. Notez que accessModes: doit spécifier ReadWriteMany.
      • storage: 50Gi : Obligatoire. Notez que Kubernetes nécessite que vous spécifiez une valeur pour storage: dans le manifeste de revendication de volume persistant. Toutefois, le service File Storage ne prend pas en charge la spécification d'une taille de système de fichiers et crée un nouveau système de fichiers avec une taille par défaut, quelle que soit la valeur que vous spécifiez pour storage:.

      Par exemple, le fichier manifeste suivant (nommé fss-dyn-claim.yaml) définit une revendication de volume persistant nommée fss-dynamic-claim qui est provisionnée par le système de fichiers défini dans la classe de stockage fss-dyn-storage :

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-dynamic-claim
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "fss-dyn-storage"
        resources:
          requests:
            storage: 50Gi
    2. Créez la revendication de volume persistant à partir du fichier manifeste en entrant :
      kubectl create -f <filename>
      Par exemple :
      kubectl create -f fss-dyn-claim.yaml

    Un nouveau PVC est créé. Le plugiciel de volume CSI crée un nouveau volume persistant et un nouveau système de fichiers dans le service File Storage (ainsi qu'une nouvelle cible de montage si vous n'avez pas spécifié de cible de montage existante).

    Le nouveau PVC est lié au nouveau PV. Les données sont chiffrées au repos, à l'aide de clés de chiffrement gérées par Oracle ou par vous.

  5. Vérifiez que la PVC a été liée au nouveau volume persistant en entrant :
    kubectl get pvc

    La sortie de la commande ci-dessus confirme que la PVC a été liée avec succès :

    			
    NAME                STATUS    VOLUME                 CAPACITY   ACCESSMODES   STORAGECLASS      AGE
    fss-dynamic-claim   Bound     csi-fss-<unique_ID>    50Gi       RWX           fss-dyn-storage   4m
  6. Utilisez la nouvelle revendication de PVC lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un nouveau pod à partir de la définition de pod suivante :
    apiVersion: v1
    kind: Pod
    metadata:
      name: fss-dynamic-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - name: http
              containerPort: 80
          volumeMounts:
            - name: persistent-storage
              mountPath: /usr/share/nginx/html
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: fss-dynamic-claim
  7. Après avoir créé un nouveau pod comme décrit dans l'exemple de l'étape précédente, vous pouvez vérifier que le pod utilise la nouvelle revendication de volume persistant en entrant :

    kubectl describe pod nginx
Conseil

Si vous prévoyez souvent de créer dynamiquement de nouveaux PV et de nouveaux systèmes de fichiers lorsque vous créez des PVC, vous pouvez spécifier que la nouvelle classe de stockage que vous avez créée doit être utilisée comme classe de stockage par défaut pour provisionner de nouvelles PVC. Pour plus de détails, consultez la documentation sur Kubernetes

Chiffrement des données au repos dans un nouveau système de fichiers

Le service File Storage chiffre toujours les données au repos, à l'aide de clés de chiffrement gérées par Oracle par défaut. Toutefois, vous avez la possibilité de chiffrer les données au repos à l'aide de vos propres clés de chiffrement principales que vous gérez vous-même dans le service de chambre forte.

Selon la façon dont vous souhaitez chiffrer les données au repos, suivez les instructions ci-dessous :

  • Pour utiliser le plugiciel de volume CSI afin de créer dynamiquement un nouveau système de fichiers qui utilise des clés de chiffrement gérées par Oracle pour chiffrer les données au repos, suivez les étapes sous Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI et n'incluez pas le paramètre kmsKeyOcid: <key-ocid> dans la définition de la classe de stockage. Les données sont chiffrées au repos, à l'aide de clés de chiffrement gérées par Oracle.
  • Pour utiliser le plugiciel de volume CSI afin de créer dynamiquement un nouveau système de fichiers qui utilise des clés de chiffrement principales que vous gérez pour chiffrer des données au repos, suivez les étapes sous Provisionnement d'un PVC sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI, inclure le paramètre kmsKeyOcid: <key-ocid> dans la définition de la classe de stockage et spécifier l'OCID de la clé de chiffrement principale dans le service de chambre forte. Les données sont chiffrées au repos à l'aide de la clé de chiffrement que vous spécifiez.

Chiffrement des données en transit dans un nouveau système de fichiers

Le chiffrement en transit sécurise le transfert de données entre des instances et des systèmes de fichiers montés à l'aide du chiffrement TLS 1.2 (Transport Layer Security). Pour plus d'informations sur le chiffrement en transit et le service de stockage de fichiers, voir Utilisation du chiffrement TLS en transit.

Vous spécifiez le chiffrement en transit indépendamment du chiffrement au repos. Les données en transit sont chiffrées à l'aide d'un certificat TLS toujours géré par Oracle, que les données au repos soient chiffrées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur.

Notez que lorsque vous utilisez le service File Storage pour provisionner des PVC, le chiffrement en transit n'est pris en charge que lorsque les instances de calcul hébergeant des noeuds de travail exécutent Oracle Linux 7 et Oracle Linux 8.

Pour utiliser le plugiciel de volume CSI pour créer dynamiquement un nouveau système de fichiers avec chiffrement en transit :

  1. Suivez les instructions sous Configuration du chiffrement en transit pour Linux pour configurer le chiffrement en transit dans le système de fichiers. Plus précisément :
    1. Terminez les préalables en configurant les règles de sécurité suivantes dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
      • Règle de trafic entrant avec état permettant le trafic TCP vers un intervalle de ports de destination de 2051, à partir de tous les ports d'une adresse IP source ou d'un bloc CIDR de votre choix, ou à partir de toutes les sources.
      • Règle de trafic sortant avec état autorisant le trafic TCP à partir d'un intervalle de ports sources de 2051, vers tous les ports d'une adresse IP de destination ou d'un bloc CIDR de votre choix, ou vers toutes les destinations.

      Pour plus d'informations, voir Scénario C : La cible de montage et l'instance utilisent le chiffrement en transit TLS.

    2. Sur chaque noeud de travail, installez l'ensemble oci-fss-utils à partir du référentiel yum Oracle Linux. Voir Configuration du chiffrement en transit pour Linux.
  2. Suivez les instructions sous Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI et incluez le paramètre encryptInTransit: "true" dans la définition de la classe de stockage. Les données sont chiffrées en transit, à l'aide d'une clé de chiffrement gérée par Oracle.

Provisionnement d'une revendication de volume persistant sur un système de fichiers existant

Pour créer une revendication de volume persistant sur un système de fichiers existant dans le service File Storage (à l'aide de clés de chiffrement gérées par Oracle pour chiffrer les données au repos) :

  1. Créez un système de fichiers avec une cible de montage dans le service File Storage, en sélectionnant l'option de chiffrement Chiffrer à l'aide des clés gérées par Oracle. Voir Création d'un système de fichiers.
  2. Créez des règles de sécurité dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers et pour les noeuds de travail de la grappe.
    Les règles de sécurité à créer dépendent des emplacements de réseau relatifs de la cible de montage et des noeuds de travail, selon les scénarios suivants :

    Ces scénarios, les règles de sécurité à créer et leur emplacement, sont entièrement décrits dans la documentation du service File Storage (voir Configuration des règles de sécurité de réseau VCN pour le service de stockage de fichiers).

  3. Créez une valeur actualisée sauvegardée par le système de fichiers dans le service de stockage de fichiers comme suit :
    1. Créez un fichier manifeste pour définir un PV et, dans la section csi:, définissez :

      • driver à fss.csi.oraclecloud.com
      • volumeHandle à <FileSystemOCID>:<MountTargetIP>:<path>
        où :
        • <FileSystemOCID> est l'OCID du système de fichiers défini dans le service de stockage de fichiers.
        • <MountTargetIP> est l'adresse IP affectée à la cible de montage.
        • <path> est le chemin de montage du système de fichiers par rapport à l'adresse IP de la cible de montage, en commençant par une barre oblique.
        Par exemple : ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1

      Par exemple, le fichier manifeste suivant (nommé fss-pv.yaml) définit une valeur ajoutée appelée fss-pv soutenue par un système de fichiers dans le service de stockage de fichiers :

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: fss-pv
      spec:
        capacity:
          storage: 50Gi
        volumeMode: Filesystem
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: fss.csi.oraclecloud.com
          volumeHandle: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
    2. Créez le fichier PV à partir du fichier manifeste en entrant :
      kubectl create -f <filename>

      Par exemple :

      kubectl create -f fss-pv.yaml
  4. Créez une revendication de volume persistant provisionnée par la valeur actualisée que vous avez créée, comme suit :
    1. Créez un fichier manifeste pour définir la revendication de volume persistant et définissez les éléments suivants :
      • storageClassName à "". Notez que vous devez spécifier une valeur vide pour storageClassName, même si la classe de stockage n'est pas applicable dans le cas du provisionnement statique du stockage persistant. Si vous ne spécifiez pas de valeur vide pour storageClassName, la classe de stockage par défaut (oci-bv) est utilisée, ce qui entraîne une erreur.
      • volumeName au nom du point de vente que vous avez créé (par exemple, fss-pv)

      Par exemple, le fichier manifeste suivant (nommé fss-pvc.yaml) définit une revendication de volume persistant nommée fss-pvc qui est provisionnée par une valeur actualisée nommée fss-pv :

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-pvc
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: ""
        resources:
          requests:
            storage: 50Gi
        volumeName: fss-pv

      Notez que l'élément requests: storage: doit être présent dans le fichier manifeste de la revendication de volume persistant et que sa valeur doit correspondre à la valeur spécifiée pour l'élément capacity: storage: dans le fichier manifeste de la revendication de volume persistant. En outre, la valeur de l'élément requests: storage: est ignorée.

    2. Créez la revendication de volume persistant à partir du fichier manifeste en entrant :
      kubectl create -f <filename>
      Par exemple :
      kubectl create -f fss-pvc.yaml

La revendication de volume persistant est liée à la valeur actualisée potentielle soutenue par le système de fichiers du service de stockage de fichiers. Les données sont chiffrées au repos, à l'aide de clés de chiffrement gérées par Oracle.

Chiffrement des données au repos dans un système de fichiers existant

Le service File Storage chiffre toujours les données au repos, à l'aide de clés de chiffrement gérées par Oracle par défaut. Toutefois, vous avez la possibilité de chiffrer les systèmes de fichiers à l'aide de vos propres clés de chiffrement principales que vous gérez vous-même dans le service de chambre forte.

Selon la façon dont vous souhaitez chiffrer les données au repos, suivez les instructions ci-dessous :

  • Pour créer une revendication de volume persistant sur un système de fichiers à l'aide de clés de chiffrement gérées par Oracle pour chiffrer les données au repos, suivez les étapes sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant et sélectionnez l'option de chiffrement Chiffrer à l'aide de clés gérées par Oracle comme décrit. Les données sont chiffrées au repos à l'aide de clés de chiffrement gérées par Oracle.
  • Pour créer une revendication de volume persistant sur un système de fichiers à l'aide des clés de chiffrement principales que vous gérez pour chiffrer les données au repos, suivez les étapes sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant, mais sélectionnez l'option de chiffrement Chiffrer à l'aide des clés gérées par le client et spécifiez la clé de chiffrement principale dans le service de chambre forte. Les données sont chiffrées au repos à l'aide de la clé de chiffrement que vous spécifiez.

Chiffrement des données en transit dans un système de fichiers existant

Le chiffrement en transit sécurise le transfert de données entre des instances et des systèmes de fichiers montés à l'aide du chiffrement TLS v.1.2 (Transport Layer Security). Pour plus d'informations sur le chiffrement en transit et le service de stockage de fichiers, voir Utilisation du chiffrement TLS en transit.

Vous spécifiez le chiffrement en transit indépendamment du chiffrement au repos. Les données en transit sont chiffrées à l'aide d'un certificat TLS toujours géré par Oracle, que les données au repos soient chiffrées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur.

Notez que lorsque vous utilisez le service File Storage pour provisionner des PVC, le chiffrement en transit n'est pris en charge que lorsque les instances de calcul hébergeant des noeuds de travail exécutent Oracle Linux 7 et Oracle Linux 8.

Pour créer une revendication de volume persistant dans un système de fichiers où les données sont chiffrées en transit :

  1. Suivez les instructions sous Configuration du chiffrement en transit pour Linux pour configurer le chiffrement en transit dans le système de fichiers. Plus précisément :
    1. Terminez les préalables en configurant les règles de sécurité suivantes dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
      • Règle de trafic entrant avec état permettant le trafic TCP vers un intervalle de ports de destination de 2051, à partir de tous les ports d'une adresse IP source ou d'un bloc CIDR de votre choix, ou à partir de toutes les sources.
      • Règle de trafic sortant avec état autorisant le trafic TCP à partir d'un intervalle de ports sources de 2051, vers tous les ports d'une adresse IP de destination ou d'un bloc CIDR de votre choix, ou vers toutes les destinations.

      Pour plus d'informations, voir Scénario C : La cible de montage et l'instance utilisent TLS dans le chiffrement en transit.

    2. Sur chaque noeud de travail, installez l'ensemble oci-fss-utils à partir du référentiel yum Oracle Linux. Voir Configuration du chiffrement en transit pour Linux.
  2. Suivez les instructions sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant, en sélectionnant l'option Chiffrer à l'aide des clés gérées par Oracle ou l'option Chiffrer à l'aide des clés gérées par le client selon les besoins pour le chiffrement des données au repos. Toutefois, lors de la création du fichier manifeste pour définir une valeur actualisée, réglez encryptInTransit à "true" dans la section csi du fichier. Par exemple :

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: fss-encrypted-it-pv
    spec:
      capacity:
        storage: 50Gi
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: fss.csi.oraclecloud.com
        volumeHandle: ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
        volumeAttributes:
          encryptInTransit: "true"

Dépannage du provisionnement du service de stockage de fichiers pour les revendications de volume persistant

Le pod ne peut pas accéder au système de fichiers en raison d'autorisations insuffisantes

Description

Lorsqu'un pod tente d'accéder à un volume persistant soutenu par un système de fichiers dans le service de stockage de fichiers, la tentative peut échouer avec un message "Autorisation refusée".

Cause

Lors de la définition d'un PV soutenu par un système de fichiers dans le service de stockage de fichiers, vous réglez l'attribut accessModes de PV à ReadWriteMany et vous n'avez pas à spécifier de valeur pour l'attribut fsType de PV.

Le plugiciel de volume CSI est mis en oeuvre en tant qu'objet CSIDriver. Vous utilisez l'attribut fsGroupPolicy de l'objet CSIDriver pour contrôler si CSIDriver modifie la propriété et les autorisations d'un volume pour qu'elles correspondent à l'attribut fsGroup spécifié dans securityContext d'un pod qui monte le volume. La modification de la responsabilité et des autorisations du volume permet au pod d'accéder au volume après son montage.

Par défaut, l'attribut fsGroupPolicy de l'objet CSIDriver est réglé à ReadWriteOnceWithFSType, ce qui indique que CSIDriver doit examiner la définition PV pour déterminer s'il faut modifier la responsabilité du volume et les autorisations pour qu'elles correspondent à l'attribut fsGroup du pod, comme suit :

  • Si l'attribut fsType de PV est défini, CSIDriver modifie la propriété et les autorisations du volume pour qu'elles correspondent à l'attribut fsGroup spécifié dans securityContext du pod. Par conséquent, le volume est accessible au pod.
  • Si l'attribut fsType de PV n'est pas défini, CSIDriver ne modifie pas la responsabilité et les autorisations du volume. Le volume n'est accessible qu'aux processus en cours d'exécution en tant que racine. Par conséquent, un pod qui n'est pas en cours d'exécution en tant que racine reçoit le message "Autorisation refusée" lors de la tentative d'accès à un répertoire ou à un fichier dans le volume monté.

Voici comment vérifier que la raison pour laquelle un pod reçoit le message "Autorisation refusée" est parce que l'attribut fsGroupPolicy de l'objet CSIDriver est réglé à ReadWriteOnceWithFSType et que l'attribut fsType de l'objet PV n'est pas défini. Exécutez une commande sur le pod pour écrire un fichier dans un répertoire sur le volume monté, puis examinez les propriétés du fichier pour vérifier si le responsable du groupe correspond à l'attribut fsGroup spécifié dans securityContext du pod. Par exemple, supposons qu'un pod ait le manifeste suivant :

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    fsGroup: 2000
  containers:
  - name: sec-ctx-demo
    image: busybox:1.28
    command: [ "sh", "-c", "sleep 1h" ]
    volumeMounts:
    - name: sec-ctx-vol
      mountPath: /data/demo
  1. Exécutez une commande sur le pod pour écrire un fichier dans un répertoire sur le volume monté. Par exemple, en entrant :
    kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
  2. Examinez les propriétés du fichier nouvellement créé pour confirmer les droits d'accès. Par exemple, en entrant :
    kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"

    Idéalement, la sortie indique que le responsable du groupe du fichier est identique à celui spécifié par l'attribut fsGroup du pod, ce qui donne au pod l'accès au fichier. Par exemple :

    -rw-r--r-- 1 root 2000 6 Jun  6 20:08 testfile

    Toutefois, si l'attribut fsGroupPolicy de l'objet CSIDriver est réglé à ReadWriteOnceWithFSType et que l'attribut fsType de l'objet PV n'est pas défini, la sortie affiche le responsable du groupe du fichier en tant que racine et le pod n'a pas accès au fichier. Par exemple :

    -rw-r--r-- 1 root root 6 Jun  6 20:08 testfile

Pour plus d'informations, voir Politique fsGroup du volume CSI dans la documentation sur Kubernetes.

Action

Si vous connaissez l'ID groupe du responsable du volume des fichiers auxquels le pod accède et que l'ID groupe du responsable du volume n'est pas la racine (0), nous vous recommandons de spécifier un groupe supplémentaire dans securityContext dans la spécification du pod. Par exemple, si l'ID utilisateur du responsable du volume est 0 (racine) et que l'ID groupe du responsable du volume est 1000, spécifiez 1000 en tant que groupe supplémentaire dans securityContext du pod comme suit :


spec:
  securityContext:
    supplementalGroups: [1000]

Si vous ne pouvez pas affecter l'ID groupe du responsable du volume en tant que groupe supplémentaire dans securityContext du pod, nous vous suggérons deux solutions alternatives :

  • Solution de remplacement 1 : Activez l'objet CSIDriver pour modifier la responsabilité et les autorisations du volume afin qu'elles correspondent à l'attribut fsGroup spécifié dans securityContext du pod.
  • Solution de remplacement 2 : Utilisez les options d'exportation Squash du système de fichiers pour permettre aux pods d'accéder aux fichiers et aux répertoires du volume sans modifier la responsabilité du volume.

Avant de choisir une solution, tenez compte des avantages et des inconvénients décrits pour chaque solution.

Solution de remplacement 1 : Activez l'objet CSIDriver pour modifier la responsabilité du volume et les autorisations afin qu'elles correspondent à l'attribut fsGroup spécifié dans securityContext du pod

Pour permettre à l'objet CSIDriver de modifier la responsabilité du volume et les autorisations pour qu'elles correspondent à l'attribut fsGroup spécifié dans securityContext du pod, réglez l'attribut fsGroupPolicy de l'objet CSIDriver à File comme suit :

  1. Obtenez le fichier de configuration CSIDriver en entrant :
    kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
  2. Dans un éditeur de texte, modifiez le fichier fss_csi_driver.yaml et remplacez l'attribut fsGroupPolicy de l'objet CSIDriver de ReadWriteOnceWithFSType par File.

    Par exemple, modifiez :

    apiVersion: storage.k8s.io/v1
    kind: CSIDriver
    metadata:
      creationTimestamp: "<timestamp>"
      name: fss.csi.oraclecloud.com
      resourceVersion: "<version>"
      uid: <identifier>
    spec:
      attachRequired: false
      fsGroupPolicy: ReadWriteOnceWithFSType
      podInfoOnMount: false
      requiresRepublish: false
      storageCapacity: false
      volumeLifecycleModes:
      - Persistent 

    en :

    apiVersion: storage.k8s.io/v1
    kind: CSIDriver
    metadata:
      creationTimestamp: "<timestamp>"
      name: fss.csi.oraclecloud.com
      resourceVersion: "<version>"
      uid: <identifier>
    spec:
      attachRequired: false
      fsGroupPolicy: File
      podInfoOnMount: false
      requiresRepublish: false
      storageCapacity: false
      volumeLifecycleModes:
      - Persistent 

    Modifiez uniquement la valeur de fsGroupPolicy. Ne modifiez aucune autre valeur.

  3. Enregistrez et fermez le fichier fss_csi_driver.yaml.
  4. Supprimez l'objet CSIDriver existant en entrant :
    kubectl delete csiDriver fss.csi.oraclecloud.com
  5. Créez le nouvel objet CSIDriver en entrant :
    kubectl apply -f fss_csi_driver.yaml 
  6. Redémarrez le pod qui a rencontré le message "Autorisation refusée".

Choses à considérer avant de choisir cette solution :

  • Lors du montage d'un volume volumineux avec de nombreux fichiers et répertoires imbriqués, vous remarquerez peut-être que le montage du volume prend beaucoup de temps. Cette latence de montage de volume est due au fait que, lorsque fsGroupPolicy est réglé à File, Kubernetes modifie de manière récursive la propriété de volume de tous les fichiers et répertoires imbriqués en appelant chown() et chmod(). Pour réduire la latence de montage du volume, essayez de régler l'attribut fsGroupChangePolicy à "OnRootMismatch" dans securityContext du pod, comme suit :
    securityContext:
      fsGroup: <sample-fsGroup>
      fsGroupChangePolicy: "OnRootMismatch"

    Le réglage de fsGroupChangePolicy à "OnRootMismatch" réduit la latence de montage du volume, car Kubernetes ne modifie la responsabilité du volume que dans les cas où les autorisations de fichier de niveau racine ne correspondent pas au paramètre fsGroup du pod.

  • Les ID groupe que vous spécifiez en tant que valeurs de fsGroup pour tous les pods accédant à un volume sont ajoutés en tant que responsables de groupe supplémentaires du volume. Par conséquent, l'accès à ce volume est limité aux ID groupe que vous avez spécifiés en tant que valeurs de fsGroup.

    Par exemple, si vous créez deux pods avec des valeurs fsGroup différentes qui montent tous les deux le même volume, l'ID groupe que vous spécifiez pour fsGroup du deuxième pod est le groupe du responsable du volume et le premier pod a toujours accès au volume.

  • Si Kubernetes détecte une non-concordance de propriété entre le responsable du volume et la valeur fsGroup définie dans la spécification de pod, Kubernetes modifie la propriété de volume de tous les fichiers. Si le volume contient de nombreux fichiers et répertoires imbriqués, vous remarquerez peut-être que le montage du volume prend beaucoup de temps.

Solution alternative 2 : Utilisez les options d'exportation Squash du système de fichiers pour permettre aux pods d'accéder aux fichiers et aux répertoires d'un volume sans modifier la propriété du volume.

Attention

Cette solution nécessite que vous régliez l'option d'exportation Squash du système de fichiers à Tout. Le réglage de Squash à Tout accorde un accès illimité au système de fichiers à tous les processus s'exécutant sur le noeud où le volume est monté (y compris à d'autres pods). Par conséquent, avant de choisir cette solution, vérifiez la conformité à vos exigences de sécurité.

Vous pouvez activer les pods pour accéder aux fichiers et aux répertoires d'un volume sans modifier la responsabilité du volume en définissant les options d'exportation Squash du système de fichiers. Les options d'exportation Squash déterminent si les clients source qui accèdent au système de fichiers ont leur ID utilisateur (UID) et ID groupe (GID) remappés à UID squash et GID squash. Pour plus d'informations, voir Options d'exportation NFS.

Si vous décidez d'utiliser cette solution, vous ne modifiez pas l'attribut fsGroupPolicy de l'objet CSIDriver à File.

Pour définir les options d'exportation Interruption lors du provisionnement d'une revendication de volume persistant sur un système de fichiers existant :

  1. Ouvrez le menu de navigation et sélectionnez Stockage. Sous Stockage de fichiers, sélectionnez Systèmes de fichiers.
  2. Dans la section Portée de la liste, sous Compartiment, sélectionnez un compartiment. Tous les systèmes de fichiers dans le compartiment sélectionné sont affichés.
  3. Sélectionnez le nom du système de fichiers pour lequel vous souhaitez définir les options d'exportation.
  4. Dans la page des détails du système de fichiers, sous Ressources, sélectionnez Exportations.
  5. Dans la liste Exportations, sélectionnez le nom de l'exportation pour laquelle vous voulez définir des options.
  6. Dans la page des détails de l'exportation, sous Options d'exportation client NFS, sélectionnez Modifier les options.
  7. Dans le panneau Modifier les options, mettez à jour les options d'exportation Squash comme suit :

    • Squash : Remplacez par All (Tout).
    • UID d'arrêt : Remplacez par l'UID du responsable du volume ou par l'UID racine (0).
    • GUID d'interruption : Passez à l'IDG du responsable du volume ou à l'IDG racine (0).

    Pour plus d'informations, voir Options d'exportation NFS.

  8. Sélectionnez Mettre à jour.

Pour définir les options d'exportation Interruption lors du provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers :

  1. Suivez les instructions sous Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI. Toutefois, lorsque vous créez le fichier manifeste pour la classe de stockage qui utilise le provisionneur fss.csi.oraclecloud.com, réglez le paramètre exportOptions pour spécifier des valeurs pour les options d'exportation Squash comme suit :
    exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"

    Par exemple :

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: fss-dyn-storage
    provisioner: fss.csi.oraclecloud.com
    parameters:
      availabilityDomain: US-ASHBURN-AD-1
      mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
      compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
      kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
      exportPath: /FileSystem1
      exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"
      encryptInTransit: "true"
  2. Créez la classe de stockage à partir du fichier manifeste en entrant :
    kubectl create -f <filename>
    Par exemple :
    kubectl create -f fss-dyn-st-class.yaml
  3. Suivez les instructions restantes sous Provisionnement d'une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI pour créer des règles de sécurité et la revendication de volume persistant.

    Le plugiciel de volume CSI crée un nouveau volume persistant et un nouveau système de fichiers dans le service de stockage de fichiers. Le nouveau système de fichiers comporte les options d'exportation Squash que vous avez spécifiées dans la classe de stockage.

Choses à considérer avant de choisir cette solution :

  • Le réglage de Squash à Tout accorde un accès illimité au système de fichiers à tous les processus s'exécutant sur le noeud où le volume est monté (y compris à d'autres pods). Par conséquent, avant de choisir cette solution, vérifiez la conformité à vos exigences de sécurité.
  • Contrairement à la solution de remplacement 1, la responsabilité d'un volume ne change pas chaque fois que le volume est monté par un nouveau pod dont l'attribut fsGroup est réglé à un autre groupe.
  • Contrairement à la solution alternative 1, il n'y a pas de latence de montage de volume lors du montage d'un volume volumineux avec de nombreux fichiers et répertoires imbriqués, car Kubernetes ne modifie pas de manière récursive la responsabilité du volume des fichiers et répertoires imbriqués.
  • Contrairement à la solution de remplacement 1, vous ne modifiez pas le fichier fss_csi_driver.yaml et ne remplacez pas l'attribut fsGroupPolicy de l'objet CSIDriver par File. À la place, la valeur d'attribut par défaut fsGroupPolicy: ReadWriteOnceWithFSType garantit que l'objet CSIDriver utilise les fonctions fournies par le service de stockage de fichiers.