你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

备用:Cloud Ingest Edge Volumes 的基于密钥的身份验证配置

本文介绍具有基于密钥的身份验证的 Cloud Ingest Edge Volumes(使用本地清除的 blob 上传)的备用配置。

此配置是用于基于密钥的身份验证方法的替代选项。 应参照 Cloud Ingest Edge Volumes 配置使用系统分配的托管标识查看推荐的配置。

先决条件

  1. 按照这些说明创建一个存储帐户。

    注意

    创建存储帐户时,建议在与 Kubernetes 群集相同的资源组和区域/位置下创建该帐户。

  2. 按照这些说明,在上一步中创建的存储帐户中创建一个容器。

创建 Kubernetes 机密

Edge Volumes 支持以下三种身份验证方法:

  • 共享访问签名 (SAS) 身份验证(推荐)
  • 连接字符串身份验证
  • 存储密钥身份验证

采用其中一种方法完成身份验证后,请继续执行创建 Cloud Ingest 永久性卷声明 (PVC) 部分。

使用共享访问签名 (SAS) 身份验证创建 Kubernetes 机密

可以使用 YAML 和 kubectl,或者使用 Azure CLI 来配置 SAS 身份验证。

若要查找 storageaccountsas,请执行以下步骤:

  1. 导航到 Azure 门户中的存储帐户。
  2. 展开左侧边栏选项卡上的“安全 + 网络”,然后选择“共享访问签名”
  3. 在“允许的资源类型”下,选择“服务”>“容器”>“对象”。
  4. 在“允许的权限”下,取消选择“不可变存储”和“永久删除”
  5. 在“开始和到期日期/时间”下,选择所需的结束日期和时间
  6. 在底部,选择“生成 SAS 和连接字符串”
  7. SAS 令牌下列出的值将用于下一部分中的 storageaccountsas 变量值。

使用 YAML 和 kubectl 的共享访问签名 (SAS) 身份验证

  1. 创建包含以下内容的名为 sas.yaml 的文件。 将 、 和 替换为自己的值metadata::namemetadata::namespacestorageaccountconnectionstring

    注意

    只使用小写字母和短划线。 有关详细信息,请参阅 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. 若要应用 sas.yaml,请运行:

    kubectl apply -f "sas.yaml"
    

使用 CLI 的共享访问签名 (SAS) 身份验证

  • 如果要将 SAS 身份验证的范围限定在容器级别,请使用以下命令。 必须更新第一个命令中的 YOUR_CONTAINER_NAME,以及第二个命令中的 YOUR_NAMESPACEYOUR_STORAGE_ACCT_NAMEYOUR_SECRET

    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" 
    

创建 Cloud Ingest 永久性卷声明 (PVC)

  1. 创建包含以下内容的名为 cloudIngestPVC.yaml 的文件。 必须编辑 metadata::name 值,并为永久性卷声明添加名称。 此名称将在下一步中 deploymentExample.yaml 的最后一行引用。 还必须用预期使用的 Pod 更新 metadata::namespace 值。 如果没有预期使用的 Pod,则 metadata::namespace 值为 default

    注意

    只使用小写字母和短划线。 有关详细信息,请参阅 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. 如果要应用 cloudIngestPVC.yaml,请运行:

    kubectl apply -f "cloudIngestPVC.yaml"
    

将子卷附加到 Edge Volume

  1. 使用以下命令获取 Edge Volume 的名称:

    kubectl get edgevolumes
    
  2. 创建一个名为 edgeSubvolume.yaml 的文件,并复制以下内容。 使用你的信息更新变量:

    注意

    只使用小写字母和短划线。 有关详细信息,请参阅 Kubernetes 对象命名文档

    • metadata::name:为子卷创建名称。
    • spec::edgevolume:此名称是使用 kubectl get edgevolumes 从上一步检索的。
    • spec::path:在装载路径下创建自己的子目录名称。 请注意,以下示例已包含示例名称(exampleSubDir)。 如果更改此路径名称,则必须使用新路径名称更新 deploymentExample.yaml 中的第 33 行。 如果选择重命名路径,请不要在前面使用斜杠。
    • spec::auth::authType:取决于在前面的步骤中使用的身份验证方法。 接受的输入包括 sasconnection_stringkey
    • spec::auth::secretName:如果使用存储密钥身份验证,则 secretName{your_storage_account_name}-secret。 如果使用连接字符串或 SAS 身份验证,则 secretName 将由你指定。
    • spec::auth::secretNamespace:匹配预期使用的 Pod,或 default
    • spec::container:存储帐户中的容器名称。
    • spec::storageaccountendpoint:导航到 Azure 门户中的存储帐户。 在屏幕右上角的“概览”页中,选择“JSON 视图”。 可以在 properties::primaryEndpoints::blob 下找到 storageaccountendpoint 链接。 复制整个链接(例如 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. 若要应用 edgeSubvolume.yaml,请运行:

    kubectl apply -f "edgeSubvolume.yaml"
    

可选:修改 ingestPolicy 默认值

  1. 如果要更改默认为 edgeingestpolicy-defaultingestPolicy,请创建包含以下内容的名为 myedgeingest-policy.yaml 的文件。 使用你的偏好设置更新下列变量。

    注意

    只使用小写字母和短划线。 有关详细信息,请参阅 Kubernetes 对象命名文档

    • metadata::name:为 ingestPolicy 创建名称。 必须在 edgeSubvolume.yaml 的 spec::ingestPolicy 节中更新并引用此名称。
    • spec::ingest::order:上传脏文件的顺序。 只是尽量遵守,而非保证(默认为“最早优先”)。 顺序选项包括“最早优先”和“最近优先”。
    • spec::ingest::minDelaySec:脏文件符合引入条件前的最小秒数(默认值为 60)。 此数字可以介于 0 和 31536000 之间。
    • spec::eviction::order:如何逐出文件(默认值为“无序”)。 逐出顺序的选项包括:“无序”和“从不”。
    • spec::eviction::minDelaySec:干净文件符合逐出条件前的秒数(默认值为 300)。 此数字可以介于 0 和 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. 如果要应用 myedgeingest-policy.yaml,请运行:

    kubectl apply -f "myedgeingest-policy.yaml"
    

附加应用(Kubernetes 本机应用程序)

  1. 若要针对永久性卷声明 (PVC) 配置通用单一 Pod(Kubernetes 本机应用程序),请创建一个包含以下内容的名为 deploymentExample.yaml 的文件。 将 containers::namevolumes::persistentVolumeClaim::claimName 替换为自定义值。 如果从 edgeSubvolume.yaml 更新路径名称,则必须使用新路径名称更新 exampleSubDir 的第 33 行。

    注意

    只使用小写字母和短划线。 有关详细信息,请参阅 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. 如果要应用 deploymentExample.yaml,请运行:

    kubectl apply -f "deploymentExample.yaml"
    
  3. 使用 kubectl get pods 查找 Pod 的名称。 复制此名称,在下一步中使用它。

    注意

    由于 deploymentExample.yamlspec::replicas 指定为 2,因此将出现两个使用 kubectl get pods 的 Pod。 可以选择任一 Pod 名称用于下一步。

  4. 运行以下命令,并将 POD_NAME_HERE 替换为上一步复制的值:

    kubectl exec -it pod_name_here -- sh
    
  5. 将目录 (cd) 更改为在 deploymentExample.yaml 中指定的 /data 装载路径。

  6. 你应会看到一个目录,其名称为在将子卷附加到 Edge Volume部分的步骤 2 中指定的 path。 现在,cd 变为 /your_path_name_here,请将 your_path_name_here 替换为相应的详细信息。

  7. 例如,创建一个名为 file1.txt 的文件并使用 echo "Hello World" > file1.txt 写入。

  8. 在 Azure 门户中,导航到存储帐户,找到在将子卷附加到 Edge Volume的步骤 2 中指定的容器。 选择容器时,会看到容器中已填充 file1.txt。 如果文件尚未出现,请等待大约 1 分钟;Edge Volume 会在上传前等待一分钟。

后续步骤

完成这些步骤后,开始使用 Azure Monitor 和 Kubernetes 监视功能来监视部署,或者使用 Prometheus 和 Grafana 进行第三方监视。

监视部署