Aprovisionamiento de PVC en el servicio File Storage
Descubra cómo aprovisionar reclamaciones de volúmenes persistentes para clusters que ha creado con Kubernetes Engine (OKE) mediante el montaje de sistemas de archivos desde el servicio File Storage.
El servicio Oracle Cloud Infrastructure File Storage proporciona un sistema de archivos de red para empresas duradero, escalable, distribuido. Utilice el plugin de volumen CSI para conectar clusters a sistemas de archivos en el servicio File Storage.
Puede utilizar el servicio de almacenamiento de archivos para aprovisionar reclamaciones de volúmenes persistentes (PVC) de dos formas:
- Definiendo y creando una nueva clase de almacenamiento (opcionalmente especificando el OCID de un destino de montaje existente) y, a continuación, definiendo y creando una nueva PVC basada en la clase de almacenamiento. Al crear la PVC, el plugin de volumen CSI crea dinámicamente un nuevo sistema de archivos de servicio de almacenamiento de archivos y un nuevo volumen persistente respaldado por el nuevo sistema de archivos. Consulte Provisioning a PVC on a New File System Using the CSI Volume Plugin.
- Mediante la creación manual de un sistema de archivos y un destino de montaje en el servicio File Storage, la definición y creación de un PV respaldado por el nuevo sistema de archivos y, por último, la definición de una nueva PVC. Al crear la PVC, el motor de Kubernetes enlaza la PVC a la PV respaldada por el servicio de almacenamiento de archivos. Consulte Provisioning a PVC on an Existing File System.
Tenga en cuenta lo siguiente:
- Al utilizar el plugin de volumen CSI para crear dinámicamente un nuevo sistema de archivos, no actualice manualmente las propiedades del nuevo volumen persistente que crea el plugin de volumen CSI.
- Los sistemas de archivos del servicio File Storage, los destinos de montaje y las exportaciones creadas dinámicamente por el plugin de volumen CSI reciben nombres que comienzan con
csi-fss-
. - Todos los sistemas de archivos, destinos de montaje y exportaciones del servicio File Storage creados dinámicamente por el plugin de volumen CSI aparecen en la consola. Sin embargo, no utilice la consola (ni la CLI o API de Oracle Cloud Infrastructure) para modificar estos recursos creados de forma dinámica. Los cambios realizados en los recursos de Oracle Cloud Infrastructure creados dinámicamente por el plugin de volumen CSI no se concilian con los objetos de Kubernetes.
- Si suprime un PVC enlazado a un PV respaldado por un sistema de archivos creado por el plugin de volumen CSI, el plugin de volumen CSI suprime el sistema de archivos y PV creado. Si el plugin de volumen CSI también ha creado un nuevo destino de montaje (porque no ha especificado el OCID de un destino de montaje existente en la definición de clase de almacenamiento), el plugin de volumen CSI también suprime el destino de montaje. Tenga en cuenta que si especificó el OCID de un destino de montaje existente, el plugin de volumen CSI no suprime el destino de montaje.
- El aprovisionamiento de una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI está disponible cuando los clusters ejecutan Kubernetes 1.22 o posterior. Consulte Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI.
- El aprovisionamiento de una PVC mediante el enlace a un PV respaldado por un sistema de archivos existente está disponible cuando los clusters ejecutan Kubernetes 1.18 o posterior. Consulte Provisionamiento de una PVC en un sistema de archivos existente.
Cifrado de datos estáticos y datos en tránsito con el servicio de almacenamiento de archivos
Al utilizar el servicio File Storage para aprovisionar PVC, debe especificar el cifrado en tránsito independientemente del cifrado estático.
El servicio de almacenamiento de archivos siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de especificar el cifrado estático mediante sus propias claves de cifrado maestras que se gestionan en el servicio Vault. La forma de especificar el cifrado estático depende de si está aprovisionando una PVC de:
- un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI (consulte Cifrado de datos estáticos en un nuevo sistema de archivos)
- un sistema de archivos existente que ha creado manualmente (consulte Cifrado de datos estáticos en un sistema de archivos existente)
Si desea gestionar sus propias claves de cifrado maestras para cifrar datos estáticos, debe:
- Cree una clave de cifrado maestra adecuada en el almacén (u obtenga el OCID de dicha clave). Consulte Gestión de claves.
- Cree una política que otorgue acceso a la clave de cifrado maestra. Consulte Create Policy to Access User-Managed Encryption Keys for Encrypting Boot Volumes, Block Volumes, and/o File Systems.
El servicio de almacenamiento de archivos puede cifrar los datos en tránsito. Si especifica el cifrado en tránsito, los datos en tránsito se cifran mediante un certificado TLS (seguridad de capa de transporte) que siempre está gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario. El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS v. 1.2. Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito. La forma de especificar el cifrado en tránsito depende de si está aprovisionando una PVC en:
- un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI (consulte Cifrado de datos en tránsito en un nuevo sistema de archivos)
- un sistema de archivos existente que ha creado manualmente (consulte Cifrado de datos en tránsito en un sistema de archivos existente)
Tenga en cuenta que, al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.
Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI
Los siguientes requisitos se aplican al aprovisionar una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI:
- Los clusters deben ejecutar Kubernetes 1.22 o una versión posterior para aprovisionar una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI.
-
Deben existir políticas de IAM adecuadas para permitir que el plugin de volumen CSI cree y gestione recursos de File Storage. Más concretamente:
- Una política para crear y/o gestionar sistemas de archivos, destinos de montaje y rutas de exportación. Por ejemplo:
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
- Una política para utilizar VNIC, IP privadas, zonas de DNS privadas y subredes. Por ejemplo:
ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
- Una política para crear y/o gestionar sistemas de archivos, destinos de montaje y rutas de exportación. Por ejemplo:
-
Si el compartimento al que pertenece un pool de nodos, una subred de nodo de trabajador, un sistema de archivos o un destino de montaje es diferente del compartimento al que pertenece un cluster, deben existir políticas de IAM para permitir que el plugin de volumen de CSI acceda a la ubicación adecuada. Por ejemplo:
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'
-
Para especificar una clave de cifrado maestra gestionada por el usuario concreta del servicio Vault para cifrar datos en sistemas de archivos, deben existir políticas de IAM adecuadas para permitir que el plugin de volumen CSI acceda a esa clave de cifrado maestra. Consulte Create Policy to Access User-Managed Encryption Keys for Encrypting Boot Volumes, Block Volumes, and/or File Systems.
Para aprovisionar dinámicamente una PVC en un nuevo sistema de archivos creado dinámicamente por el plugin de volumen CSI en el servicio File Storage:
- (Opcional) Cree un destino de montaje en el servicio File Storage. Consulte Creating a Mount Target.
El plugin de volumen CSI requiere un destino de montaje activo (es decir, un destino de montaje con una dirección IP asignada) para crear un nuevo sistema de archivos. Si no crea un destino de montaje por adelantado, especifique la subred en la que el plugin de volumen CSI creará un nuevo destino de montaje al definir la clase de almacenamiento.
- Defina una nueva clase de almacenamiento que utilice el aprovisionador
fss.csi.oraclecloud.com
:- Cree un archivo de manifiesto (por ejemplo, en un archivo denominado fss-dyn-st-class.yaml), especifique un nombre para la nueva clase de almacenamiento y especifique valores para los parámetros necesarios y opcionales:
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>"}'
donde:
name: <storage-class-name>
: necesario. Nombre que elija para la clase de almacenamiento.availabilityDomain: <ad-name>
: necesario. Nombre del dominio de disponibilidad en el que se va a crear el nuevo sistema de archivos (y en el que se va a crear el nuevo destino de montaje, si no se especifica un OCID de destino de montaje existente). Por ejemplo,US-ASHBURN-AD-1
. Para averiguar el nombre de dominio de disponibilidad que se va a utilizar, ejecute el comando de la CLIoci iam availability-domain list
(o utilice la operación ListAvailabilityDomains). Para obtener más información, consulte Nombres de dominio de disponibilidad de su arrendamiento.mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
: necesario. El OCID de un destino de montaje activo existente (mountTargetOcid: <mt-ocid>
) o el OCID de una subred en la que crear un nuevo destino de montaje (mountTargetSubnetOcid: <mt-subnet-ocid>
). EspecifiquemountTargetOcid
omountTargetSubnetOcid
. Si especificamountTargetOcid
ymountTargetSubnetOcid
en la definición de clase de almacenamiento, se utiliza el destino de montaje existente especificado pormountTargetOcid
y se ignoramountTargetSubnetOcid
. Por ejemplo:mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
compartmentOcid: <compartment-ocid>
: opcional. OCID del compartimento al que va a pertenecer el nuevo sistema de archivos (y el nuevo destino de montaje, si no se especifica un OCID de destino de montaje existente). Si no se especifica, el valor por defecto es el mismo compartimento que el cluster. Por ejemplo,compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
kmsKeyOcid: <key-ocid>
: opcional. OCID de una clave de cifrado maestra que gestione, con la que cifrar los datos estáticos. Si no se especifica, los datos se cifran en reposo mediante claves de cifrado gestionadas por Oracle. Consulte Cifrado de datos estáticos en un nuevo sistema de archivos. Por ejemplo,kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
exportPath: <path>
: opcional. La ruta de una exportación que identifica de forma única el sistema de archivos dentro del destino de montaje. La ruta de exportación debe comenzar por una barra (/) seguida de una secuencia de cero o más elementos separados por barras. Por ejemplo,/FileSystem1
. Para obtener más información, consulte Rutas en sistemas de archivos.Si incluye
exportPath: <path>
en una definición de clase de almacenamiento, no especifique una ruta (ya sea como ruta de acceso o como subruta de acceso de una ruta de acceso existente) que ya exista. Si especifica una ruta que ya existe, se devuelve un error porque varios sistemas de archivos con el mismo destino de montaje no pueden tener la misma ruta de exportación. Por lo tanto, si incluyeexportPath: <path>
en la definición de clase de almacenamiento, utilice solo esta definición de clase de almacenamiento para crear un sistema de archivos.Si no incluye
exportPath: <path>
en la definición de clase de almacenamiento, la ruta de acceso se define por defecto en el nombre mostrado del sistema de archivos creado por el plugin de volumen CSI (empezando por/csi-fss-
).exportOptions: "[{<options-in-json-format>}]"
Opcional. Juego de parámetros (en formato JSON válido) dentro de la exportación que especifica el nivel de acceso otorgado a los clientes NFS cuando se conectan a un destino de montaje. Una entrada de opciones de exportación NFS en una exportación define el acceso para una única dirección IP o rango de bloques de CIDR. Para obtener más información, consulte Trabajar con opciones de exportación y exportación NFS. Si no se especifica, se utiliza el siguiente valor por defecto:exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
encryptInTransit: "true"|"false"
: opcional. Indica si se deben cifrar los datos en tránsito. Si especifica"true"
, asegúrese de completar los pasos de configuración descritos en Cifrado de datos en tránsito en un nuevo sistema de archivos. Si no se especifica, el valor por defecto es"false"
. Por ejemplo,encryptInTransit: "true"
.oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
Opcional. Especifica una etiqueta definida para el nuevo sistema de archivos. Por ejemplo,oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'
Tenga en cuenta que para aplicar etiquetas definidas de un espacio de nombres de etiqueta que pertenece a un compartimento a un recurso del sistema de archivos que pertenece a un compartimento diferente, debe incluir una sentencia de política para permitir que el cluster utilice el espacio de nombres de etiqueta. Consulte Política de IAM adicional cuando un cluster y un espacio de nombres de etiqueta están en diferentes compartimentos.
oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'
Opcional. Especifica una etiqueta de formato libre para el nuevo sistema de archivos. Por ejemplo,oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'
Por ejemplo:
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"
- Cree la clase de almacenamiento a partir del archivo de manifiesto introduciendo:
kubectl create -f <filename>
Por ejemplo:kubectl create -f fss-dyn-st-class.yaml
- Cree un archivo de manifiesto (por ejemplo, en un archivo denominado fss-dyn-st-class.yaml), especifique un nombre para la nueva clase de almacenamiento y especifique valores para los parámetros necesarios y opcionales:
-
Cree reglas de seguridad en un grupo de seguridad de red (recomendado) o en una lista de seguridad para el destino de montaje al que se hace referencia en la definición de clase de almacenamiento (o creado por ella) y para los nodos de trabajador del cluster.
Las reglas de seguridad que se van a crear dependen de las ubicaciones de red relativas del destino de montaje y los nodos de trabajador, según los siguientes escenarios:Estos escenarios, las reglas de seguridad que se van a crear y dónde crearlas, se describen por completo en la documentación del servicio File Storage (consulte Configuración de reglas de seguridad de VCN para File Storage).
- Cree una PVC para que la aprovisione el nuevo sistema de archivos en el servicio File Storage, de la siguiente manera:
- Cree un archivo de manifiesto para definir la PVC:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany storageClassName: "<storage-class-name>" resources: requests: storage: 50Gi
donde:
name: <pvc-name>
: necesario. Por ejemplo,fss-dynamic-claim
storageClassName: "<storage-class-name>"
: necesario. Nombre de la clase de almacenamiento definida anteriormente. Por ejemplo,fss-dyn-storage
.accessModes: - ReadWriteMany
: necesario. Tenga en cuenta queaccessModes:
debe especificarReadWriteMany
.storage: 50Gi
: necesario. Tenga en cuenta que Kubernetes requiere que especifique un valor parastorage:
en el manifiesto de PVC. Sin embargo, el servicio File Storage no soporta la especificación de un tamaño de sistema de archivos y crea un nuevo sistema de archivos con un tamaño por defecto, independientemente del valor que especifique parastorage:
.
Por ejemplo, el siguiente archivo de manifiesto (denominado
fss-dyn-claim.yaml
) define una PVC denominadafss-dynamic-claim
que aprovisiona el sistema de archivos definido en la clase de almacenamientofss-dyn-storage
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-dynamic-claim spec: accessModes: - ReadWriteMany storageClassName: "fss-dyn-storage" resources: requests: storage: 50Gi
- Cree la PVC a partir del archivo de manifiesto introduciendo:
kubectl create -f <filename>
Por ejemplo:kubectl create -f fss-dyn-claim.yaml
Se crea un nuevo PVC. El plugin de volumen CSI crea un nuevo volumen persistente (PV) y un nuevo sistema de archivos en el servicio File Storage (junto con un nuevo destino de montaje si no ha especificado un destino de montaje existente).
El nuevo PVC está vinculado al nuevo PV. Los datos se cifran de forma estática mediante claves de cifrado gestionadas por Oracle o por usted.
- Cree un archivo de manifiesto para definir la PVC:
- Verifique que la PVC se ha enlazado al nuevo volumen persistente introduciendo:
kubectl get pvc
La salida del comando anterior confirma que la PVC se ha enlazado correctamente:
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE fss-dynamic-claim Bound csi-fss-<unique_ID> 50Gi RWX fss-dyn-storage 4m
- Utilice la nueva PVC al crear otros objetos, como pods. Por ejemplo, puede crear un nuevo pod a partir de la siguiente definición de pod:
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
-
Después de crear un nuevo pod como se describe en el ejemplo del paso anterior, puede verificar que el pod está utilizando el nuevo PVC introduciendo:
kubectl describe pod nginx
Si prevé un requisito frecuente para crear dinámicamente nuevos PV y nuevos sistemas de archivos al crear PVC, puede especificar que la nueva clase de almacenamiento que ha creado se utilice como clase de almacenamiento por defecto para aprovisionar nuevas PVC. Consulte la documentación de Kubernetes para obtener más información.
Cifrado de datos estáticos en un nuevo sistema de archivos
El servicio de almacenamiento de archivos siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de cifrar datos estáticos mediante sus propias claves de cifrado maestras que gestiona usted mismo en el servicio Vault.
En función de cómo desee cifrar los datos estáticos, siga las instrucciones adecuadas a continuación:
- Para utilizar el plugin de volumen CSI para crear de forma dinámica un nuevo sistema de archivos que utilice claves de cifrado gestionadas por Oracle para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI y no incluya el parámetro
kmsKeyOcid: <key-ocid>
en la definición de clase de almacenamiento. Los datos se cifran cuando están estáticos, utilizando claves de cifrado gestionadas por Oracle. - Para utilizar el plugin de volumen CSI para crear de forma dinámica un nuevo sistema de archivos que utilice claves de cifrado maestras que gestione para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI, incluya el parámetro
kmsKeyOcid: <key-ocid>
en la definición de clase de almacenamiento y especifique el OCID de la clave de cifrado maestra en el servicio Vault. Los datos se cifran en reposo, utilizando la clave de cifrado que especifique.
Cifrado de datos en tránsito en un nuevo sistema de archivos
El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS 1.2 (seguridad de capa de transporte). Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito.
El cifrado en tránsito se especifica independientemente del cifrado estático. Los datos en tránsito se cifran mediante un certificado TLS que siempre está gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario.
Tenga en cuenta que, al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.
Para utilizar el plugin de volumen CSI para crear dinámicamente un nuevo sistema de archivos con cifrado en tránsito:
- Siga las instrucciones de Configuración del cifrado en tránsito para Linux para configurar el cifrado en tránsito en el sistema de archivos. Más concretamente:
- Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
- Regla de entrada con estado que permite el tráfico TCP a un rango de puertos de destino de 2051, ya sea de todos los puertos de una dirección IP de origen o bloque CIDR de su elección, o de todos los orígenes.
- Regla de salida con estado que permite el tráfico TCP desde un rango de puertos de origen de 2051, ya sea a todos los puertos de una dirección IP de destino o bloque CIDR de su elección, o a todos los destinos.
Para obtener más información, consulte Escenario C: El destino de montaje y la instancia utilizan cifrado TLS en tránsito.
- En cada nodo de trabajador, instale el paquete
oci-fss-utils
desde el repositorio de yum de Oracle Linux. Consulte Configuración del cifrado en tránsito para Linux.
- Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
-
Siga las instrucciones de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI e incluya el parámetro
encryptInTransit: "true"
en la definición de clase de almacenamiento. Los datos se cifran en tránsito mediante una clave de cifrado gestionada por Oracle.
Aprovisionamiento de una PVC en un sistema de archivos existente
Para crear una PVC en un sistema de archivos existente en el servicio File Storage (mediante claves de cifrado gestionadas por Oracle para cifrar datos estáticos):
- Cree un sistema de archivos con un destino de montaje en el servicio File Storage y seleccione la opción de cifrado Cifrar mediante claves gestionadas por Oracle. Consulte Creating a File System.
- Cree reglas de seguridad en un grupo de seguridad de red (recomendado) o en una lista de seguridad tanto para el destino de montaje que exporta el sistema de archivos como para los nodos de trabajador del cluster.Las reglas de seguridad que se van a crear dependen de las ubicaciones de red relativas del destino de montaje y los nodos de trabajador, según los siguientes escenarios:
Estos escenarios, las reglas de seguridad que se van a crear y dónde crearlas, se describen por completo en la documentación del servicio File Storage (consulte Configuración de reglas de seguridad de VCN para File Storage).
- Cree un PV respaldado por el sistema de archivos en el servicio File Storage de la siguiente manera:
-
Cree un archivo de manifiesto para definir un PV y, en la sección
csi:
, defina:- De
driver
afss.csi.oraclecloud.com
- De
volumeHandle
a<FileSystemOCID>:<MountTargetIP>:<path>
donde:<FileSystemOCID>
es el OCID del sistema de archivos definido en el servicio File Storage.<MountTargetIP>
es la dirección IP asignada al destino de montaje.<path>
es la ruta de montaje al sistema de archivos relativa a la dirección IP del destino de montaje, que comienza con una barra diagonal.
ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
Por ejemplo, el siguiente archivo de manifiesto (denominado fss-pv.yaml) define un PV denominado
fss-pv
respaldado por un sistema de archivos en el servicio 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
- De
- Cree el PV desde el archivo de manifiesto introduciendo:
kubectl create -f <filename>
Por ejemplo:
kubectl create -f fss-pv.yaml
-
- Cree una PVC aprovisionada por el PV que ha creado, de la siguiente forma:
- Cree un archivo de manifiesto para definir la PVC y defina:
- De
storageClassName
a""
. Tenga en cuenta que debe especificar un valor vacío parastorageClassName
, aunque la clase de almacenamiento no sea aplicable en el caso del aprovisionamiento estático de almacenamiento persistente. Si no especifica un valor vacío parastorageClassName
, se utiliza la clase de almacenamiento por defecto (oci-bv
), lo que provoca un error. volumeName
al nombre del PV que ha creado (por ejemplo,fss-pv
)
Por ejemplo, el siguiente archivo de manifiesto (denominado
fss-pvc.yaml
) define una PVC denominadafss-pvc
aprovisionada por un PV denominadofss-pv
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 50Gi volumeName: fss-pv
Tenga en cuenta que el elemento
requests: storage:
debe estar presente en el archivo de manifiesto de PVC y su valor debe coincidir con el valor especificado para el elementocapacity: storage:
en el archivo de manifiesto del PV. Aparte de eso, se ignora el valor del elementorequests: storage:
. - De
- Cree la PVC a partir del archivo de manifiesto introduciendo:
kubectl create -f <filename>
Por ejemplo:kubectl create -f fss-pvc.yaml
- Cree un archivo de manifiesto para definir la PVC y defina:
La PVC está enlazada al PV respaldado por el sistema de archivos del servicio File Storage. Los datos se cifran de forma estática mediante claves de cifrado gestionadas por Oracle.
Cifrado de datos estáticos en un sistema de archivos existente
El servicio de almacenamiento de archivos siempre cifra los datos estáticos mediante claves de cifrado gestionadas por Oracle por defecto. Sin embargo, tiene la opción de cifrar sistemas de archivos mediante sus propias claves de cifrado maestras que gestiona usted mismo en el servicio Vault.
En función de cómo desee cifrar los datos estáticos, siga las instrucciones adecuadas a continuación:
- Para crear una PVC en un sistema de archivos mediante claves de cifrado gestionadas por Oracle para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un sistema de archivos existente y seleccione la opción de cifrado Cifrar mediante claves gestionadas por Oracle como se describe. Los datos se cifran cuando están estáticos mediante claves de cifrado gestionadas por Oracle.
- Para crear una PVC en un sistema de archivos mediante claves de cifrado maestras que se gestionan para cifrar datos estáticos, siga los pasos de Aprovisionamiento de una PVC en un sistema de archivos existente, pero seleccione la opción de cifrado Cifrar mediante claves gestionadas por el cliente y especifique la clave de cifrado maestra en el servicio Vault. Los datos se cifran de forma estática mediante la clave de cifrado que especifique.
Cifrado de datos en tránsito en un sistema de archivos existente
El cifrado en tránsito protege los datos que se transfieren entre instancias y sistemas de archivos montados mediante el cifrado TLS v. 1.2 (seguridad de capa de transporte). Para obtener más información sobre el cifrado en tránsito y el servicio File Storage, consulte Uso del cifrado TLS en tránsito.
El cifrado en tránsito se especifica independientemente del cifrado estático. Los datos en tránsito se cifran mediante un certificado TLS que siempre está gestionado por Oracle, independientemente de si los datos estáticos se cifran mediante claves gestionadas por Oracle o mediante claves gestionadas por el usuario.
Tenga en cuenta que, al utilizar el servicio File Storage para aprovisionar PVC, el cifrado en tránsito solo está soportado cuando las instancias informáticas que alojan nodos de trabajador ejecutan Oracle Linux 7 y Oracle Linux 8.
Para crear una PVC en un sistema de archivos donde los datos se cifran en tránsito:
- Siga las instrucciones de Configuración del cifrado en tránsito para Linux para configurar el cifrado en tránsito en el sistema de archivos. Más concretamente:
- Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
- Regla de entrada con estado que permite el tráfico TCP a un rango de puertos de destino de 2051, ya sea de todos los puertos de una dirección IP de origen o bloque CIDR de su elección, o de todos los orígenes.
- Regla de salida con estado que permite el tráfico TCP desde un rango de puertos de origen de 2051, ya sea a todos los puertos de una dirección IP de destino o bloque CIDR de su elección, o a todos los destinos.
Para obtener más información, consulte Escenario C: El destino de montaje y la instancia utilizan TLS en el cifrado en tránsito.
- En cada nodo de trabajador, instale el paquete
oci-fss-utils
desde el repositorio de yum de Oracle Linux. Consulte Configurar el cifrado en tránsito para Linux.
- Complete los requisitos mediante la configuración de las siguientes reglas de seguridad en un grupo de seguridad de red (recomendado) o una lista de seguridad para el destino de montaje que exporta el sistema de archivos:
-
Siga las instrucciones de Aprovisionamiento de una PVC en un sistema de archivos existente, seleccionando la opción Cifrar mediante claves gestionadas por Oracle o la opción Cifrar mediante claves gestionadas por el cliente según sea necesario para el cifrado de datos en reposo. Sin embargo, al crear el archivo de manifiesto para definir un PV, defina
encryptInTransit
en"true"
en la seccióncsi
del archivo. Por ejemplo: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"
Solución de problemas de aprovisionamiento del servicio File Storage de PVC
El pod no puede acceder al sistema de archivos debido a permisos insuficientes
Descripción
Cuando un pod intenta acceder a un volumen persistente (PV) respaldado por un sistema de archivos en el servicio File Storage, el intento puede fallar con un mensaje de "Permission Denied".
Causa
Al definir un PV respaldado por un sistema de archivos en el servicio File Storage, define el atributo accessModes
del PV en ReadWriteMany
y no tiene que especificar un valor para el atributo fsType
del PV.
El plugin de volumen CSI se implementa como un objeto CSIDriver. Utilice el atributo fsGroupPolicy
del objeto CSIDriver para controlar si CSIDriver cambia la propiedad y los permisos de un volumen para que coincidan con el atributo fsGroup
especificado en el securityContext
de un pod que monta el volumen. Al cambiar la propiedad y los permisos del volumen, el pod puede acceder al volumen después de montarlo.
Por defecto, el atributo fsGroupPolicy
del objeto CSIDriver está definido en ReadWriteOnceWithFSType
, lo que indica que CSIDriver debe examinar la definición de PV para determinar si se deben modificar la propiedad del volumen y los permisos para que coincidan con el atributo fsGroup
del pod de la siguiente forma:
- Si el atributo
fsType
del PV está definido, CSIDriver modifica la propiedad y los permisos del volumen para que coincidan con el atributofsGroup
especificado en el podsecurityContext
. Como resultado, el volumen es accesible para el pod. - Si el atributo
fsType
del PV no está definido, CSIDriver no modifica la propiedad ni los permisos del volumen. Los procesos que se ejecutan como raíz solo pueden acceder al volumen. Como resultado, un pod que no se está ejecutando como raíz recibe el mensaje "Permission Denied" al intentar acceder a un directorio o archivo en el volumen montado.
A continuación se muestra cómo verificar que el motivo por el que un pod recibe el mensaje "Permission Denied" se debe a que el atributo fsGroupPolicy
del objeto CSIDriver está definido en ReadWriteOnceWithFSType
y el atributo fsType
del PV no está definido. Ejecute un comando en el pod para escribir un archivo en un directorio en el volumen montado y, a continuación, examine las propiedades del archivo para confirmar si el propietario del grupo coincide con el atributo fsGroup
especificado en securityContext
del pod. Por ejemplo, suponga que un pod tiene el siguiente manifiesto:
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
- Ejecute un comando en el pod para escribir un archivo en un directorio del volumen montado. Por ejemplo, introduzca:
kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
- Examine las propiedades del archivo recién creado para confirmar los derechos de acceso. Por ejemplo, introduzca:
kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"
Idealmente, la salida muestra que el propietario del grupo del archivo es el mismo que el especificado por el atributo
fsGroup
del pod, proporcionando al pod acceso al archivo. Por ejemplo:-rw-r--r-- 1 root 2000 6 Jun 6 20:08 testfile
Sin embargo, si el atributo
fsGroupPolicy
del objeto CSIDriver está definido enReadWriteOnceWithFSType
y el atributofsType
del PV no está definido, la salida muestra el propietario del grupo del archivo como raíz y el pod no tiene acceso al archivo. Por ejemplo:-rw-r--r-- 1 root root 6 Jun 6 20:08 testfile
Para obtener más información, consulte la política del volumen fsGroup de CSI en la documentación de Kubernetes.
Acción
Si conoce el ID de grupo del propietario del volumen de los archivos a los que accede el pod y el ID de grupo del propietario del volumen no es raíz (0), le recomendamos que especifique un grupo suplementario en securityContext
en la especificación del pod. Por ejemplo, si el ID de usuario del propietario del volumen es 0 (raíz) y el ID de grupo del propietario del volumen es 1000, especifique 1000 como grupo suplementario en securityContext
del pod de la siguiente manera:
spec:
securityContext:
supplementalGroups: [1000]
Si no puede asignar el ID de grupo del propietario del volumen como grupo suplementario en securityContext
del pod, sugerimos dos soluciones alternativas:
- Solución alternativa 1: active el objeto CSIDriver para modificar la propiedad y los permisos del volumen para que coincidan con el atributo
fsGroup
especificado ensecurityContext
del pod. - Solución alternativa 2: utilice las opciones de exportación de Squash del sistema de archivos para permitir que los pods accedan a los archivos y directorios del volumen sin cambiar la propiedad del volumen.
Antes de elegir una solución, considere las ventajas y desventajas descritas para cada solución.
Solución alternativa 1: active el objeto CSIDriver para modificar la propiedad y los permisos del volumen para que coincidan con el atributo fsGroup
especificado en securityContext
del pod
Para permitir que el objeto CSIDriver modifique la propiedad y los permisos del volumen para que coincidan con el atributo fsGroup
especificado en securityContext
del pod, defina el atributo fsGroupPolicy
del objeto CSIDriver en File
de la siguiente manera:
- Obtenga el archivo de configuración CSIDriver introduciendo:
kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
- En un editor de texto, edite el archivo fss_csi_driver.yaml y cambie el atributo
fsGroupPolicy
del objeto CSIDriver deReadWriteOnceWithFSType
aFile
.Por ejemplo, cambie:
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
Cambie solo el valor de
fsGroupPolicy
. No cambie ningún otro valor. - Guardar y cerrar el archivo fss_csi_driver.yaml.
- Suprima el objeto CSIDriver existente introduciendo:
kubectl delete csiDriver fss.csi.oraclecloud.com
- Cree el nuevo objeto CSIDriver introduciendo:
kubectl apply -f fss_csi_driver.yaml
- Reinicie el pod que ha encontrado el mensaje "Permission Denied".
Aspectos a tener en cuenta antes de elegir esta solución:
- Al montar un volumen grande con muchos archivos y directorios anidados, puede notar que el montaje del volumen lleva mucho tiempo. Esta latencia de montaje de volumen se debe a que, cuando
fsGroupPolicy
se define enFile
, Kubernetes cambia recursivamente la propiedad de volumen de todos los archivos y directorios anidados llamando achown()
ychmod()
. Para reducir la latencia de montaje de volumen, intente definir el atributofsGroupChangePolicy
en"OnRootMismatch"
ensecurityContext
del pod, de la siguiente manera:securityContext: fsGroup: <sample-fsGroup> fsGroupChangePolicy: "OnRootMismatch"
Si se define
fsGroupChangePolicy
en"OnRootMismatch"
, se reduce la latencia de montaje de volumen porque Kubernetes solo cambia la propiedad de volumen en los casos en los que los permisos de archivo de nivel raíz no coinciden con la configuraciónfsGroup
del pod. -
Los ID de grupo que especifique como valores de
fsGroup
para todos los pods que acceden a un volumen se agregan como propietarios de grupo suplementarios del volumen. Como resultado, el acceso a ese volumen está restringido a los ID de grupo especificados como valores defsGroup
.Por ejemplo, si crea dos pods con valores
fsGroup
diferentes que montan el mismo volumen, el ID de grupo que especifique parafsGroup
del segundo pod es el grupo del propietario del volumen y el primer pod todavía tiene acceso al volumen. - Si Kubernetes detecta una discrepancia de propiedad entre el propietario del volumen y el
fsGroup
definido en la especificación del pod, Kubernetes cambia la propiedad del volumen de todos los archivos. Si el volumen tiene muchos archivos y directorios anidados, es posible que observe que el montaje del volumen lleva mucho tiempo.
Solución alternativa 2: utilice las opciones de exportación Squash del sistema de archivos para permitir que los pods accedan a archivos y directorios en un volumen sin cambiar la propiedad del volumen.
Esta solución requiere que defina la opción de exportación Squash del sistema de archivos en Todo. Al establecer Squash en All, se otorga acceso sin restricciones al sistema de archivos a todos los procesos que se ejecutan en el nodo donde se monta el volumen (incluidos otros pods). Por lo tanto, antes de elegir esta solución, revise el cumplimiento de sus requisitos de seguridad.
Puede activar los pods para acceder a archivos y directorios en un volumen sin cambiar la propiedad del volumen mediante la configuración de las opciones de exportación Squash del sistema de archivos. Las opciones de exportación de Squash determinan si los clientes de origen que acceden al sistema de archivos tienen su ID de usuario (UID) y el ID de grupo (GID) reasignados a Squash UID y Squash GID. Para obtener más información, consulte NFS Export Options.
Si decide utilizar esta solución, no cambie el atributo fsGroupPolicy
del objeto CSIDriver a File
.
Para definir las opciones de exportación de Squash al aprovisionar una PVC en un sistema de archivos existente:
- Abra el menú de navegación y seleccione Almacenamiento. En Almacenamiento de archivos, seleccione Sistemas de archivos.
- En la sección Ámbito de lista, en Compartimento, seleccione un compartimento. Se muestran todos los sistemas de archivos en el compartimento seleccionado.
- Seleccione el nombre del sistema de archivos para el que desea definir las opciones de exportación.
- En la página de detalles del sistema de archivos, en Recursos, seleccione Exportaciones.
- En la lista Exportaciones, seleccione el nombre de la exportación para la que desea definir opciones.
- En la página de detalles de la exportación, en Opciones de exportación de cliente NFS, seleccione Editar opciones.
-
En el panel Editar opciones, actualice las opciones de exportación de Squash de la siguiente manera:
- Cambiar: cambie a Todo.
- UID de quash: cambie al UID del propietario del volumen o al UID raíz (0).
- GID de quash: cambie al GID del propietario del volumen o al GID raíz (0).
Para obtener más información, consulte Opciones de exportación NFS.
- Seleccione Actualizar.
Para definir las opciones de exportación de Squash al aprovisionar una PVC en un nuevo sistema de archivos:
- Siga las instrucciones de Aprovisionamiento de una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI, pero al crear el archivo de manifiesto para la clase de almacenamiento que utiliza el provisionador
fss.csi.oraclecloud.com
, defina el parámetroexportOptions
para especificar valores para las opciones de exportación de Squash de la siguiente manera:exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"
Por ejemplo:
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"
- Cree la clase de almacenamiento a partir del archivo de manifiesto introduciendo:
kubectl create -f <filename>
Por ejemplo:kubectl create -f fss-dyn-st-class.yaml
- Siga las instrucciones restantes de Provisioning a PVC on a New File System Using the CSI Volume Plugin para crear reglas de seguridad y para crear la PVC.
El plugin de volumen CSI crea un nuevo volumen persistente (PV) y un nuevo sistema de archivos en el servicio File Storage. El nuevo sistema de archivos tiene las opciones de exportación Squash que ha especificado en la clase de almacenamiento.
Aspectos a tener en cuenta antes de elegir esta solución:
- Al establecer Squash en All, se otorga acceso sin restricciones al sistema de archivos a todos los procesos que se ejecutan en el nodo donde se monta el volumen (incluidos otros pods). Por lo tanto, antes de elegir esta solución, revise el cumplimiento de sus requisitos de seguridad.
- A diferencia de Solución alternativa 1, la propiedad de un volumen no cambia cada vez que el volumen es montado por un nuevo pod que tiene su atributo
fsGroup
definido en un grupo diferente. - A diferencia de la solución alternativa 1, no hay latencia de montaje de volumen al montar un volumen grande con muchos archivos y directorios anidados, porque Kubernetes no cambia recursivamente la propiedad de volumen de los archivos y directorios anidados.
- A diferencia de Solución alternativa 1, no edita el archivo fss_csi_driver.yaml y cambia el atributo
fsGroupPolicy
del objeto CSIDriver aFile
. En su lugar, el valor de atributo por defectofsGroupPolicy: ReadWriteOnceWithFSType
garantiza que el objeto CSIDriver utilice las funciones proporcionadas por el servicio File Storage.