Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Armazenamento/ Object Storage Service/ Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS
Atualizado em 2024-11-28 GMT+08:00

Uso de uma chave de acesso (AK/SK) personalizada para montar um volume do OBS

Cenário

Armazenamento do contêiner do CCE (Everest) da versão 1.2.8 ou posterior suporta chaves de acesso personalizadas. Dessa forma, os usuários do IAM podem usar suas próprias chaves de acesso personalizadas para montar um volume do OBS. Para obter detalhes, consulte Como controlar o acesso ao OBS?

Pré-requisitos

Restrições

  • Quando um volume do OBS é montado usando uma chave de acesso (AK/SK) personalizada, a chave de acesso não pode ser excluída ou desabilitada. Caso contrário, o contêiner de serviço não pode acessar o volume do OBS montado.
  • Teclas de acesso personalizadas não podem ser configuradas para contêineres de Kata.

Desativar a montagem automática da chave

A chave que você carregou é usada por padrão ao montar um volume do OBS. Ou seja, todos os usuários do IAM em sua conta usarão a mesma chave para montar buckets do OBS e terão as mesmas permissões em buckets. Essa configuração não permite que você configure permissões diferenciadas para diferentes usuários do IAM.

Se você carregou a AK/SK, desative a montagem automática de chaves de acesso ativando o parâmetro disable_auto_mount_secret no complemento everest para impedir que os usuários do IAM executem operações não autorizadas. Desta forma, as teclas de acesso carregadas no console não serão usadas ao criar volumes do OBS.

  • Ao ativar disable-auto-mount-secret, certifique-se de que não exista nenhum volume do OBS no cluster. Uma carga de trabalho montada com um volume do OBS, quando dimensionada ou reiniciada, não conseguirá remontar o volume do OBS porque precisa especificar a chave de acesso, mas é proibida por disable-auto-mount-secret.
  • Se disable-auto-mount-secret estiver definido como true, uma chave de acesso deve ser especificada quando um PV ou PVC for criado. Caso contrário, o volume do OBS não será montado.

kubectl edit ds everest-csi-driver -nkube-system

Pesquise disable-auto-mount-secret e defina-o como true.

Execute :wq para salvar as configurações e sair. Aguarde até que o pod seja reiniciado.

Obter uma chave de acesso

  1. Faça logon no console.
  2. Passe o cursor sobre o nome de usuário no canto superior direito e escolha My Credentials na lista suspensa.
  3. No painel de navegação, escolha Access Keys.
  4. Clique em Create Access Key. A caixa de diálogo Create Access Key é exibida.
  5. Clique em OK para baixar a chave de acesso.

Criar um segredo usando uma chave de acesso

  1. Obtenha uma chave de acesso.
  2. Codifique as chaves usando Base64. (Suponha que o AK é xxx e a SK é yyy.)

    echo -n xxx|base64

    echo -n yyy|base64

    Grave o AK e a SK codificados.

  3. Crie um arquivo YAML para o segredo, por exemplo, test-user.yaml.

    apiVersion: v1
    data:
      access.key: WE5WWVhVNU*****
      secret.key: Nnk4emJyZ0*****
    kind: Secret
    metadata:
      name: test-user
      namespace: default
      labels:
        secret.kubernetes.io/used-by: csi
    type: cfe/secure-opaque

    Especificamente:

    Parâmetro

    Descrição

    access.key

    AK codificado em Base64.

    secret.key

    SK codificada em Base64.

    name

    Nome de segredo.

    namespace

    Namespace do segredo.

    secret.kubernetes.io/used-by: csi

    Adicione este rótulo no arquivo YAML se quiser disponibilizá-lo no console do CCE ao criar um PV/PVC do OBS.

    type

    Tipo de segredo. O valor deve ser cfe/secure-opaque.

    Quando este tipo é usado, os dados inseridos pelos usuários são automaticamente criptografados.

  4. Crie o segredo.

    kubectl create -f test-user.yaml

Montar um segredo ao criar estaticamente um volume do OBS

Depois que um segredo é criado usando a AK/SK, você pode associar o segredo com o PV a ser criado e, em seguida, usar a AK/SK no segredo para montar um volume do OBS.

  1. Faça logon no console do OBS, crie um bucket do OBS e registre o nome do bucket e a classe de armazenamento. O sistema de arquivos paralelo é usado como exemplo.
  2. Crie um arquivo YAML para o PV, por exemplo, pv-example.yaml.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-obs-example
      annotations:
        pv.kubernetes.io/provisioned-by: everest-csi-provisioner
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 1Gi
      csi:
        nodePublishSecretRef:
          name: test-user
          namespace: default
        driver: obs.csi.everest.io
        fsType: obsfs
        volumeAttributes:
          everest.io/obs-volume-type: STANDARD
          everest.io/region: ap-southeast-1
          storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
        volumeHandle: obs-normal-static-pv
      persistentVolumeReclaimPolicy: Delete
      storageClassName: csi-obs

    Parâmetro

    Descrição

    nodePublishSecretRef

    Segredo especificado durante a montagem.

    • name: nome do segredo
    • namespace: namespace do segredo

    fsType

    Tipo de arquivo. O valor pode ser obsfs ou s3fs. Se o valor for s3fs, um bucket do OBS será criado e montado usando s3fs. Se o valor for obsfs, um sistema de arquivos paralelo do OBS será criado e montado usando obsfs. É aconselhável definir este campo para obsfs.

    volumeHandle

    Nome do bucket do OBS.

  3. Crie um PV.

    kubectl create -f pv-example.yaml

    Depois que um PV é criado, você pode criar uma PVC e associá-lo ao PV.

  4. Crie um arquivo YAML para o PVC, por exemplo, pvc-example.yaml.

    Exemplo de arquivo YAML para a PVC:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        csi.storage.k8s.io/node-publish-secret-name: test-user
        csi.storage.k8s.io/node-publish-secret-namespace: default
        volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
        everest.io/obs-volume-type: STANDARD
        csi.storage.k8s.io/fstype: obsfs
      name: obs-secret
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-obs
      volumeName: pv-obs-example

    Parâmetro

    Descrição

    csi.storage.k8s.io/node-publish-secret-name

    Nome do segredo

    csi.storage.k8s.io/node-publish-secret-namespace

    Namespace do segredo

  5. Crie uma PVC.

    kubectl create -f pvc-example.yaml

    Depois que a PVC é criada, você pode criar uma carga de trabalho e associá-la à PVC para criar volumes.

Montar um segredo ao criar dinamicamente um volume do OBS

Ao criar dinamicamente um volume do OBS, você pode usar o seguinte método para especificar um segredo:

  1. Crie um arquivo YAML para a PVC, por exemplo, pvc-example.yaml.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      annotations:
        csi.storage.k8s.io/node-publish-secret-name: test-user
        csi.storage.k8s.io/node-publish-secret-namespace: default
        everest.io/obs-volume-type: STANDARD
        csi.storage.k8s.io/fstype: obsfs
      name: obs-secret
      namespace: default
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: csi-obs

    Parâmetro

    Descrição

    csi.storage.k8s.io/node-publish-secret-name

    Nome do segredo

    csi.storage.k8s.io/node-publish-secret-namespace

    Namespace do segredo

  2. Crie uma PVC.

    kubectl create -f pvc-example.yaml

    Depois que a PVC é criada, você pode criar uma carga de trabalho e associá-la à PVC para criar volumes.

Verificação

Você pode usar um segredo de um usuário do IAM para montar um volume do OBS. Suponha que uma carga de trabalho denominada obs-secret seja criada, o caminho de montagem no contêiner seja /temp e o usuário do IAM tenha as permissões ReadOnlyAccess e Tenant Guest.
  1. Consulte o nome do pod da carga de trabalho.

    kubectl get po | grep obs-secret

    Saídas esperadas:

    obs-secret-5cd558f76f-vxslv          1/1     Running   0          3m22s
  2. Consulte os objetos no caminho de montagem. Neste exemplo, a consulta foi bem-sucedida.

    kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/

  3. Grave dados no caminho de montagem. Neste exemplo, a operação de gravação falhou.

    kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test

    Saídas esperadas:

    touch: setting times of '/temp/test': No such file or directory
    command terminated with exit code 1
  4. Defina as permissões de leitura/gravação para o usuário do IAM que montou o volume do OBS referindo-se à configuração da política de bucket.

  5. Grave dados no caminho de montagem novamente. Neste exemplo, a operação de gravação foi bem-sucedida.

    kubectl exec obs-secret-5cd558f76f-vxslv -- touch /temp/test

  6. Verifique o caminho de montagem no contêiner para ver se os dados foram gravados com êxito.

    kubectl exec obs-secret-5cd558f76f-vxslv -- ls -l /temp/

    Saídas esperadas:

    -rwxrwxrwx 1 root root 0 Jun  7 01:52 test