Compartir a través de


Alternativa: configuración de autenticación basada en claves para volúmenes perimetrales de ingesta en la nube

En este artículo, se describe una configuración alternativa para volúmenes perimetrales de ingesta en la nube (carga de blobs con purga local) con autenticación basada en claves.

Esta configuración es una opción alternativa para su uso con métodos de autenticación basados en claves. Debe revisar la configuración recomendada mediante identidades administradas asignadas por el sistema en la configuración de volúmenes perimetrales de ingesta en la nube.

Requisitos previos

  1. Cree una cuenta de almacenamiento siguiendo estas instrucciones.

    Nota:

    Al crear una cuenta de almacenamiento, se recomienda que la cree en el mismo grupo de recursos y región o ubicación que el clúster de Kubernetes.

  2. Cree un contenedor en la cuenta de almacenamiento que ha creado en el paso anterior siguiendo estas instrucciones.

Creación de un secreto de Kubernetes

Los volúmenes perimetrales admiten los tres métodos de autenticación siguientes:

  • Autenticación de firma de acceso compartido (SAS)
  • Autenticación de cadena de conexión
  • Autenticación de clave de almacenamiento

Después de completar la autenticación para uno de estos métodos, continúe con la sección Creación de una notificación de volumen persistente (PVC) de ingesta en la nube.

Creación de un secreto de Kubernetes mediante la autenticación de firma de acceso compartido (SAS)

Puede configurar la autenticación de SAS mediante YAML y kubectl, o mediante la CLI de Azure.

Para buscar storageaccountsas, realice este procedimiento:

  1. Vaya a la cuenta de almacenamiento en Azure Portal.
  2. Expanda Seguridad y redes en la hoja izquierda y, después, seleccione Firma de acceso compartido.
  3. En Tipos de recursos permitidos, seleccione Servicio > Contenedor > Objeto.
  4. En Permisos permitidos, anule la selección de Almacenamiento inmutable y Eliminación permanente.
  5. En Fecha y hora de inicio y expiración, elija la fecha y hora de finalización que desee.
  6. En la parte inferior, seleccione Generar la cadena de conexión y SAS.
  7. Los valores enumerados en token de SAS se usan para las variables storageaccountsas de la sección siguiente.

Autenticación de firma de acceso compartido (SAS) mediante YAML y kubectl

  1. Cree un nuevo archivo denominado sas.yaml con el contenido siguiente. Reemplace metadata::name, metadata::namespace y storageaccountconnectionstring con sus propios valores.

    Nota:

    Use solo letras minúsculas y guiones. Para más información, consulte la documentación de nomenclatura de objetos de 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 aplicar sas.yaml, ejecute:

    kubectl apply -f "sas.yaml"
    

Autenticación de firma de acceso compartido (SAS) mediante CLI

  • Si desea definir el ámbito de la autenticación SAS en el nivel de contenedor, use estos comandos. Debe actualizar YOUR_CONTAINER_NAME desde el primer comando y YOUR_NAMESPACE, YOUR_STORAGE_ACCT_NAME y YOUR_SECRET desde el 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" 
    

Creación de una notificación de volumen persistente de ingesta en la nube (PVC)

  1. Cree un nuevo archivo denominado cloudIngestPVC.yaml con el contenido siguiente. Debe editar el valor metadata::name y agregar un nombre para la notificación de volumen persistente. Se hace referencia a este nombre en la última línea de deploymentExample.yaml en el paso siguiente. También debe actualizar el valor metadata::namespace con el pod de consumo previsto. Si no tiene un pod de consumo previsto, el valor metadata::namespace es default:

    Nota:

    Use solo letras minúsculas y guiones. Para más información, consulte la documentación de nomenclatura de objetos de 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 aplicar cloudIngestPVC.yaml, ejecute:

    kubectl apply -f "cloudIngestPVC.yaml"
    

Adjuntar subvolumen al volumen perimetral

  1. Obtenga el nombre del volumen perimetral con este comando:

    kubectl get edgevolumes
    
  2. Cree un archivo llamado edgeSubvolume.yaml y copie este contenido. Actualice las variables con la información:

    Nota:

    Use solo letras minúsculas y guiones. Para más información, consulte la documentación de nomenclatura de objetos de Kubernetes.

    • metadata::name: cree un nombre para el subvolumen.
    • spec::edgevolume: este nombre se recuperó del paso anterior mediante kubectl get edgevolumes.
    • spec::path: cree su propio nombre de subdirectorio en la ruta de acceso de montaje. Tenga en cuenta que el ejemplo siguiente ya contiene un nombre de ejemplo (exampleSubDir). Si cambia este nombre de ruta de acceso, la línea 33 de deploymentExample.yaml debe actualizarse con el nuevo nombre de ruta de acceso. Si decide cambiar el nombre de la ruta de acceso, no use una barra diagonal precedente.
    • spec::auth::authType: depende del método de autenticación que usó en los pasos anteriores. Las entradas aceptadas incluyen sas, connection_string y key.
    • spec::auth::secretName: si usó la autenticación de clave de almacenamiento, secretName es {your_storage_account_name}-secret. Si usó la cadena de conexión o la autenticación SAS, usted especificó secretName.
    • spec::auth::secretNamespace: coincide con el pod de consumo previsto o default.
    • spec::container: el nombre del contenedor en la cuenta de almacenamiento.
    • spec::storageaccountendpoint: vaya a la cuenta de almacenamiento en Azure Portal. En la página Información general, cerca de la parte superior derecha de la pantalla, seleccione Vista JSON. Puede encontrar el vínculo storageaccountendpoint en properties::primaryEndpoints::blob. Copie todo el vínculo (por ejemplo, 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 aplicar edgeSubvolume.yaml, ejecute:

    kubectl apply -f "edgeSubvolume.yaml"
    

Opcional: modifique ingestPolicy a partir del valor predeterminado

  1. Si desea cambiar ingestPolicy del valor predeterminado edgeingestpolicy-default, cree un archivo denominado myedgeingest-policy.yaml con el siguiente contenido. Actualice las siguientes variables con sus preferencias.

    Nota:

    Use solo letras minúsculas y guiones. Para más información, consulte la documentación de nomenclatura de objetos de Kubernetes.

    • metadata::name: cree un nombre para ingestPolicy. Este nombre debe actualizarse y hacer referencia a este en la sección spec::ingestPolicy de edgeSubvolume.yaml.
    • spec::ingest::order: el orden en el que se cargan los archivos con modificaciones. Este es el mejor esfuerzo, no una garantía (el valor predeterminado es primero el más antiguo). Las opciones para el orden son: primero el más antiguo o primero el más reciente.
    • spec::ingest::minDelaySec: el número mínimo de segundos antes de que un archivo con modificaciones sea apto para la ingesta (el valor predeterminado es 60). Este número puede oscilar entre 0 y 31 536 000.
    • spec::eviction::order: cómo se expulsan los archivos (el valor predeterminado es desordenado). Las opciones para el orden de expulsión son: desordenado o nunca.
    • spec::eviction::minDelaySec: el número de segundos antes de que un archivo limpio sea apto para la expulsión (el valor predeterminado es 300). Este número puede oscilar entre 0 y 31 536 000.
    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 aplicar myedgeingest-policy.yaml, ejecute:

    kubectl apply -f "myedgeingest-policy.yaml"
    

Asociación de la aplicación (aplicación nativa de Kubernetes)

  1. Para configurar un único pod genérico (aplicación nativa de Kubernetes) en la notificación de volumen persistente (PVC), cree un archivo denominado deploymentExample.yaml con el siguiente contenido. Reemplace containers::name y volumes::persistentVolumeClaim::claimName con sus valores. Si ha actualizado el nombre de la ruta de acceso de edgeSubvolume.yaml, exampleSubDir en la línea 33 debe actualizarse con el nuevo nombre de ruta de acceso.

    Nota:

    Use solo letras minúsculas y guiones. Para más información, consulte la documentación de nomenclatura de objetos de 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 aplicar deploymentExample.yaml, ejecute:

    kubectl apply -f "deploymentExample.yaml"
    
  3. Use kubectl get pods para buscar el nombre del pod. Copie este nombre; se usa en el paso siguiente.

    Nota:

    Dado que spec::replicas de deploymentExample.yaml se especificó como 2, aparecerán dos pods mediante kubectl get pods. Puede elegir cualquiera de los nombres de pod para usar en el paso siguiente.

  4. Ejecute el siguiente comando y reemplace POD_NAME_HERE por el valor copiado del último paso:

    kubectl exec -it pod_name_here -- sh
    
  5. Cambie los directorios (cd) a la ruta de acceso de montaje (/data) tal como se especifica en el deploymentExample.yaml.

  6. Debería ver un directorio con el nombre que especificó como path en el Paso 2 de la sección Adjuntar subvolumen a un volumen perimetral. Ahora, cd en /your_path_name_here y reemplace your_path_name_here por sus respectivos detalles.

  7. Por ejemplo, cree un archivo denominado file1.txt y escriba en él mediante echo "Hello World" > file1.txt.

  8. En Azure Portal, vaya a la cuenta de almacenamiento y busque el contenedor especificado en el Paso 2 de Adjuntar subvolumen a un volumen perimetral. Al seleccionar el contenedor, consulte el file1.txt rellenado dentro del contenedor. Si el archivo aún no ha aparecido, espere aproximadamente 1 minuto; los volúmenes perimetrales esperan un minuto antes de cargarse.

Pasos siguientes

Después de completar estos pasos, comience a supervisar la implementación mediante Azure Monitor y Supervisión de Kubernetes o supervisión de terceros con Prometheus y Grafana.

Supervisión de la implementación