Partilhar via


Alternativa: configuração de autenticação baseada em chave para Cloud Ingest Edge Volumes

Este artigo descreve uma configuração alternativa para Cloud Ingest Edge Volumes (carregamento de blob com limpeza local) com autenticação baseada em chave.

Essa configuração é uma opção alternativa para uso com métodos de autenticação baseados em chave. Você deve revisar a configuração recomendada usando identidades gerenciadas atribuídas pelo sistema na configuração Cloud Ingest Edge Volumes.

Pré-requisitos

  1. Crie uma conta de armazenamento seguindo estas instruções.

    Nota

    Ao criar uma conta de armazenamento, é recomendável criá-la no mesmo grupo de recursos e região/local que o cluster do Kubernetes.

  2. Crie um contêiner na conta de armazenamento que você criou na etapa anterior, seguindo estas instruções.

Criar um segredo do Kubernetes

Os Volumes de Borda oferecem suporte aos três métodos de autenticação a seguir:

  • Autenticação de Assinatura de Acesso Compartilhado (SAS) (recomendado)
  • Autenticação de cadeia de conexão
  • Autenticação de chave de armazenamento

Depois de concluir a autenticação para um desses métodos, vá para a seção Criar uma declaração de volume persistente (PVC) de ingestão de nuvem (PVC).

Criar um segredo do Kubernetes usando a autenticação SAS (Assinatura de Acesso Compartilhado)

Você pode configurar a autenticação SAS usando YAML e kubectl, ou usando a CLI do Azure.

Para localizar o , storageaccountsasexecute o seguinte procedimento:

  1. Navegue para a sua conta de armazenamento no portal do Azure.
  2. Expanda Segurança + rede na folha esquerda e selecione Assinatura de acesso compartilhado.
  3. Em Tipos de recursos permitidos, selecione Objeto de contêiner > de serviço>.
  4. Em Permissões permitidas, desmarque Armazenamento imutável e Exclusão permanente.
  5. Em Data/hora de início e expiração, escolha a data e hora de término desejadas.
  6. Na parte inferior, selecione Gerar SAS e cadeia de conexão.
  7. Os valores listados em token SAS são usados para as storageaccountsas variáveis na próxima seção.

Autenticação de Assinatura de Acesso Compartilhado (SAS) usando YAML e kubectl

  1. Crie um arquivo nomeado sas.yaml com o seguinte conteúdo. Substitua metadata::name, metadata::namespace e storageaccountconnectionstring pelos seus próprios valores.

    Nota

    Use apenas letras minúsculas e traços. Para obter mais informações, consulte a documentação de nomeação de objetos do Kubernetes.

    apiVersion: v1
    kind: Secret
    metadata:
      ### This name should look similar to "kharrisStorageAccount-secret" where "kharrisStorageAccount" is replaced with your storage account name
      name: <your-storage-acct-name-secret>
      # Use a namespace that matches your intended consuming pod, or "default" 
      namespace: <your-intended-consuming-pod-or-default>
    stringData:
      authType: SAS
      # Container level SAS (must have ? prefixed)
      storageaccountsas: "?..."
    type: Opaque
    
  2. Para se candidatar sas.yaml, execute:

    kubectl apply -f "sas.yaml"
    

Autenticação SAS (Assinatura de Acesso Compartilhado) usando CLI

  • Se você quiser definir o escopo da autenticação SAS no nível do contêiner, use os comandos a seguir. Você deve atualizar YOUR_CONTAINER_NAME a partir do primeiro comando e YOUR_NAMESPACE, YOUR_STORAGE_ACCT_NAMEe YOUR_SECRET do segundo comando:

    az storage container generate-sas [OPTIONAL auth via --connection-string "..."] --name YOUR_CONTAINER_NAME --permissions acdrw --expiry '2025-02-02T01:01:01Z'
    kubectl create secret generic -n "YOUR_NAMESPACE" "YOUR_STORAGE_ACCT_NAME"-secret --from-literal=storageaccountsas="YOUR_SAS" 
    

Criar uma declaração de volume persistente (PVC) de ingestão de nuvem

  1. Crie um arquivo nomeado cloudIngestPVC.yaml com o seguinte conteúdo. Você deve editar o metadata::name valor e adicionar um nome para sua Declaração de Volume Persistente. Esse nome é referenciado na última linha da deploymentExample.yaml próxima etapa. Você também deve atualizar o valor com o metadata::namespace pod de consumo pretendido. Se você não tiver um pod de consumo pretendido, o metadata::namespace valor é default:

    Nota

    Use apenas letras minúsculas e traços. Para obter mais informações, consulte a documentação de nomeação de objetos do Kubernetes.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      ### Create a name for the PVC ###
      name: <your-storage-acct-name-secret>
      ### Use a namespace that matches your intended consuming pod, or "default" ###
      namespace: <your-intended-consuming-pod-or-default>
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 2Gi
      storageClassName: cloud-backed-sc
    
  2. Para se candidatar cloudIngestPVC.yaml, execute:

    kubectl apply -f "cloudIngestPVC.yaml"
    

Anexar subvolume ao Volume de Borda

  1. Obtenha o nome do seu Volume de Borda usando o seguinte comando:

    kubectl get edgevolumes
    
  2. Crie um arquivo chamado edgeSubvolume.yaml e copie o conteúdo a seguir. Atualize as variáveis com suas informações:

    Nota

    Use apenas letras minúsculas e traços. Para obter mais informações, consulte a documentação de nomeação de objetos do Kubernetes.

    • metadata::name: Crie um nome para o seu subvolume.
    • spec::edgevolume: Este nome foi recuperado da etapa anterior usando kubectl get edgevolumes.
    • spec::path: Crie seu próprio nome de subdiretório sob o caminho de montagem. Observe que o exemplo a seguir já contém um nome de exemplo (exampleSubDir). Se você alterar esse nome de caminho, a linha 33 em deploymentExample.yaml deverá ser atualizada com o novo nome de caminho. Se você optar por renomear o caminho, não use uma barra anterior.
    • spec::auth::authType: Depende do método de autenticação usado nas etapas anteriores. As entradas aceites incluem sas, connection_string, e key.
    • spec::auth::secretName: Se você usou a autenticação de chave de armazenamento, o seu secretName é {your_storage_account_name}-secret. Se você usou a cadeia de conexão ou a autenticação SAS, você secretName foi especificado por você.
    • spec::auth::secretNamespace: Corresponde ao seu pod de consumo pretendido, ou default.
    • spec::container: O nome do contêiner em sua conta de armazenamento.
    • spec::storageaccountendpoint: Navegue até sua conta de armazenamento no portal do Azure. Na página Visão geral, perto do canto superior direito da tela, selecione Exibição JSON. Você pode encontrar o storageaccountendpoint link em properties::p rimaryEndpoints::blob. Copie o link inteiro (por exemplo, https://mytest.blob.core.windows.net/).
    apiVersion: "arccontainerstorage.azure.net/v1"
    kind: EdgeSubvolume
    metadata:
      name: <create-a-subvolume-name-here>
    spec:
      edgevolume: <your-edge-volume-name-here>
      path: exampleSubDir # If you change this path, line 33 in deploymentExample.yaml must be updated. Don't use a preceding slash.
      auth:
        authType: MANAGED_IDENTITY
        secretName: <your-secret-name>
        secretNamespace: <your_namespace>
      storageaccountendpoint: <your_storage_account_endpoint>
      container: <your-blob-storage-account-container-name>
      ingestPolicy: edgeingestpolicy-default # Optional: See the following instructions if you want to update the ingestPolicy with your own configuration
    
  3. Para se candidatar edgeSubvolume.yaml, execute:

    kubectl apply -f "edgeSubvolume.yaml"
    

Opcional: Modificar o ingestPolicy a partir do padrão

  1. Se você quiser alterar o ingestPolicy do padrão edgeingestpolicy-default, crie um arquivo nomeado myedgeingest-policy.yaml com o seguinte conteúdo. Atualize as seguintes variáveis com as suas preferências.

    Nota

    Use apenas letras minúsculas e traços. Para obter mais informações, consulte a documentação de nomeação de objetos do Kubernetes.

    • metadata::name: Crie um nome para a sua ingestPolicy. Esse nome deve ser atualizado e referenciado na seção spec::ingestPolicy do seu edgeSubvolume.yaml.
    • spec::ingest::order: A ordem em que os arquivos sujos são carregados. Este é o melhor esforço, não uma garantia (padrão para o mais antigo primeiro). As opções de encomenda são: mais antigo-primeiro ou mais novo-primeiro.
    • spec::ingest::minDelaySec: O número mínimo de segundos antes de um arquivo sujo é elegível para ingestão (o padrão é 60). Este número pode variar entre 0 e 31536000.
    • spec::eviction::order: Como os arquivos são removidos (o padrão é não ordenado). As opções para ordem de despejo são: não ordenada ou nunca.
    • spec::eviction::minDelaySec: O número de segundos antes de um arquivo limpo ser elegível para remoção (o padrão é 300). Este número pode variar entre 0 e 31536000.
    apiVersion: arccontainerstorage.azure.net/v1
    kind: EdgeIngestPolicy
    metadata:
      name: <create-a-policy-name-here> # This will need to be updated and referenced in the spec::ingestPolicy section of the edgeSubvolume.yaml
    spec:
      ingest:
        order: <your-ingest-order>
        minDelaySec: <your-min-delay-sec>
      eviction:
        order: <your-eviction-order>
        minDelaySec: <your-min-delay-sec>
    
  2. Para se candidatar myedgeingest-policy.yaml, execute:

    kubectl apply -f "myedgeingest-policy.yaml"
    

Anexe seu aplicativo (aplicativo nativo do Kubernetes)

  1. Para configurar um pod único genérico (aplicativo nativo do Kubernetes) em relação à Declaração de Volume Persistente (PVC), crie um arquivo nomeado deploymentExample.yaml com o seguinte conteúdo. Substitua containers::name e volumes::persistentVolumeClaim::claimName pelos seus valores. Se você atualizou o nome do caminho de , exampleSubDir na linha 33 deve ser atualizado com seu novo nome de edgeSubvolume.yamlcaminho.

    Nota

    Use apenas letras minúsculas e traços. Para obter mais informações, consulte a documentação de nomeação de objetos do Kubernetes.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloudingestedgevol-deployment ### This will need to be unique for every volume you choose to create
    spec:
      replicas: 2
      selector:
        matchLabels:
          name: wyvern-testclientdeployment
      template:
        metadata:
          name: wyvern-testclientdeployment
          labels:
            name: wyvern-testclientdeployment
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - wyvern-testclientdeployment
                topologyKey: kubernetes.io/hostname
          containers:
            ### Specify the container in which to launch the busy box. ###
            - name: <create-a-container-name-here>
              image: mcr.microsoft.com/azure-cli:2.57.0@sha256:c7c8a97f2dec87539983f9ded34cd40397986dcbed23ddbb5964a18edae9cd09
              command:
                - "/bin/sh"
                - "-c"
                - "dd if=/dev/urandom of=/data/exampleSubDir/esaingesttestfile count=16 bs=1M && while true; do ls /data &>/dev/null || break; sleep 1; done"
              volumeMounts:
                ### This name must match the following volumes::name attribute ###
                - name: wyvern-volume
                  ### This mountPath is where the PVC will be attached to the pod's filesystem ###
                  mountPath: "/data"
          volumes:
             ### User-defined 'name' that is used to link the volumeMounts. This name must match volumeMounts::name as previously specified. ###
            - name: wyvern-volume
              persistentVolumeClaim:
                ### This claimName must refer to your PVC metadata::name
                claimName: <your-pvc-metadata-name-from-line-5-of-pvc-yaml>
    
  2. Para se candidatar deploymentExample.yaml, execute:

    kubectl apply -f "deploymentExample.yaml"
    
  3. Use kubectl get pods para encontrar o nome do seu pod. Copie este nome; você usá-lo na próxima etapa.

    Nota

    Como spec::replicas a partir de deploymentExample.yaml foi especificado como 2, dois pods aparecerão usando kubectl get pods. Você pode escolher qualquer nome de pod para usar na próxima etapa.

  4. Execute o seguinte comando e substitua POD_NAME_HERE pelo valor copiado da última etapa:

    kubectl exec -it pod_name_here -- sh
    
  5. Altere os diretórios (cd) para o caminho de montagem, /data conforme especificado no .deploymentExample.yaml

  6. Você verá um diretório com o nome especificado como seu path na Etapa 2 da seção Anexar subvolume ao Volume de Borda. Agora, cd em , e substitua /your_path_name_hereyour_path_name_here por seus respetivos detalhes.

  7. Como exemplo, crie um arquivo chamado file1.txt e grave nele usando echo "Hello World" > file1.txto .

  8. No portal do Azure, navegue até sua conta de armazenamento e localize o contêiner especificado na Etapa 2 de Anexar subvolume ao Volume de Borda. Ao selecionar seu contêiner, você verá file1.txt preenchido dentro do contêiner. Se o ficheiro ainda não tiver aparecido, aguarde aproximadamente 1 minuto; O Edge Volumes aguarda um minuto antes de carregar.

Próximos passos

Depois de concluir essas etapas, comece a monitorar sua implantação usando o Azure Monitor e o Kubernetes Monitoring, ou o monitoramento de terceiros com Prometheus e Grafana.

Monitore sua implantação