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:

Si desea gestionar sus propias claves de cifrado maestras para cifrar datos estáticos, debe:

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:

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

Nota

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'
  • 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:

  1. (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.

  2. Defina una nueva clase de almacenamiento que utilice el aprovisionador fss.csi.oraclecloud.com:
    1. 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 CLI oci 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>). Especifique mountTargetOcid o mountTargetSubnetOcid. Si especifica mountTargetOcid y mountTargetSubnetOcid en la definición de clase de almacenamiento, se utiliza el destino de montaje existente especificado por mountTargetOcid y se ignora mountTargetSubnetOcid. 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 incluye exportPath: <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"
    2. 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
  3. 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).

  4. Cree una PVC para que la aprovisione el nuevo sistema de archivos en el servicio File Storage, de la siguiente manera:
    1. 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 que accessModes: debe especificar ReadWriteMany.
      • storage: 50Gi: necesario. Tenga en cuenta que Kubernetes requiere que especifique un valor para storage: 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 para storage:.

      Por ejemplo, el siguiente archivo de manifiesto (denominado fss-dyn-claim.yaml) define una PVC denominada fss-dynamic-claim que aprovisiona el sistema de archivos definido en la clase de almacenamiento fss-dyn-storage:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: fss-dynamic-claim
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: "fss-dyn-storage"
        resources:
          requests:
            storage: 50Gi
    2. 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.

  5. 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
  6. 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
  7. 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
Consejo

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:

  1. 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:
    1. 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.

    2. 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.
  2. 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):

  1. 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.
  2. 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).

  3. Cree un PV respaldado por el sistema de archivos en el servicio File Storage de la siguiente manera:
    1. Cree un archivo de manifiesto para definir un PV y, en la sección csi:, defina:

      • De driver a fss.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.
        Por ejemplo: 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
    2. Cree el PV desde el archivo de manifiesto introduciendo:
      kubectl create -f <filename>

      Por ejemplo:

      kubectl create -f fss-pv.yaml
  4. Cree una PVC aprovisionada por el PV que ha creado, de la siguiente forma:
    1. Cree un archivo de manifiesto para definir la PVC y defina:
      • De storageClassName a "". Tenga en cuenta que debe especificar un valor vacío para storageClassName, 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 para storageClassName, 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 denominada fss-pvc aprovisionada por un PV denominado fss-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 elemento capacity: storage: en el archivo de manifiesto del PV. Aparte de eso, se ignora el valor del elemento requests: storage:.

    2. Cree la PVC a partir del archivo de manifiesto introduciendo:
      kubectl create -f <filename>
      Por ejemplo:
      kubectl create -f fss-pvc.yaml

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:

  1. 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:
    1. 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.

    2. 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.
  2. 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ón csi 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 atributo fsGroup especificado en el pod securityContext. 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
  1. 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"
  2. 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 en ReadWriteOnceWithFSType y el atributo fsType 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 en securityContext 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:

  1. Obtenga el archivo de configuración CSIDriver introduciendo:
    kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
  2. En un editor de texto, edite el archivo fss_csi_driver.yaml y cambie el atributo fsGroupPolicy del objeto CSIDriver de ReadWriteOnceWithFSType a File.

    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.

  3. Guardar y cerrar el archivo fss_csi_driver.yaml.
  4. Suprima el objeto CSIDriver existente introduciendo:
    kubectl delete csiDriver fss.csi.oraclecloud.com
  5. Cree el nuevo objeto CSIDriver introduciendo:
    kubectl apply -f fss_csi_driver.yaml 
  6. 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 en File, Kubernetes cambia recursivamente la propiedad de volumen de todos los archivos y directorios anidados llamando a chown() y chmod(). Para reducir la latencia de montaje de volumen, intente definir el atributo fsGroupChangePolicy en "OnRootMismatch" en securityContext 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ón fsGroup 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 de fsGroup.

    Por ejemplo, si crea dos pods con valores fsGroup diferentes que montan el mismo volumen, el ID de grupo que especifique para fsGroup 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.

Atención

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:

  1. Abra el menú de navegación y seleccione Almacenamiento. En Almacenamiento de archivos, seleccione Sistemas de archivos.
  2. En la sección Ámbito de lista, en Compartimento, seleccione un compartimento. Se muestran todos los sistemas de archivos en el compartimento seleccionado.
  3. Seleccione el nombre del sistema de archivos para el que desea definir las opciones de exportación.
  4. En la página de detalles del sistema de archivos, en Recursos, seleccione Exportaciones.
  5. En la lista Exportaciones, seleccione el nombre de la exportación para la que desea definir opciones.
  6. En la página de detalles de la exportación, en Opciones de exportación de cliente NFS, seleccione Editar opciones.
  7. 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.

  8. Seleccione Actualizar.

Para definir las opciones de exportación de Squash al aprovisionar una PVC en un nuevo sistema de archivos:

  1. 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ámetro exportOptions 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"
  2. 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
  3. 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 a File. En su lugar, el valor de atributo por defecto fsGroupPolicy: ReadWriteOnceWithFSType garantiza que el objeto CSIDriver utilice las funciones proporcionadas por el servicio File Storage.