Provisionando PVCs no Serviço File Storage
Descubra como provisionar reivindicações de volume persistentes para clusters que você criou usando o Kubernetes Engine (OKE) montando sistemas de arquivos do serviço File Storage.
O serviço Oracle Cloud Infrastructure File Storage fornece um sistema de arquivos de rede durável, escalável e distribuído e de nível empresarial. Você usa o plug-in de volume CSI para conectar clusters a sistemas de arquivos no serviço File Storage.
Você pode usar o serviço File Storage para provisionar reivindicações de volume persistentes (PVCs) de duas maneiras:
- Definindo e criando uma nova classe de armazenamento (opcionalmente especificando o OCID de um ponto de acesso NFS existente) e, em seguida, definindo e criando uma nova PVC com base na classe de armazenamento. Quando você cria a PVC, o plug-in de volume CSI cria dinamicamente um novo sistema de arquivos do serviço File Storage e um novo volume persistente suportado pelo novo sistema de arquivos. Consulte Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI.
- Criando manualmente um sistema de arquivos e um ponto de acesso NFS no serviço File Storage, definindo e criando um PV suportado pelo novo sistema de arquivos e, finalmente, definindo uma nova PVC. Quando você cria a PVC, o Kubernetes Engine vincula a PVC ao PV suportado pelo serviço File Storage. Consulte Provisionando uma PVC em um Sistema de Arquivos Existente.
Observe o seguinte:
- Ao usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos, não atualize manualmente as propriedades do novo volume persistente que o plug-in de volume CSI cria.
- Todos os sistemas de arquivos, pontos de acesso NFS e exportações do serviço File Storage criados dinamicamente pelo plug-in de volume CSI recebem nomes que começam com
csi-fss-
. - Todos os sistemas de arquivos, pontos de acesso NFS e exportações do serviço File Storage criados dinamicamente pelo plug-in de volume CSI aparecem na Console. No entanto, não use a Console (ou a CLI ou API do Oracle Cloud Infrastructure) para modificar esses recursos criados dinamicamente. As alterações feitas nos recursos do Oracle Cloud Infrastructure criadas dinamicamente pelo plug-in de volume CSI não são reconciliadas com objetos do Kubernetes.
- Se você excluir uma PVC vinculada a um PV suportado por um sistema de arquivos criado pelo plug-in de volume CSI, o plug-in de volume CSI excluirá o sistema de arquivos e o PV criado. Se o plug-in de volume CSI também criou um novo ponto de acesso NFS (porque você não especificou o OCID de um ponto de acesso NFS existente na definição da classe de armazenamento), o plug-in de volume CSI também excluirá o ponto de acesso NFS. Observe que, se você especificou o OCID de um ponto de acesso NFS existente, o plug-in de volume CSI não excluirá o ponto de acesso NFS.
- O provisionamento de uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI está disponível quando os clusters estão executando o Kubernetes 1.22 ou posterior. Consulte Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI.
- O provisionamento de uma PVC vinculando-a a um PV suportado por um sistema de arquivos existente está disponível quando os clusters estão executando o Kubernetes 1.18 ou posterior. Consulte Provisionando uma PVC em um Sistema de Arquivos Existente.
Criptografando Dados em Repouso e Dados em Trânsito com o Serviço File Storage
Ao usar o serviço File Storage para provisionar PVCs, você especifica a criptografia em trânsito independentemente da criptografia em repouso.
O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de especificar a criptografia em repouso usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault. Como especificar a criptografia em repouso depende se você está provisionando uma PVC em:
- um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI (consulte Criptografando Dados em Repouso em um Novo Sistema de Arquivos)
- um sistema de arquivos existente que você criou manualmente (consulte Criptografando Dados em Repouso em um Sistema de Arquivos Existente)
Se você quiser gerenciar suas próprias chaves de criptografia mestras para criptografar dados em repouso, terá que:
- Crie uma chave principal de criptografia adequada no Vault (ou obtenha o OCID dessa chave). Consulte Gerenciando Chaves.
- Crie uma política que conceda acesso à chave de criptografia principal. Consulte Criar Política para Acessar Chaves de Criptografia Gerenciadas pelo Usuário para Criptografar Volumes de Inicialização, Volumes em Blocos e/ou Sistemas de Arquivos.
Opcionalmente, o serviço File Storage pode criptografar dados em trânsito. Se você especificar criptografia em trânsito, os dados em trânsito serão criptografados usando um certificado TLS (Transport Layer Security) que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário. A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS v. 1.2. Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption. Como especificar a criptografia em trânsito depende de se você está provisionando uma PVC em:
- um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI (consulte Criptografando Dados em Trânsito em um Novo Sistema de Arquivos)
- um sistema de arquivos existente que você criou manualmente (consulte Criptografando Dados em Trânsito em um Sistema de Arquivos Existente)
Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.
Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI
Os seguintes pré-requisitos se aplicam ao provisionar uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI:
- Os clusters devem estar executando o Kubernetes 1.22 ou posterior para provisionar uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI.
-
Devem existir políticas de IAM apropriadas para permitir que o plug-in de volume CSI crie e gerencie recursos do serviço File Storage. Mais especificamente:
- Uma política para criar e/ou gerenciar sistemas de arquivos, pontos de acesso NFS e caminhos de exportação. Por exemplo:
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
- Uma política para usar VNICs, IPs privados, zonas de DNS privadas e sub-redes. Por exemplo:
ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
- Uma política para criar e/ou gerenciar sistemas de arquivos, pontos de acesso NFS e caminhos de exportação. Por exemplo:
-
Se o compartimento ao qual pertence um pool de nós, uma sub-rede de nó de trabalho, um sistema de arquivos ou um ponto de acesso NFS for diferente do compartimento ao qual pertence um cluster, deverão existir políticas do serviço IAM para permitir que o plug-in de volume CSI acesse o local apropriado. Por exemplo:
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 uma chave de criptografia principal gerenciada pelo usuário específica do serviço Vault para criptografar dados em sistemas de arquivos, devem existir políticas apropriadas do serviço IAM para permitir que o plug-in de volume CSI acesse essa chave de criptografia principal. Consulte Criar Política para Acessar Chaves de Criptografia Gerenciadas pelo Usuário para Criptografar Volumes de Inicialização, Volumes em Blocos e/ou Sistemas de Arquivos.
Para provisionar dinamicamente uma PVC em um novo sistema de arquivos criado dinamicamente pelo plug-in de volume CSI no serviço File Storage:
- (Opcional) Crie um destino de montagem no serviço File Storage. Consulte Criando um Destino de Montagem.
O plug-in de volume CSI requer um ponto de acesso NFS ativo (ou seja, um ponto de acesso NFS com um endereço IP designado) para criar um novo sistema de arquivos. Se você não criar um ponto de acesso NFS com antecedência, especifique a sub-rede na qual o plug-in de volume CSI deverá criar um novo ponto de acesso NFS ao definir a classe de armazenamento.
- Defina uma nova classe de armazenamento que use o provisionador
fss.csi.oracleclould.com
:- Crie um arquivo de manifesto (por exemplo, em um arquivo chamado fss-dyn-st-class.yaml), especifique um nome para a nova classe de armazenamento e especifique valores para os parâmetros obrigatórios e opcionais:
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>"}'
em que:
name: <storage-class-name>
: Obrigatório. Um nome de sua escolha para a classe de armazenamento.availabilityDomain: <ad-name>
: Obrigatório. O nome do domínio de disponibilidade no qual criar o novo sistema de arquivos (e no qual criar o novo ponto de acesso NFS, se um OCID de ponto de acesso NFS existente não for especificado). Por exemplo,US-ASHBURN-AD-1
. Para descobrir o nome do domínio de disponibilidade a ser usado, execute o comando da CLIoci iam availability-domain list
(ou use a operação ListAvailabilityDomains). Para obter mais informações, consulte Nomes de Domínio de Disponibilidade da Sua Tenancy.mountTargetOcid: <mt-ocid> | mountTargetSubnetOcid: <mt-subnet-ocid>
: Obrigatório. O OCID de um ponto de acesso NFS ativo existente (mountTargetOcid: <mt-ocid>
) ou o OCID de uma sub-rede na qual será criado um novo ponto de acesso NFS (mountTargetSubnetOcid: <mt-subnet-ocid>
). EspecifiquemountTargetOcid
oumountTargetSubnetOcid
. Se você especificarmountTargetOcid
emountTargetSubnetOcid
na definição da classe de armazenamento, o ponto de acesso NFS existente especificado pormountTargetOcid
será usado emountTargetSubnetOcid
será ignorado. Por exemplo:mountTargetSubnetOcid: ocid1.subnet.oc1.iad.aaaaaaaa2xpk______zva
mountTargetOcid: ocid1.mounttarget.oc1.iad.aaaaaaaa4np______fuy
compartmentOcid: <compartment-ocid>
: Opcional. O OCID do compartimento ao qual o novo sistema de arquivos (e o novo ponto de acesso NFS, se um OCID de ponto de acesso NFS existente não for especificado) pertencerá. Se não for especificado, o padrão será o mesmo compartimento do cluster. Por exemplo,compartmentOcid: ocid1.compartment.oc1..aaaaaaaay______t6q
kmsKeyOcid: <key-ocid>
: Opcional. O OCID de uma chave de criptografia mestra que você gerencia, com a qual criptografar dados em repouso. Se não for especificado, os dados serão criptografados em repouso usando chaves de criptografia gerenciadas pela Oracle. Consulte Criptografando Dados em Repouso em um Novo Sistema de Arquivos. Por exemplo,kmsKeyOcid: ocid1.key.oc1.iad.anntl______usjh
exportPath: <path>
: Opcional. O caminho em uma exportação que identifica de forma exclusiva o sistema de arquivos dentro do destino de montagem. O caminho de exportação deve começar com uma barra (/) seguida por uma sequência de zero ou mais elementos separados por barra. Por exemplo,/FileSystem1
. Para obter mais informações, consulte Caminhos em Sistemas de Arquivos.Se você incluir
exportPath: <path>
em uma definição de classe de armazenamento, não especifique um caminho (como um caminho ou como o subcaminho de um caminho existente) que já exista. Se você especificar um caminho que já existe, um erro será retornado porque vários sistemas de arquivos com o mesmo ponto de acesso NFS não podem ter o mesmo caminho de exportação. Portanto, se você incluirexportPath: <path>
na definição de classe de armazenamento, use apenas essa definição de classe de armazenamento para criar um sistema de arquivos.Se você não incluir
exportPath: <path>
na definição da classe de armazenamento, o caminho assumirá como padrão o nome para exibição do sistema de arquivos criado pelo plug-in de volume CSI (começando com/csi-fss-
).exportOptions: "[{<options-in-json-format>}]"
Opcional. Um conjunto de parâmetros (no formato JSON válido) dentro da exportação que especifica o nível de acesso concedido aos clientes NFS quando eles se conectam a um ponto de acesso NFS. Uma entrada de opções de exportação NFS dentro de uma exportação define o acesso para um único endereço IP ou faixa de blocos CIDR. Para obter mais informações, consulte Working with NFS Exports and Export Options. Se não for especificado, o seguinte padrão será usado:exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
encryptInTransit: "true"|"false"
: Opcional. Indica se os dados devem ser criptografados em trânsito. Se você especificar"true"
, certifique-se de concluir as etapas de configuração descritas em Criptografando Dados em Trânsito em um Novo Sistema de Arquivos. Se não for especificado, o padrão será"false"
. Por exemplo,encryptInTransit: "true"
.oci.oraclecloud.com/initial-defined-tags-override: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
Opcional. Especifica uma tag definida para o novo sistema de arquivos. Por exemplo,oci.oraclecloud.com/initial-defined-tags-override: '{"Operations": {"CostCenter": "42"}}'
Observe que, para aplicar tags definidas de um namespace de tag pertencente a um compartimento a um recurso do sistema de arquivos pertencente a outro compartimento, inclua uma instrução de política para permitir que o cluster use o namespace de tag. Consulte Política Adicional do IAM quando um Cluster e um Namespace de Tag estão em Diferentes Compartimentos.
oci.oraclecloud.com/initial-freeform-tags-override: '{"<tag-key>": "<tag-value>"}'
Opcional. Especifica uma tag de formato livre para o novo sistema de arquivos. Por exemplo,oci.oraclecloud.com/initial-freeform-tags-override: '{"Department": "Finance"}'
Por exemplo:
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"
- Crie a classe de armazenamento a partir do arquivo de manifesto digitando:
kubectl create -f <filename>
Por exemplo:kubectl create -f fss-dyn-st-class.yaml
- Crie um arquivo de manifesto (por exemplo, em um arquivo chamado fss-dyn-st-class.yaml), especifique um nome para a nova classe de armazenamento e especifique valores para os parâmetros obrigatórios e opcionais:
-
Crie regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS referenciado na definição da classe de armazenamento (ou criado por) e para os nós de trabalho do cluster.
As regras de segurança a serem criadas dependem dos locais de rede relativos do ponto de acesso NFS e dos nós de trabalho, de acordo com os seguintes cenários:Esses cenários, as regras de segurança a serem criadas e onde criá-las, são totalmente descritos na documentação do serviço File Storage (consulte Configurando Regras de Segurança da VCN para o Serviço File Storage).
- Crie uma PVC a ser provisionada pelo novo sistema de arquivos no serviço File Storage, da seguinte forma:
- Crie um arquivo de manifesto para definir a PVC:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany storageClassName: "<storage-class-name>" resources: requests: storage: 50Gi
em que:
name: <pvc-name>
: Obrigatório. Por exemplo,fss-dynamic-claim
storageClassName: "<storage-class-name>"
: Obrigatório. O nome da classe de armazenamento definida anteriormente. Por exemplo,fss-dyn-storage
.accessModes: - ReadWriteMany
: Obrigatório. Observe queaccessModes:
deve especificarReadWriteMany
.storage: 50Gi
: Obrigatório. Observe que o Kubernetes exige que você especifique um valor parastorage:
no manifesto de PVC. No entanto, o serviço File Storage não suporta a especificação de um tamanho de sistema de arquivos e cria um novo sistema de arquivos com um tamanho padrão, independentemente do valor especificado parastorage:
.
Por exemplo, o seguinte arquivo de manifesto (denominado
fss-dyn-claim.yaml
) define uma PVC denominadafss-dynamic-claim
que é provisionada pelo sistema de arquivos definido na classe de armazenamentofss-dyn-storage
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-dynamic-claim spec: accessModes: - ReadWriteMany storageClassName: "fss-dyn-storage" resources: requests: storage: 50Gi
- Crie a PVC a partir do arquivo de manifesto digitando:
kubectl create -f <filename>
Por exemplo:kubectl create -f fss-dyn-claim.yaml
Um novo PVC é criado. O plug-in de volume CSI cria um novo volume persistente (PV) e um novo sistema de arquivos no serviço File Storage (junto com um novo ponto de acesso NFS se você não tiver especificado um ponto de acesso NFS existente).
O novo PVC está ligado ao novo PV. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle ou por você.
- Crie um arquivo de manifesto para definir a PVC:
- Verifique se a PVC foi vinculada ao novo volume persistente digitando:
kubectl get pvc
A saída do comando anterior confirma que a PVC foi vinculada com sucesso:
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE fss-dynamic-claim Bound csi-fss-<unique_ID> 50Gi RWX fss-dyn-storage 4m
- Use a nova PVC ao criar outros objetos, como pods. Por exemplo, você pode criar um novo pod com base na seguinte definição 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
-
Depois de criar um novo pod conforme descrito no exemplo da etapa anterior, você pode verificar se o pod está usando a nova PVC digitando:
kubectl describe pod nginx
Se você prever um requisito frequente de criar dinamicamente novos PVs e novos sistemas de arquivos ao criar PVCs, poderá especificar que a nova classe de armazenamento que você criou deve ser usada como a classe de armazenamento padrão para provisionar novas PVCs. Consulte a documentação do Kubernetes para ver mais detalhes.
Criptografando Dados em Repouso em um Novo Sistema de Arquivos
O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de criptografar dados em repouso usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault.
Dependendo de como você deseja criptografar dados em repouso, siga as instruções apropriadas abaixo:
- Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos que usa chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI e não inclua o parâmetro
kmsKeyOcid: <key-ocid>
na definição da classe de armazenamento. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle. - Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos que use chaves de criptografia principais que você gerencia para criptografar dados em repouso, siga as etapas em Provisionando um PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI, inclua o parâmetro
kmsKeyOcid: <key-ocid>
na definição da classe de armazenamento e especifique o OCID da chave de criptografia mestra no serviço Vault. Os dados são criptografados em repouso, usando a chave de criptografia especificada.
Criptografando Dados em Trânsito em um Novo Sistema de Arquivos
A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS 1.2 (Transport Layer Security). Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption.
Você especifica a criptografia em trânsito independentemente da criptografia em armazenamento. Os dados em trânsito são criptografados usando um certificado TLS que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário.
Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.
Para usar o plug-in de volume CSI para criar dinamicamente um novo sistema de arquivos com criptografia em trânsito:
- Siga as instruções em Setting up In-Transit Encryption for Linux para configurar a criptografia em trânsito no sistema de arquivos. Mais especificamente:
- Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
- Uma regra de entrada com monitoramento de estado que permite o tráfego TCP para um Intervalo de Portas de Destino de 2051, seja de todas as portas de um endereço IP de origem ou de um bloco CIDR de sua escolha ou de todas as origens.
- Uma regra de saída com monitoramento de estado que permite o tráfego TCP de um Intervalo de Portas de Origem de 2051, para todas as portas de um endereço IP de destino ou bloco CIDR de sua escolha ou para todos os destinos.
Para obter mais informações, consulte Cenário C: Ponto de acesso NFS e instância usam criptografia TLS em trânsito.
- Faça download do pacote
oci-fss-utils
em cada nó de trabalho. Observe que você precisa concordar com o Contrato de Licença. Consulte Tarefa 1: Fazer download do pacote OCI-FSS-UTILS. - Instale o pacote
oci-fss-utils
em cada nó de trabalho. Consulte Tarefa 2: Instalar o pacote OCI-FSS-UTILS no Oracle Linux ou CentOS.
- Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
-
Siga as instruções em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI e inclua o parâmetro
encryptInTransit: "true"
na definição da classe de armazenamento. Os dados são criptografados em trânsito, usando uma chave de criptografia gerenciada pela Oracle.
Provisionando uma PVC em um Sistema de Arquivos Existente
Para criar uma PVC em um sistema de arquivos existente no serviço File Storage (usando chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso):
- Crie um sistema de arquivos com um ponto de acesso NFS no serviço File Storage, selecionando a opção de criptografia Criptografar usando chaves gerenciadas pela Oracle. Consulte Criando um Sistema de Arquivos.
- Crie regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos e para os nós de trabalho do cluster.As regras de segurança a serem criadas dependem dos locais de rede relativos do ponto de acesso NFS e dos nós de trabalho, de acordo com os seguintes cenários:
Esses cenários, as regras de segurança a serem criadas e onde criá-las, são totalmente descritos na documentação do serviço File Storage (consulte Configurando Regras de Segurança da VCN para o Serviço File Storage).
- Crie um PV suportado pelo sistema de arquivos no serviço File Storage da seguinte forma:
-
Crie um arquivo de manifesto para definir um PV e, na seção
csi:
, defina:driver
afss.csi.oraclecloud.com
volumeHandle
a<FileSystemOCID>:<MountTargetIP>:<path>
em que:<FileSystemOCID>
é o OCID do sistema de arquivos definido no serviço File Storage.<MountTargetIP>
é o endereço IP designado ao ponto de acesso NFS.<path>
é o caminho de montagem para o sistema de arquivos relativo ao endereço IP do ponto de acesso NFS, começando com uma barra.
ocid1.filesystem.oc1.iad.aaaa______j2xw:10.0.0.6:/FileSystem1
Por exemplo, o seguinte arquivo de manifesto (denominado fss-pv.yaml) define um PV chamado
fss-pv
suportado por um sistema de arquivos no serviço 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
- Crie o PV a partir do arquivo de manifesto digitando:
kubectl create -f <filename>
Por exemplo:
kubectl create -f fss-pv.yaml
-
- Crie uma PVC provisionada pelo PV que você criou, da seguinte forma:
- Crie um arquivo de manifesto para definir a PVC e defina:
storageClassName
a""
volumeName
para o nome do PV criado (por exemplo,fss-pv
)
Por exemplo, o seguinte arquivo de manifesto (denominado
fss-pvc.yaml
) define uma PVC chamadafss-pvc
que é provisionada por um PV chamadofss-pv
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 50Gi volumeName: fss-pv
Observe que o elemento
requests: storage:
deve estar presente no arquivo de manifesto da PVC, e seu valor deve corresponder ao valor especificado para o elementocapacity: storage:
no arquivo de manifesto do PV. Além disso, o valor do elementorequests: storage:
é ignorado. - Crie a PVC a partir do arquivo de manifesto digitando:
kubectl create -f <filename>
Por exemplo:kubectl create -f fss-pvc.yaml
- Crie um arquivo de manifesto para definir a PVC e defina:
A PVC está vinculada ao PV suportado pelo sistema de arquivos do serviço File Storage. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.
Criptografando Dados em Repouso em um Sistema de Arquivos Existente
O serviço File Storage sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de criptografar sistemas de arquivos usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault.
Dependendo de como você deseja criptografar dados em repouso, siga as instruções apropriadas abaixo:
- Para criar uma PVC em um sistema de arquivos usando chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Sistema de Arquivos Existente e selecione a opção de criptografia Criptografar usando chaves gerenciadas pela Oracle, conforme descrito. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.
- Para criar uma PVC em um sistema de arquivos usando chaves de criptografia principais que você gerencia para criptografar dados em repouso, siga as etapas em Provisionando uma PVC em um Sistema de Arquivos Existente, mas selecione a opção de criptografia Criptografar usando chaves gerenciadas pelo cliente e especifique a chave de criptografia principal no serviço Vault. Os dados são criptografados em repouso, usando a chave de criptografia especificada.
Criptografando Dados em Trânsito em um Sistema de Arquivos Existente
A criptografia em trânsito protege os dados que estão sendo transferidos entre instâncias e sistemas de arquivos montados usando a criptografia TLS v. 1.2 (Transport Layer Security). Para obter mais informações sobre criptografia em trânsito e o serviço File Storage, consulte Using In-transit TLS Encryption.
Você especifica a criptografia em trânsito independentemente da criptografia em armazenamento. Os dados em trânsito são criptografados usando um certificado TLS que é sempre gerenciado pela Oracle, independentemente de os dados em repouso serem criptografados usando chaves gerenciadas pela Oracle ou usando chaves gerenciadas pelo usuário.
Observe que, ao usar o serviço File Storage para provisionar PVCs, a criptografia em trânsito só é suportada quando as instâncias de computação que hospedam nós de trabalho estão executando o Oracle Linux 7 e o Oracle Linux 8.
Para criar uma PVC em um sistema de arquivos em que os dados são criptografados em trânsito:
- Siga as instruções em Setting up In-Transit Encryption for Linux para configurar a criptografia em trânsito no sistema de arquivos. Mais especificamente:
- Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
- Uma regra de entrada com monitoramento de estado que permite o tráfego TCP para um Intervalo de Portas de Destino de 2051, seja de todas as portas de um endereço IP de origem ou de um bloco CIDR de sua escolha ou de todas as origens.
- Uma regra de saída com monitoramento de estado que permite o tráfego TCP de um Intervalo de Portas de Origem de 2051, para todas as portas de um endereço IP de destino ou bloco CIDR de sua escolha ou para todos os destinos.
Para obter mais informações, consulte Cenário C: Ponto de acesso NFS e instância usam TLS na criptografia -transit.
- Faça download do pacote
oci-fss-utils
em cada nó de trabalho. Observe que você precisa concordar com o Contrato de Licença. Consulte Tarefa 1: Fazer download do pacote OCI-FSS-UTILS. - Instale o pacote
oci-fss-utils
em cada nó de trabalho. Consulte Tarefa 2: Instalar o pacote OCI-FSS-UTILS no Oracle Linux ou CentOS.
- Conclua os pré-requisitos configurando as seguintes regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o ponto de acesso NFS que exporta o sistema de arquivos:
-
Siga as instruções em Provisionando uma PVC em um Sistema de Arquivos Existente, selecionando a opção Criptografar usando chaves gerenciadas pela Oracle ou a opção Criptografar usando chaves gerenciadas pelo cliente conforme necessário para criptografia de dados em repouso. No entanto, ao criar o arquivo de manifesto para definir um PV, defina
encryptInTransit
como"true"
na seçãocsi
do arquivo. Por exemplo: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"
Diagnosticando e Solucionando Problemas do Provisionamento do Serviço File Storage de PVCs
O pod não pode acessar o sistema de arquivos devido a permissões insuficientes
Descrição
Quando um pod tenta acessar um volume persistente (PV) suportado por um sistema de arquivos no serviço File Storage, a tentativa pode falhar com uma mensagem "Permissão Negada".
Causa
Ao definir um PV suportado por um sistema de arquivos no serviço File Storage, você define o atributo accessModes
do PV como ReadWriteMany
e não precisa especificar um valor para o atributo fsType
do PV.
O plug-in de volume CSI é implementado como um objeto CSIDriver. Você usa o atributo fsGroupPolicy
do objeto CSIDriver para controlar se o CSIDriver altera a propriedade e as permissões de um volume para corresponder ao atributo fsGroup
especificado no securityContext
de um pod que monta o volume. A alteração da propriedade e das permissões do volume permite que o pod acesse o volume depois de montá-lo.
Por padrão, o atributo fsGroupPolicy
do objeto CSIDriver é definido como ReadWriteOnceWithFSType
, indicando que CSIDriver deve examinar a definição PV para determinar se a propriedade e as permissões do volume devem ser modificadas para corresponder ao atributo fsGroup
do pod da seguinte forma:
- Se o atributo
fsType
do PV estiver definido, o CSIDriver modificará a propriedade e as permissões do volume para corresponder ao atributofsGroup
especificado nosecurityContext
do pod. Como resultado, o volume fica acessível ao pod. - Se o atributo
fsType
do PV não estiver definido, o CSIDriver não modificará a propriedade e as permissões do volume. O volume só pode ser acessado por processos em execução como raiz. Como resultado, um pod que não está em execução como raiz recebe a mensagem "Permissão Negada" ao tentar acessar um diretório ou arquivo no volume montado.
Veja como verificar se o motivo pelo qual um pod está recebendo a mensagem "Permissão Negada" é porque o atributo fsGroupPolicy
do objeto CSIDriver está definido como ReadWriteOnceWithFSType
e o atributo fsType
do PV não está definido. Execute um comando no pod para gravar um arquivo em um diretório no volume montado e, em seguida, examine as propriedades do arquivo para confirmar se o proprietário do grupo corresponde ao atributo fsGroup
especificado no securityContext
do pod. Por exemplo, suponha que um pod tenha o seguinte manifesto:
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
- Execute um comando no pod para gravar um arquivo em um diretório no volume montado. Por exemplo, informando:
kubectl exec -it security-context-demo -- sh -c "cd /data/demo && echo hello > testfile"
- Examine as propriedades do arquivo recém-criado para confirmar os direitos de acesso. Por exemplo, informando:
kubectl exec -it security-context-demo -- sh -c "ls -l /data/demo/testfile"
Idealmente, a saída mostra que o proprietário do grupo do arquivo é o mesmo especificado pelo atributo
fsGroup
do pod, dando ao pod acesso ao arquivo. Por exemplo:-rw-r--r-- 1 root 2000 6 Jun 6 20:08 testfile
No entanto, se o atributo
fsGroupPolicy
do objeto CSIDriver estiver definido comoReadWriteOnceWithFSType
e o atributofsType
do PV não estiver definido, a saída mostrará o proprietário do grupo do arquivo como raiz e o pod não terá acesso ao arquivo. Por exemplo:-rw-r--r-- 1 root root 6 Jun 6 20:08 testfile
Para obter mais informações, consulte a Política de Volume fsGroup do CSI na documentação do Kubernetes.
Ação
Se você souber o ID de grupo do proprietário do volume dos arquivos que o pod acessa e o ID de grupo do proprietário do volume não for raiz (0), recomendamos que você especifique um grupo suplementar em securityContext
na especificação do pod. Por exemplo, se o ID de usuário do proprietário do volume for 0 (raiz) e o ID de grupo do proprietário do volume for 1000, especifique 1000 como um grupo complementar no securityContext
do pod da seguinte forma:
spec:
securityContext:
supplementalGroups: [1000]
Se você não puder designar o ID de grupo do proprietário do volume como um grupo complementar no securityContext
do pod, sugerimos duas soluções alternativas:
- Solução Alternativa 1: Ative o objeto CSIDriver para modificar a propriedade de volume e as permissões para corresponder ao atributo
fsGroup
especificado nosecurityContext
do pod. - Solução Alternativa 2: Use as opções de exportação Squash do sistema de arquivos para permitir que os pods acessem arquivos e diretórios no volume sem alterar a propriedade do volume.
Antes de escolher uma solução, considere as vantagens e desvantagens descritas para cada solução.
Solução Alternativa 1: Ative o objeto CSIDriver para modificar a propriedade de volume e as permissões para corresponder ao atributo fsGroup
especificado no securityContext
do pod
Para permitir que o objeto CSIDriver modifique a propriedade do volume e as permissões para corresponder ao atributo fsGroup
especificado no securityContext
do pod, defina o atributo fsGroupPolicy
do objeto CSIDriver como File
da seguinte forma:
- Obtenha o arquivo de configuração CSIDriver digitando:
kubectl get csiDriver fss.csi.oraclecloud.com -oyaml > fss_csi_driver.yaml
- Em um editor de texto, edite o arquivo fss_csi_driver.yaml e altere o atributo
fsGroupPolicy
do objeto CSIDriver deReadWriteOnceWithFSType
paraFile
.Por exemplo, altere:
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
para:
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
Altere apenas o valor de
fsGroupPolicy
. Não altere nenhum outro valor. - Salvar e fechar o arquivo fss_csi_driver.yaml.
- Exclua o objeto CSIDriver existente digitando:
kubectl delete csiDriver fss.csi.oraclecloud.com
- Crie o novo objeto CSIDriver digitando:
kubectl apply -f fss_csi_driver.yaml
- Reinicie o pod que encontrou a mensagem "Permissão Negada".
Coisas a considerar antes de escolher esta solução:
- Ao montar um grande volume com muitos arquivos e diretórios aninhados, você pode notar que a montagem do volume leva muito tempo. Essa latência de montagem de volume ocorre porque, quando
fsGroupPolicy
é definido comoFile
, o Kubernetes altera recursivamente a propriedade do volume de todos os arquivos e diretórios aninhados chamandochown()
echmod()
. Para reduzir a latência de montagem de volume, tente definir o atributofsGroupChangePolicy
como"OnRootMismatch"
nosecurityContext
do pod, da seguinte forma:securityContext: fsGroup: <sample-fsGroup> fsGroupChangePolicy: "OnRootMismatch"
A definição de
fsGroupChangePolicy
como"OnRootMismatch"
reduz a latência de montagem do volume porque o Kubernetes só altera a propriedade do volume nos casos em que as permissões do arquivo de nível raiz não correspondem à definiçãofsGroup
do pod. -
Os IDs de grupo especificados como valores de
fsGroup
para todos os pods que acessam um volume são adicionados como proprietários de grupos complementares do volume. Como resultado, o acesso a esse volume é restrito aos IDs de grupo especificados como valores defsGroup
.Por exemplo, se você criar dois pods com valores
fsGroup
diferentes que montam o mesmo volume, o ID do grupo especificado para ofsGroup
do segundo pod será o grupo do proprietário do volume e o primeiro pod ainda terá acesso ao volume. - Se o Kubernetes detectar uma incompatibilidade de propriedade entre o proprietário do volume e o
fsGroup
definido na especificação do pod, o Kubernetes alterará a propriedade do volume de todos os arquivos. Se o volume tiver muitos arquivos e diretórios aninhados, você pode notar que a montagem do volume leva muito tempo.
Solução alternativa 2: Use as opções de exportação Squash do sistema de arquivos para permitir que os pods acessem arquivos e diretórios em um volume sem alterar a propriedade do volume.
Esta solução requer que você defina a opção de exportação Squash do sistema de arquivos como Todos. A definição de Squash como Tudo concede acesso irrestrito ao sistema de arquivos a todos os processos em execução no nó em que o volume está montado (inclusive a outros pods). Portanto, antes de escolher esta solução, verifique a conformidade com seus requisitos de segurança.
Você pode permitir que os pods acessem arquivos e diretórios em um volume sem alterar a propriedade do volume definindo as opções de exportação Squash do sistema de arquivos. As opções de exportação Squash determinam se os clientes de origem que acessam o sistema de arquivos têm seu ID de usuário (UID) e ID de grupo (GID) remapados para Squash de UID e Squash de GID. Para obter mais informações, consulte Opções de Exportação NFS.
Se você decidir usar essa solução, não altere o atributo fsGroupPolicy
do objeto CSIDriver para File
.
Para definir opções de exportação Squash ao provisionar uma PVC em um sistema de arquivos existente:
- Abra o menu de navegação e clique em Armazenamento. Em File Storage, clique em Sistemas de Arquivos.
- Na seção Escopo da lista, em Compartimento, selecione um compartimento. Todos os sistemas de arquivos no compartimento selecionado são exibidos.
- Clique no nome do sistema de arquivos para o qual deseja definir opções de exportação.
- Na página de detalhes do sistema de arquivos, em Recursos, clique em Exportações.
- Na lista Exportações, clique no nome da exportação para a qual você deseja definir opções.
- Na página de detalhes da exportação, em Opções de Exportação do cliente NFS, clique em Editar opções.
-
No painel Editar opções, atualize as opções de exportação Squash da seguinte forma:
- Squash: Altere para Todos.
- Formar UID: Altere para o UID do proprietário do volume ou para o UID raiz (0).
- Squash GUID: Altere para o GID do proprietário do volume ou para o GID raiz (0).
Para obter mais informações, consulte Opções de Exportação NFS.
- Clique em Atualizar.
Para definir opções de exportação Squash ao provisionar uma PVC em um novo sistema de arquivos:
- Siga as instruções em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI, mas quando você criar o arquivo de manifesto para a classe de armazenamento que usa o provisionador
fss.csi.oracleclould.com
, defina o parâmetroexportOptions
para especificar valores para as opções de exportação Squash da seguinte forma:exportOptions: "[\"identitySquash\":\"ALL\",\"anonymous-uid\":\"0\",\"anonymous-gid\":\"0\"]"
Por exemplo:
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"
- Crie a classe de armazenamento a partir do arquivo de manifesto digitando:
kubectl create -f <filename>
Por exemplo:kubectl create -f fss-dyn-st-class.yaml
- Siga as instruções restantes em Provisionando uma PVC em um Novo Sistema de Arquivos Usando o Plug-in de Volume CSI para criar regras de segurança e a PVC.
O plug-in de volume CSI cria um novo volume persistente (PV) e um novo sistema de arquivos no serviço File Storage. O novo sistema de arquivos tem as opções de exportação Squash especificadas na classe de armazenamento.
Coisas a considerar antes de escolher esta solução:
- A definição de Squash como Tudo concede acesso irrestrito ao sistema de arquivos a todos os processos em execução no nó em que o volume está montado (inclusive a outros pods). Portanto, antes de escolher esta solução, verifique a conformidade com seus requisitos de segurança.
- Diferentemente da Solução Alternativa 1, a propriedade de um volume não muda sempre que o volume é montado por um novo pod que tem seu atributo
fsGroup
definido para outro grupo. - Ao contrário da Solução Alternativa 1, não há latência de montagem de volume ao montar um grande volume com muitos arquivos e diretórios aninhados, porque o Kubernetes não altera recursivamente a propriedade de volume dos arquivos e diretórios aninhados.
- Diferentemente da Solução Alternativa 1, você não edita o arquivo fss_csi_driver.yaml e altera o atributo
fsGroupPolicy
do objeto CSIDriver paraFile
. Em vez disso, o valor de atributo padrãofsGroupPolicy: ReadWriteOnceWithFSType
garante que o objeto CSIDriver utilize recursos fornecidos pelo serviço File Storage.