Provisionnement des demandes de volume persistant dans le service File Storage
Découvrez comment provisionner des demandes de volume persistant pour les clusters créés à l'aide de Kubernetes Engine (OKE) en montant des systèmes de fichiers à partir du service File Storage.
Le service Oracle Cloud Infrastructure File Storage fournit un système de fichiers réseau durable, évolutif, distribué et adapté à l'entreprise. Vous utilisez le module d'extension de volume CSI pour connecter des clusters à des systèmes de fichiers dans le service File Storage.
Vous pouvez utiliser le service File Storage pour provisionner des demandes de volume persistant (PVC) de deux manières :
- En définissant et en créant une classe de stockage (en indiquant éventuellement l'OCID d'une cible de montage existante), puis en définissant et en créant une demande de volume persistant basée sur la classe de stockage. Lorsque vous créez la demande de volume persistant, le module d'extension de volume CSI crée de manière dynamique un nouveau système de fichiers de service File Storage et un nouveau volume persistant soutenu par le nouveau système de fichiers. Reportez-vous à la section Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension 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 installation PV soutenue par le nouveau système de fichiers, et enfin en définissant une nouvelle demande de volume persistant. Lorsque vous créez la demande de volume persistant, Kubernetes Engine la lie à la demande de volume persistant soutenue par le service File Storage. Reportez-vous à la section Provisionnement d'une demande de volume persistant sur un système de fichiers existant.
Tenez compte des éléments suivants :
- Lorsque vous utilisez le module d'extension de volume CSI pour créer dynamiquement un système de fichiers, ne mettez pas à jour manuellement les propriétés du nouveau volume persistant créé par le module d'extension de volume CSI.
- Les noms des systèmes de fichiers, des cibles de montage et des exports de service File Storage créés dynamiquement par le module d'extension de volume CSI commencent par
csi-fss-
. - Tous les systèmes de fichiers, cibles de montage et exports de service File Storage créés dynamiquement par le module d'extension de volume CSI apparaissent dans la console. Toutefois, n'utilisez pas la console (ou l'interface de ligne de commande ou 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 module d'extension de volume CSI ne sont pas rapprochées des objets Kubernetes.
- Si vous supprimez une demande de volume persistant liée à une demande de volume persistant soutenue par un système de fichiers créé par le module d'extension de volume CSI, le module d'extension de volume CSI supprime le système de fichiers et la demande de volume persistant créée. Si le module d'extension de volume CSI a également créé une cible de montage (car vous n'avez pas indiqué l'OCID d'une cible de montage existante dans la définition de classe de stockage), le module d'extension de volume CSI supprime également la cible de montage. Si vous avez indiqué l'OCID d'une cible de montage existante, le module d'extension de volume CSI ne supprime pas la cible de montage.
- Le provisionnement d'une demande de volume persistant sur un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI est disponible lorsque des clusters exécutent Kubernetes 1.22 ou une version ultérieure. Reportez-vous à Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI.
- Le provisionnement d'une demande de volume persistant en la liant à une demande de volume persistant soutenue par un système de fichiers existant est disponible lorsque des clusters exécutent Kubernetes 1.18 ou une version ultérieure. Reportez-vous à Provisionnement d'une demande de volume persistant sur un système de fichiers existant.
Crypter les données inactives et en transit avec le service File Storage
Lorsque vous utilisez le service File Storage pour provisionner des demandes de volume persistant, vous indiquez le cryptage en transit indépendamment du cryptage au repos.
Le service File Storage crypte toujours les données inactives à l'aide de clés de cryptage gérées par Oracle par défaut. Toutefois, vous avez la possibilité d'indiquer le cryptage au repos à l'aide de vos propres clés de cryptage maître que vous gérez vous-même dans le service Vault. La procédure de spécification du cryptage au repos dépend du provisionnement ou non d'une demande de volume persistant sur :
- un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI (reportez-vous à Cryptage de données inactives sur un nouveau système de fichiers)
- un système de fichiers existant que vous avez créé manuellement (reportez-vous à la section Encrypting Data At Rest on an Existing File System)
Pour gérer vos propres clés de cryptage maître afin de crypter les données inactives, vous devez :
- Créez une clé de cryptage maître appropriée dans Vault (ou obtenez l'OCID d'une telle clé). Reportez-vous à Gestion des clés.
- Créez une stratégie accordant l'accès à la clé de cryptage maître. Reportez-vous à Création d'une stratégie pour accéder aux clés de cryptage gérées par l'utilisateur pour le cryptage de volumes d'initialisation, de volumes de blocs et/ou de systèmes de fichiers
Le service File Storage peut éventuellement crypter les données en transit. Si vous indiquez un cryptage en transit, les données en transit sont cryptées à l'aide d'un certificat TLS (Transport Layer Security) toujours géré par Oracle, que les données inactives soient cryptées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur. Le cryptage en transit sécurise les données transférées entre les instances et les systèmes de fichiers montés à l'aide du cryptage TLS version 1.2. Pour plus d'informations sur le cryptage en transit et le service File Storage, reportez-vous à Utilisation du cryptage TLS en transit. Le mode de spécification du cryptage en transit dépend du provisionnement ou non d'une demande de volume persistant sur :
- un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI (reportez-vous à Cryptage de données en transit sur un nouveau système de fichiers)
- un système de fichiers existant que vous avez créé manuellement (reportez-vous à Cryptage de données en transit sur un système de fichiers existant)
Lorsque vous utilisez le service File Storage pour provisionner des demandes de volume persistant, le cryptage en transit est pris en charge uniquement lorsque les instances de calcul hébergeant des noeuds de processus actif exécutent Oracle Linux 7 et Oracle Linux 8.
Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI
Les prérequis suivants s'appliquent lors du provisionnement d'une demande de volume persistant sur un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI :
- Les clusters doivent exécuter Kubernetes 1.22 ou une version ultérieure pour provisionner une demande de volume persistant sur un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI.
-
Des stratégies IAM appropriées doivent exister pour permettre au module d'extension de volume CSI de créer et de gérer des ressources File Storage. Notamment :
- Stratégie permettant de créer et/ou de gérer des systèmes de fichiers, des cibles de montage et des chemins d'export. Par exemple :
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
- Stratégie permettant d'utiliser des cartes d'interface réseau virtuelles, 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'
- Stratégie permettant de créer et/ou de gérer des systèmes de fichiers, des cibles de montage et des chemins d'export. Par exemple :
-
Si le compartiment auquel un pool de noeuds, un sous-réseau de noeud de processus actif, un système de fichiers ou une cible de montage appartient est différent du compartiment auquel un cluster appartient, des stratégies IAM doivent exister pour permettre au module d'extension 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 indiquer une clé de cryptage maître gérée par l'utilisateur à partir du service Vault afin de crypter les données dans les systèmes de fichiers, les stratégies IAM appropriées doivent exister pour permettre au module d'extension de volume CSI d'accéder à cette clé de cryptage maître. Reportez-vous à Création d'une stratégie pour accéder aux clés de cryptage gérées par l'utilisateur pour le cryptage de volumes d'initialisation, de volumes de blocs et/ou de systèmes de fichiers.
Pour provisionner dynamiquement une demande de volume persistant sur un nouveau système de fichiers créé dynamiquement par le module d'extension de volume CSI dans le service File Storage, procédez comme suit :
- (Facultatif) Créez une cible de montage dans le service File Storage. Reportez-vous à Création d'une cible de montage.
Le module d'extension de volume CSI requiert une cible de montage active (c'est-à-dire une cible de montage avec une adresse IP affectée) pour créer un système de fichiers. Si vous ne créez pas de cible de montage à l'avance, indiquez le sous-réseau dans lequel le module d'extension de volume CSI doit créer une cible de montage lorsque vous définissez la classe de stockage.
- Définissez une nouvelle classe de stockage qui utilise le provisionneur
fss.csi.oraclecloud.com
:- Créez un fichier manifeste (par exemple, dans un fichier nommé fss-dyn-st-class.yaml), indiquez le nom de la nouvelle classe de stockage et indiquez les valeurs des 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>
: requis. Nom de votre choix pour la classe de stockage.availabilityDomain: <ad-name>
: requis. Nom du domaine de disponibilité dans lequel créer le système de fichiers (et dans lequel créer la cible de montage, si aucun OCID de cible de montage existant n'est indiqué). Par exemple,US-ASHBURN-AD-1
. Pour connaître le nom de domaine de disponibilité à utiliser, exécutez la commande de l'interface de ligne de commandeoci iam availability-domain list
(ou utilisez l'opération ListAvailabilityDomains). Pour plus d'informations, reportez-vous à Noms de domaine de disponibilité de votre location.mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
: requis. OCID d'une cible de montage active existante (mountTargetOcid: <mt-ocid>
) ou OCID d'un sous-réseau dans lequel créer une cible de montage (mountTargetSubnetOcid: <mt-subnet-ocid>
). IndiquezmountTargetOcid
oumountTargetSubnetOcid
. Si vous indiquezmountTargetOcid
etmountTargetSubnetOcid
dans la définition de classe de stockage, la cible de montage existante indiquée parmountTargetOcid
est utilisée etmountTargetSubnetOcid
est ignoré. Par exemple :mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
compartmentOcid: <compartment-ocid>
: facultatif. OCID du compartiment auquel le nouveau système de fichiers (et la nouvelle cible de montage, si aucun OCID de cible de montage existant n'est indiqué) doit appartenir. S'il n'est pas indiqué, il s'agit par défaut du même compartiment que le cluster. Par exemple,compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
kmsKeyOcid: <key-ocid>
: facultatif. OCID d'une clé de cryptage maître que vous gérez, avec laquelle crypter les données inactives. Si aucune valeur n'est indiquée, les données sont cryptées lorsqu'elles sont inactives à l'aide de clés de cryptage gérées par Oracle. Reportez-vous à la section Encrypting Data At Rest on a New File System. Par exemple,kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
exportPath: <path>
: facultatif. Chemin d'un export qui identifie de manière unique le système de fichiers sur la cible de montage. Le chemin d'export doit commencer par une barre oblique (/) suivie d'une séquence d'éléments (de zéro à plusieurs) séparés par des barres obliques. Par exemple,/FileSystem1
. Pour plus d'informations, reportez-vous à Chemins dans les systèmes de fichiers.Si vous incluez
exportPath: <path>
dans une définition de classe de stockage, n'indiquez pas de chemin (en tant que chemin ou sous-chemin d'un chemin existant) qui existe déjà. Si vous indiquez un chemin qui existe déjà, une erreur est renvoyée car plusieurs systèmes de fichiers avec la même cible de montage ne peuvent pas avoir le même chemin d'export. Par conséquent, si vous incluezexportPath: <path>
dans la définition de classe de stockage, utilisez uniquement cette définition de classe de stockage pour créer un système de fichiers.Si vous n'incluez pas
exportPath: <path>
dans la définition de classe de stockage, le chemin est par défaut le nom d'affichage du système de fichiers créé par le module d'extension de volume CSI (en commençant par/csi-fss-
).exportOptions: "[{<options-in-json-format>}]"
Facultatif. Ensemble de paramètres (au format JSON valide) dans l'export qui indique le niveau d'accès accordé aux clients NFS lorsqu'ils se connectent à une cible de montage. Au sein d'un export, une entrée d'options d'export NFS peut définir l'accès à une adresse IP unique ou à une plage de blocs CIDR. Pour plus d'informations, reportez-vous à Utilisation des exportations et des options d'export NFS. Si aucune valeur n'est indiquée, 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 si les données doivent être chiffrées en transit. Si vous indiquez"true"
, veillez à effectuer les étapes de configuration décrites à la section Cryptage de données en transit sur un nouveau système de fichiers. S'il n'est pas spécifié, 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 une balise définie pour le nouveau système de fichiers. Par exemple,oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'
Pour appliquer des balises définies à partir d'un espace de noms de balise appartenant à un compartiment à une ressource de système de fichiers appartenant à un autre compartiment, vous devez inclure une instruction de stratégie permettant au cluster d'utiliser l'espace de noms de balise. Reportez-vous à Stratégie IAM supplémentaire lorsqu'un cluster et un espace de noms de balise se trouvent dans des compartiments différents.
oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'
Facultatif. Spécifie une balise à format 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"
- Créez la classe de stockage à partir du fichier manifeste en saisissant ce qui suit :
kubectl create -f <filename>
Par exemple :kubectl create -f fss-dyn-st-class.yaml
- Créez un fichier manifeste (par exemple, dans un fichier nommé fss-dyn-st-class.yaml), indiquez le nom de la nouvelle classe de stockage et indiquez les valeurs des paramètres obligatoires et facultatifs :
-
Créez des règles de sécurité dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité pour la cible de montage référencée dans la définition de classe de stockage (ou créée par) et pour les noeuds de processus actif du cluster.
Les règles de sécurité à créer dépendent des emplacements réseau relatifs de la cible de montage et des noeuds de processus actif, selon les scénarios suivants :Ces scénarios, les règles de sécurité à créer et l'emplacement où les créer, sont entièrement décrits dans la documentation du service File Storage (reportez-vous à Configuration des règles de sécurité VCN pour File Storage).
- Créez une demande de volume persistant à provisionner par le nouveau système de fichiers dans le service File Storage, comme suit :
- Créez un fichier manifeste pour définir la demande 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>
: requis. 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
: requis.accessModes:
doit indiquerReadWriteMany
.storage: 50Gi
: requis. Kubernetes requiert que vous indiquiez une valeur pourstorage:
dans le manifeste de demande de volume persistant. Cependant, le service File Storage ne prend pas en charge la spécification d'une taille de système de fichiers et crée un système de fichiers avec une taille par défaut, quelle que soit la valeur indiquée pourstorage:
.
Par exemple, le fichier manifeste suivant (nommé
fss-dyn-claim.yaml
) définit une demande de volume persistant nomméefss-dynamic-claim
provisionnée par le système de fichiers défini dans la classe de stockagefss-dyn-storage
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-dynamic-claim spec: accessModes: - ReadWriteMany storageClassName: "fss-dyn-storage" resources: requests: storage: 50Gi
- Créez la demande de volume persistant à partir du fichier manifeste en saisissant la commande suivante :
kubectl create -f <filename>
Par exemple :kubectl create -f fss-dyn-claim.yaml
Un nouveau PVC est créé. Le module d'extension de volume CSI crée un volume persistant et un système de fichiers dans le service File Storage (ainsi qu'une nouvelle cible de montage si vous n'avez pas indiqué de cible de montage existante).
Le nouveau PVC est lié au nouveau PV. Les données sont cryptées lorsqu'elles sont inactives à l'aide de clés de cryptage gérées par Oracle ou par vous.
- Créez un fichier manifeste pour définir la demande de volume persistant :
- 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 demande persistante 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
- Utilisez la nouvelle PVC lors de la création d'autres objets, tels que des pods. Par exemple, vous pouvez créer un 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
-
Après avoir créé un pod comme décrit dans l'exemple de l'étape précédente, vous pouvez vérifier que le pod utilise la nouvelle demande de volume persistant en saisissant ce qui suit :
kubectl describe pod nginx
Si vous prévoyez une exigence fréquente de créer dynamiquement des 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 d'informations, reportez-vous à la documentation Kubernetes.
Chiffrement des données inactives sur un nouveau système de fichiers
Le service File Storage crypte toujours les données inactives à l'aide de clés de cryptage gérées par Oracle par défaut. Toutefois, vous avez la possibilité de crypter les données inactives à l'aide de vos propres clés de cryptage maître que vous gérez vous-même dans le service Vault.
En fonction de la façon dont vous souhaitez crypter les données au repos, suivez les instructions appropriées ci-dessous :
- Pour utiliser le module d'extension de volume CSI afin de créer dynamiquement un système de fichiers qui utilise des clés de cryptage gérées par Oracle pour crypter les données inactives, suivez les étapes décrites dans Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI et n'incluez pas le paramètre
kmsKeyOcid: <key-ocid>
dans la définition de classe de stockage. Les données sont cryptées lorsqu'elles sont inactives à l'aide de clés de cryptage gérées par Oracle. - Pour utiliser le module d'extension de volume CSI afin de créer de manière dynamique un système de fichiers qui utilise des clés de cryptage maître que vous gérez pour crypter les données inactives, suivez les étapes décrites dans Provisionnement d'un PVC sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI, incluez le paramètre
kmsKeyOcid: <key-ocid>
dans la définition de classe de stockage et indiquez l'OCID de la clé de cryptage maître dans le service Vault. Les données sont cryptées lorsqu'elles sont inactives, à l'aide de la clé de cryptage indiquée.
Chiffrement des données en transit sur un nouveau système de fichiers
Le cryptage en transit sécurise les données transférées entre les instances et les systèmes de fichiers montés à l'aide du cryptage TLS 1.2 (Transport Layer Security). Pour plus d'informations sur le cryptage en transit et le service File Storage, reportez-vous à Utilisation du cryptage TLS en transit.
Vous spécifiez le cryptage en transit indépendamment du cryptage au repos. Les données en transit sont cryptées à l'aide d'un certificat TLS toujours géré par Oracle, que les données inactives soient cryptées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur.
Lorsque vous utilisez le service File Storage pour provisionner des demandes de volume persistant, le cryptage en transit est pris en charge uniquement lorsque les instances de calcul hébergeant des noeuds de processus actif exécutent Oracle Linux 7 et Oracle Linux 8.
Pour utiliser le module d'extension de volume CSI afin de créer dynamiquement un système de fichiers avec cryptage en transit, procédez comme suit :
- Suivez les instructions de la section Setting Up In-Transit Encryption for Linux pour configurer le cryptage en transit sur le système de fichiers. Notamment :
- Complétez les prérequis en configurant les règles de sécurité suivantes dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
- Règle entrante avec conservation de statut autorisant le trafic TCP vers une plage de ports de destination de 2051, soit à partir de tous les ports d'une adresse IP source ou d'un bloc CIDR de votre choix, soit à partir de toutes les sources.
- Règle sortante avec conservation de statut autorisant le trafic TCP à partir d'une plage de ports source de 2051, soit vers tous les ports d'une adresse IP de destination ou d'un bloc CIDR de votre choix, soit vers toutes les destinations.
Pour plus d'informations, reportez-vous à Scénario C : la cible de montage et l'instance utilisent le cryptage en transit TLS.
- Téléchargez le package
oci-fss-utils
sur chaque noeud de processus actif. Notez que vous devez accepter le contrat de licence. Reportez-vous à Tâche 1 : téléchargement du package OCI-FSS-UTILS. - Installez le package
oci-fss-utils
sur chaque noeud de processus actif. Reportez-vous à Tâche 2 : installation du package OCI-FSS-UTILS sur Oracle Linux ou CentOS.
- Complétez les prérequis en configurant les règles de sécurité suivantes dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
-
Suivez les instructions de la section Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI et incluez le paramètre
encryptInTransit: "true"
dans la définition de classe de stockage. Les données sont cryptées pendant leur transit à l'aide d'une clé de cryptage gérée par Oracle.
Provisionnement d'une demande de volume persistant sur un système de fichiers existant
Pour créer une demande de volume persistant sur un système de fichiers existant dans le service File Storage (à l'aide de clés de cryptage gérées par Oracle pour crypter les données inactives), procédez comme suit :
- Créez un système de fichiers avec une cible de montage dans le service File Storage, en sélectionnant l'option de cryptage Crypter à l'aide des clés gérées par Oracle. Reportez-vous à Création d'un système de fichiers.
- Créez des règles de sécurité dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité à la fois pour la cible de montage qui exporte le système de fichiers et pour les noeuds de processus actif du cluster.Les règles de sécurité à créer dépendent des emplacements réseau relatifs de la cible de montage et des noeuds de processus actif, selon les scénarios suivants :
Ces scénarios, les règles de sécurité à créer et l'emplacement où les créer, sont entièrement décrits dans la documentation du service File Storage (reportez-vous à Configuration des règles de sécurité VCN pour File Storage).
- Créez un PV soutenu par le système de fichiers dans le service File Storage comme suit :
-
Créez un fichier manifeste pour définir une valeur PV et, dans la section
csi:
, définissez les éléments suivants :driver
àfss.csi.oraclecloud.com
volumeHandle
à<FileSystemOCID>:<MountTargetIP>:<path>
où :<FileSystemOCID>
est l'OCID du système de fichiers défini dans le service File Storage.<MountTargetIP>
est l'adresse IP affectée à la cible de montage.<path>
est le chemin de montage vers le système de fichiers par rapport à l'adresse IP de la cible de montage, en commençant par une barre oblique.
ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
Par exemple, le fichier manifeste suivant (nommé fss-pv.yaml) définit une PV nommée
fss-pv
soutenue par un système de fichiers dans le service File Storage :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
- Créez le fichier PV à partir du fichier manifeste en saisissant ce qui suit :
kubectl create -f <filename>
Par exemple :
kubectl create -f fss-pv.yaml
-
- Créez une PVC provisionnée par la PV que vous avez créée, comme suit :
- Créez un fichier manifeste pour définir la demande de volume persistant et définir les éléments suivants :
- De
storageClassName
à""
. Vous devez indiquer une valeur vide pourstorageClassName
, même si la classe de stockage n'est pas applicable dans le cas du provisionnement statique du stockage persistant. Si vous n'indiquez pas de valeur vide pourstorageClassName
, la classe de stockage par défaut (oci-bv
) est utilisée, ce qui entraîne une erreur. volumeName
pour le nom de la PV que vous avez créée (par exemple,fss-pv
)
Par exemple, le fichier manifeste suivant (nommé
fss-pvc.yaml
) définit une demande de volume persistant nomméefss-pvc
provisionnée par une demande de volume persistant nomméefss-pv
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 50Gi volumeName: fss-pv
L'élément
requests: storage:
doit être présent dans le fichier manifeste de la demande de volume persistant et sa valeur doit correspondre à la valeur spécifiée pour l'élémentcapacity: storage:
dans le fichier manifeste de la demande de volume persistant. En dehors de cela, la valeur de l'élémentrequests: storage:
est ignorée. - De
- Créez la demande de volume persistant à partir du fichier manifeste en saisissant la commande suivante :
kubectl create -f <filename>
Par exemple :kubectl create -f fss-pvc.yaml
- Créez un fichier manifeste pour définir la demande de volume persistant et définir les éléments suivants :
La demande de volume persistant est liée à la demande de modification soutenue par le système de fichiers du service File Storage. Les données sont cryptées lorsqu'elles sont inactives à l'aide de clés de cryptage gérées par Oracle.
Chiffrement des données inactives sur un système de fichiers existant
Le service File Storage crypte toujours les données inactives à l'aide de clés de cryptage gérées par Oracle par défaut. Toutefois, vous avez la possibilité de crypter les systèmes de fichiers à l'aide de vos propres clés de cryptage maître que vous gérez vous-même dans le service Vault.
En fonction de la façon dont vous souhaitez crypter les données au repos, suivez les instructions appropriées ci-dessous :
- Pour créer une demande de volume persistant sur un système de fichiers à l'aide de clés de cryptage gérées par Oracle pour crypter les données au repos, suivez les étapes décrites dans Provisionnement d'une demande de volume persistant sur un système de fichiers existant et sélectionnez l'option de cryptage Crypter à l'aide de clés gérées par Oracle, comme décrit. Les données sont cryptées lorsqu'elles sont inactives à l'aide de clés de cryptage gérées par Oracle.
- Pour créer une demande de volume persistant sur un système de fichiers à l'aide de clés de cryptage maître que vous gérez pour crypter les données au repos, suivez les étapes de la section Provisionnement d'une demande de volume persistant sur un système de fichiers existant, mais sélectionnez l'option de cryptage Crypter à l'aide de clés gérées par le client et indiquez la clé de cryptage maître dans le service Vault. Les données sont cryptées lorsqu'elles sont inactives, à l'aide de la clé de cryptage indiquée.
Chiffrement des données en transit sur un système de fichiers existant
Le cryptage en transit sécurise les données transférées entre les instances et les systèmes de fichiers montés à l'aide du cryptage TLS (Transport Layer Security) v. 1.2. Pour plus d'informations sur le cryptage en transit et le service File Storage, reportez-vous à Utilisation du cryptage TLS en transit.
Vous spécifiez le cryptage en transit indépendamment du cryptage au repos. Les données en transit sont cryptées à l'aide d'un certificat TLS toujours géré par Oracle, que les données inactives soient cryptées à l'aide de clés gérées par Oracle ou à l'aide de clés gérées par l'utilisateur.
Lorsque vous utilisez le service File Storage pour provisionner des demandes de volume persistant, le cryptage en transit est pris en charge uniquement lorsque les instances de calcul hébergeant des noeuds de processus actif exécutent Oracle Linux 7 et Oracle Linux 8.
Pour créer une demande de volume persistant sur un système de fichiers où les données sont cryptées en transit, procédez comme suit :
- Suivez les instructions de la section Setting Up In-Transit Encryption for Linux pour configurer le cryptage en transit sur le système de fichiers. Notamment :
- Complétez les prérequis en configurant les règles de sécurité suivantes dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
- Règle entrante avec conservation de statut autorisant le trafic TCP vers une plage de ports de destination de 2051, soit à partir de tous les ports d'une adresse IP source ou d'un bloc CIDR de votre choix, soit à partir de toutes les sources.
- Règle sortante avec conservation de statut autorisant le trafic TCP à partir d'une plage de ports source de 2051, soit vers tous les ports d'une adresse IP de destination ou d'un bloc CIDR de votre choix, soit vers toutes les destinations.
Pour plus d'informations, reportez-vous à Scénario C : la cible de montage et l'instance utilisent le cryptage TLS en transit.
- Téléchargez le package
oci-fss-utils
sur chaque noeud de processus actif. Notez que vous devez accepter le contrat de licence. Reportez-vous à Tâche 1 : téléchargement du package OCI-FSS-UTILS. - Installez le package
oci-fss-utils
sur chaque noeud de processus actif. Reportez-vous à Tâche 2 : installation du package OCI-FSS-UTILS sur Oracle Linux ou CentOS.
- Complétez les prérequis en configurant les règles de sécurité suivantes dans un groupe de sécurité réseau (recommandé) ou une liste de sécurité pour la cible de montage qui exporte le système de fichiers :
-
Suivez les instructions de la section Provisionnement d'une demande de volume persistant sur un système de fichiers existant, en sélectionnant l'option Crypter à l'aide de clés gérées par Oracle ou l'option Crypter à l'aide de clés gérées par le client comme requis pour le cryptage des données au repos. Toutefois, lors de la création du fichier manifeste pour définir une valeur actualisée, définissez
encryptInTransit
sur"true"
dans la sectioncsi
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
Le pod ne peut pas accéder au système de fichiers en raison de droits d'accès insuffisants
Description
Lorsqu'un pod tente d'accéder à un volume persistant soutenu par un système de fichiers dans le service File Storage, la tentative peut échouer avec le message Autorisation refusée.
Cause
Lorsque vous définissez une PV soutenue par un système de fichiers dans le service File Storage, vous définissez l'attribut accessModes
de la PV sur ReadWriteMany
et vous n'avez pas besoin d'indiquer de valeur pour l'attribut fsType
de la PV.
Le module d'extension de volume CSI est implémenté 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 droits d'accès d'un volume afin qu'ils correspondent à l'attribut fsGroup
indiqué dans l'élément securityContext
d'un pod montant le volume. La modification de la propriété et des droits d'accès 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 défini sur ReadWriteOnceWithFSType
, ce qui indique que CSIDriver doit examiner la définition PV afin de déterminer s'il faut modifier la propriété de volume et les droits d'accès pour qu'ils correspondent à l'attribut fsGroup
du pod, comme suit :
- Si l'attribut
fsType
de PV est défini, CSIDriver modifie la propriété et les droits d'accès du volume afin qu'ils correspondent à l'attributfsGroup
indiqué danssecurityContext
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 propriété et les droits d'accès du volume. Le volume est uniquement accessible aux processus exécutés en tant qu'utilisateur root. Par conséquent, un pod qui n'est pas en cours d'exécution en tant qu'utilisateur root reçoit le message "Permission Denied" (Autorisation refusée) lorsqu'il tente d'accéder à 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 que l'attribut fsGroupPolicy
de l'objet CSIDriver est défini sur ReadWriteOnceWithFSType
et que l'attribut fsType
de la 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 propriétaire du groupe correspond à l'attribut fsGroup
indiqué dans securityContext
du pod. Par exemple, supposons qu'un pod dispose du 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
- Exécutez une commande sur le pod pour écrire un fichier dans un répertoire sur le volume monté. Par exemple, entrez la commande suivante :
kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
- Examinez les propriétés du nouveau fichier pour confirmer les droits d'accès. Par exemple, entrez la commande suivante :
kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"
Dans l'idéal, la sortie indique que le propriétaire 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 défini surReadWriteOnceWithFSType
et que l'attributfsType
de PV n'est pas défini, la sortie affiche le propriétaire de groupe du fichier en tant que root 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, reportez-vous à Stratégie de volume CSI fsGroup dans la documentation Kubernetes.
Action
Si vous connaissez l'ID de groupe du propriétaire du volume des fichiers auxquels le pod accède et que l'ID de groupe du propriétaire du volume n'est pas root (0), nous vous recommandons d'indiquer un groupe supplémentaire dans securityContext
dans la spécification de pod. Par exemple, si l'ID utilisateur du propriétaire du volume est 0 (racine) et que l'ID de groupe du propriétaire du volume est 1000, indiquez 1000 comme groupe supplémentaire dans securityContext
du pod, comme suit :
spec:
securityContext:
supplementalGroups: [1000]
Si vous ne pouvez pas affecter l'ID de groupe du propriétaire du volume en tant que groupe supplémentaire dans securityContext
du pod, nous vous suggérons deux solutions alternatives :
- Solution alternative 1 : activez l'objet CSIDriver pour modifier la propriété et les droits d'accès du volume afin qu'ils correspondent à l'attribut
fsGroup
indiqué danssecurityContext
du pod. - Solution alternative 2 : utilisez les options d'export Squash du système de fichiers pour permettre aux pods d'accéder aux fichiers et aux répertoires du volume sans modifier la propriété du volume.
Avant de choisir une solution, tenez compte des avantages et des inconvénients décrits pour chaque solution.
Solution alternative 1 : activez l'objet CSIDriver pour modifier la propriété et les droits d'accès du volume afin qu'ils correspondent à l'attribut fsGroup
indiqué dans securityContext
du pod
Pour permettre à l'objet CSIDriver de modifier la propriété et les droits d'accès du volume afin qu'ils correspondent à l'attribut fsGroup
indiqué dans securityContext
du pod, définissez l'attribut fsGroupPolicy
de l'objet CSIDriver sur File
, comme suit :
- Obtenez le fichier de configuration CSIDriver en saisissant ce qui suit :
kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
- Dans un éditeur de texte, modifiez le fichier fss_csi_driver.yaml et remplacez l'attribut
fsGroupPolicy
de l'objet CSIDriver parReadWriteOnceWithFSType
parFile
.Modifiez par exemple :
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
vers :
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. - Enregistrez et fermez le fichier fss_csi_driver.yaml.
- Supprimez l'objet CSIDriver existant en saisissant ce qui suit :
kubectl delete csiDriver fss.csi.oraclecloud.com
- Créez le nouvel objet CSIDriver en saisissant la commande suivante :
kubectl apply -f fss_csi_driver.yaml
- Redémarrez le pod qui a rencontré le message "Permission Denied".
Points à prendre en compte avant de choisir cette solution :
- Lors du montage d'un volume volumineux avec de nombreux fichiers et répertoires imbriqués, vous pouvez remarquer que le montage du volume prend beaucoup de temps. Cette latence de montage de volume est due au fait que, lorsque
fsGroupPolicy
est défini surFile
, Kubernetes modifie de manière récursive la propriété de tous les fichiers et répertoires imbriqués en appelantchown()
etchmod()
. Pour réduire la latence de montage de volume, essayez de définir l'attributfsGroupChangePolicy
sur"OnRootMismatch"
dans le fichiersecurityContext
du pod, comme suit :securityContext: fsGroup: <sample-fsGroup> fsGroupChangePolicy: "OnRootMismatch"
La définition de
fsGroupChangePolicy
sur"OnRootMismatch"
réduit la latence de montage de volume car Kubernetes modifie uniquement la propriété du volume dans les cas où les droits d'accès au fichier de niveau racine ne correspondent pas au paramètrefsGroup
du pod. -
Les ID de groupe que vous indiquez en tant que valeurs de
fsGroup
pour tous les pods accédant à un volume sont ajoutés en tant que propriétaires de groupe supplémentaires du volume. Par conséquent, l'accès à ce volume est limité aux ID de groupe que vous avez spécifiés en tant que valeurs defsGroup
.Par exemple, si vous créez deux pods avec des valeurs
fsGroup
différentes qui montent tous deux le même volume, l'ID de groupe que vous indiquez pourfsGroup
du deuxième pod est le groupe du propriétaire du volume et le premier pod a toujours accès au volume. - Si Kubernetes détecte une non-concordance de propriété entre le propriétaire 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 pouvez remarquer que le montage du volume prend beaucoup de temps.
Solution alternative 2 : utilisez les options d'export 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.
Cette solution nécessite que vous définissiez l'option d'export Squash du système de fichiers sur Tout. La définition de Squash sur All accorde un accès illimité au système de fichiers à tous les processus en cours d'exécution sur le noeud sur lequel 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 propriété du volume en définissant les options d'export Squash du système de fichiers. Les options d'export Squash déterminent si l'ID utilisateur (UID) et l'ID de groupe (GID) des clients source accédant au système de fichiers sont mis à nouveau en correspondance avec l'UID Squash et le GID Squash. Pour plus d'informations, reportez-vous à Options d'export NFS.
Si vous décidez d'utiliser cette solution, vous ne remplacez pas l'attribut fsGroupPolicy
de l'objet CSIDriver par File
.
Pour définir les options d'export Squash lors du provisionnement d'une demande de volume persistant sur un système de fichiers existant, procédez comme suit :
- Ouvrez le menu de navigation et sélectionnez Stockage. Sous File Storage, sélectionnez Systèmes de fichiers.
- Dans la section Portée de la liste, sous Compartiment, sélectionnez un compartiment. Tous les systèmes de fichiers du compartiment sélectionné apparaissent.
- Cliquez sur le nom du système de fichiers pour lequel définir les options d'export.
- Sur la page de détails du système de fichiers, sous Ressources, cliquez sur Exports.
- Dans la liste Exports, cliquez sur le nom de l'export pour lequel vous voulez définir des options.
- Sur la page de détails de l'export, sous Options d'export de client NFS, cliquez sur Modifier les options.
-
Dans le panneau Modifier les options, mettez à jour les options d'export Squash comme suit :
- Squash : remplacez la valeur par Tout.
- UID de bloc-notes : remplacez-vous par l'UID du propriétaire du volume ou par l'UID racine (0).
- GUID de séquence : remplacez-le par le GID du propriétaire du volume ou par le GID racine (0).
Pour plus d'informations, reportez-vous à Options d'export NFS.
- Cliquez sur Mettre à jour.
Pour définir les options d'export Squash lors du provisionnement d'une demande de volume persistant sur un nouveau système de fichiers, procédez comme suit :
- Suivez les instructions de la section Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI, mais lorsque vous créez le fichier manifeste pour la classe de stockage qui utilise le provisionneur
fss.csi.oraclecloud.com
, définissez le paramètreexportOptions
pour spécifier les valeurs des options d'export 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"
- Créez la classe de stockage à partir du fichier manifeste en saisissant ce qui suit :
kubectl create -f <filename>
Par exemple :kubectl create -f fss-dyn-st-class.yaml
- Suivez les instructions restantes de la section Provisionnement d'une demande de volume persistant sur un nouveau système de fichiers à l'aide du module d'extension de volume CSI pour créer des règles de sécurité et la demande de volume persistant.
Le module d'extension de volume CSI crée un volume persistant et un système de fichiers dans le service File Storage. Le nouveau système de fichiers dispose des options d'export Squash que vous avez spécifiées dans la classe de stockage.
Points à prendre en compte avant de choisir cette solution :
- La définition de Squash sur All accorde un accès illimité au système de fichiers à tous les processus en cours d'exécution sur le noeud sur lequel 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 alternative 1, la propriété d'un volume ne change pas chaque fois que le volume est monté par un nouveau pod dont l'attribut
fsGroup
est défini sur 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 propriété des volumes des fichiers et répertoires imbriqués.
- Contrairement à la solution alternative 1, vous ne modifiez pas le fichier fss_csi_driver.yaml et ne remplacez pas l'attribut
fsGroupPolicy
de l'objet CSIDriver parFile
. A la place, la valeur d'attribut par défautfsGroupPolicy: ReadWriteOnceWithFSType
garantit que l'objet CSIDriver utilise les fonctionnalités fournies par le service File Storage.