다음을 통해 공유


클라우드 수집 에지 볼륨에 대한 대체 키 기반 인증 구성

이 문서에서는 키 기반 인증을 사용한 클라우드 수집 에지 볼륨(로컬 제거를 통한 Blob 업로드)의 대체 구성에 대해 설명합니다.

이 구성은 키 기반 인증 방법과 함께 사용하기 위한 대체 옵션입니다. 클라우드 수집 에지 볼륨 구성에서 시스템 할당 관리 ID를 사용하여 권장 구성을 검토해야 합니다.

필수 조건

  1. 다음 지침에 따라 스토리지 계정을 만듭니다.

    참고 항목

    스토리지 계정을 만들 때 Kubernetes 클러스터와 동일한 리소스 그룹 및 지역/위치에 만드는 것이 좋습니다.

  2. 다음 지침에 따라 이전 단계에서 만든 스토리지 계정에 컨테이너를 만듭니다.

Kubernetes 비밀 만들기

에지 볼륨은 다음 세 가지 인증 모드를 지원합니다.

  • SAS(공유 액세스 서명) 인증(권장)
  • 연결 문자열 인증
  • 스토리지 키 인증

이러한 방법 중 하나에 대한 인증을 완료한 후 클라우드 수집 PVC(영구 볼륨 클레임) 섹션을 계속 진행합니다.

SAS(공유 액세스 서명) 인증을 사용하여 Kubernetes 비밀 만들기

YAML 및 kubectl을 사용하거나 Azure CLI를 사용하여 SAS 인증을 구성할 수 있습니다.

storageaccountsas를 찾으려면 다음 절차를 수행합니다.

  1. Azure Portal의 스토리지 계정으로 이동합니다.
  2. 왼쪽 블레이드의 보안 + 네트워킹을 확장한 다음, 공유 액세스 서명을 선택합니다.
  3. 허용되는 리소스 종류에서 서비스 > 컨테이너 > 개체를 선택합니다.
  4. 허용되는 권한에서 변경이 불가능한 스토리지영구 삭제를 선택 취소합니다.
  5. 시작 및 만료 날짜/시간에서 원하는 종료 날짜 및 시간을 선택합니다.
  6. 맨 아래에서 SAS 및 연결 문자열 생성을 선택합니다.
  7. SAS 토큰 아래에 나열된 값은 다음 섹션의 storageaccountsas 변수에 사용됩니다.

YAML 및 kubectl을 사용하는 SAS(공유 액세스 서명) 인증

  1. 다음 내용이 포함된 sas.yaml라는 파일을 만듭니다. metadata::name, metadata::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_NAMESPACE, YOUR_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" 
    

클라우드 수집 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"
    

에지 볼륨에 하위 볼륨 첨부

  1. 다음 명령을 사용하여 에지 볼륨의 이름을 가져옵니다.

    kubectl get edgevolumes
    
  2. edgeSubvolume.yaml이라는 이름의 파일을 만들고 다음 콘텐츠를 복사합니다. 다음 정보를 사용하여 변수를 업데이트합니다.

    참고 항목

    소문자와 숫자만 사용할 수 있습니다. 자세한 내용은 Kubernetes 개체 명명 설명서를 참조하세요.

    • metadata::name: 하위 볼륨의 이름을 만듭니다.
    • spec::edgevolume: 이 이름은 kubectl get edgevolumes를 사용하여 이전 단계에서 검색되었습니다.
    • spec::path: 탑재 경로 아래에 사용자 고유의 하위 디렉터리 이름을 만듭니다. 다음 예에는 이미 예 이름(exampleSubDir)이 포함되어 있습니다. 이 경로 이름을 변경하면 deploymentExample.yaml의 33번째 줄을 새 경로 이름으로 업데이트해야 합니다. 경로 이름을 바꾸려면 앞에 슬래시를 사용하지 마세요.
    • spec::auth::authType: 이전 단계에서 사용한 인증 방법에 따라 달라집니다. 수락되는 입력에는 sas, connection_stringkey가 포함됩니다.
    • spec::auth::secretName: 스토리지 키 인증을 사용한 경우 secretName{your_storage_account_name}-secret입니다. 연결 문자열 또는 SAS 인증을 사용한 경우 사용자가 secretName을 지정했습니다.
    • spec::auth::secretNamespace: 소비할 Pod 또는 default와 일치합니다.
    • spec::container: 스토리지 계정의 컨테이너 이름입니다.
    • spec::storageaccountendpoint: Azure Portal의 스토리지 계정으로 이동합니다. 개요 페이지에서 화면 오른쪽 상단에 있는 JSON 보기를 선택합니다. storageaccountendpoint 링크는 properties::primaryEndpoints::blob에서 찾을 수 있습니다. 전체 링크를 복사합니다(예: 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-default에서 ingestPolicy를 변경하려면 다음 콘텐츠를 담은 myedgeingest-policy.yaml이라는 파일을 만듭니다. 다음 변수를 원하는 기본 설정으로 업데이트합니다.

    참고 항목

    소문자와 숫자만 사용할 수 있습니다. 자세한 내용은 Kubernetes 개체 명명 설명서를 참조하세요.

    • metadata::name: ingestPolicy의 이름을 만듭니다. 이 이름은 edgeSubvolume.yaml의 spec::ingestPolicy 섹션에서 업데이트되고 참조되어야 합니다.
    • spec::ingest::order: 더티 파일이 업로드되는 순서입니다. 이는 최선의 활동이며 보장은 아닙니다(기본값은 가장 오래된 것부터). 정렬 옵션은 가장 오래된 것부터 또는 가장 최근 것부터입니다.
    • spec::ingest::minDelaySec: 더티 파일이 수집되기 전까지의 최소 시간(초)입니다(기본값은 60). 이 숫자의 범위는 0~31536000입니다.
    • spec::eviction::order: 파일이 제거되는 방법입니다(기본값은 정렬되지 않음). 제거 명령에 대한 옵션은 unordered 또는 never입니다.
    • 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에서 경로 이름을 업데이트한 경우 33번째 줄의 exampleSubDir을 새 경로 이름으로 업데이트해야 합니다.

    참고 항목

    소문자와 숫자만 사용할 수 있습니다. 자세한 내용은 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. Pod의 이름을 확인하려면 kubectl get pods를 사용합니다. 다음 단계에서 사용하게 되므로 이 이름을 복사합니다.

    참고 항목

    deploymentExample.yamlspec::replicas2로 지정되었기 때문에 kubectl get pods를 사용하여 두 개의 Pod가 나타납니다. 다음 단계에서는 두 가지 Pod 이름을 모두 선택할 수 있습니다.

  4. 다음 명령을 실행하고 POD_NAME_HERE를 마지막 단계에서 복사한 값으로 바꿉니다.

    kubectl exec -it pod_name_here -- sh
    
  5. deploymentExample.yaml에 지정된 대로 디렉터리(cd)를 /data 탑재 경로로 변경합니다.

  6. 에지 볼륨에 하위 볼륨 연결 섹션의 2단계에서 path로 지정한 이름을 가진 디렉터리가 표시되어야 합니다. 이제 /your_path_name_herecd를 수행한 후 your_path_name_here를 해당 세부 정보로 대체합니다.

  7. 예를 들어, file1.txt라는 이름의 파일을 만들고 echo "Hello World" > file1.txt를 사용하여 이 파일에 씁니다.

  8. Azure Portal에서 스토리지 계정으로 이동하여 에지 볼륨에 하위 볼륨 연결의 2단계에서 지정된 컨테이너를 찾습니다. 컨테이너를 선택하면 컨테이너 내에 file1.txt가 채워진 것을 확인할 수 있습니다. 파일이 아직 나타나지 않았다면, 약 1분 정도 기다립니다. 에지 볼륨은 업로드하기 전에 1분간 기다립니다.

다음 단계

이러한 단계를 완료한 후 Prometheus 및 Grafana와 함께 Azure Monitor 및 Kubernetes 모니터링 또는 타사 모니터링을 사용하여 배포 모니터링을 시작합니다.

배포 모니터링