다음을 통해 공유


빠른 시작: AKS(Azure Kubernetes Service) 또는 Arc 지원 Kubernetes용 Dapr 클러스터 확장을 사용하여 애플리케이션 배포

이 빠른 시작에서는 AKS 또는 Arc 지원 Kubernetes 클러스터에서 Dapr 클러스터 확장을 사용합니다. 메시지를 생성하는 Python 애플리케이션과 메시지를 사용하고 유지하는 Node.js 애플리케이션으로 구성된 예제를 배포 hello world 합니다.

필수 구성 요소

리포지토리 복제

  1. git clone 명령을 사용하여 Dapr 빠른 시작 리포지토리를 복제합니다.

    git clone https://github.com/Azure-Samples/dapr-aks-extension-quickstart.git
    
  2. dapr-aks-extension-quickstart 디렉터리로 변경합니다.

Redis 저장소 만들기 및 구성

Azure Portal을 열어 Azure Cache for Redis 만들기 흐름을 시작합니다.

  1. "오픈 소스 Redis 캐시 만들기" 빠른 시작 지침에 따라 권장 정보를 입력합니다.
  2. 만들기를 선택하여 Redis 인스턴스 배포를 시작합니다.

리소스 정보 확인

  1. Redis 리소스가 배포되면 해당 개요 페이지로 이동합니다.
  2. 다음을 기록해 둡니다.
    • 캐시 개요 페이지의 Essentials 섹션에 있는 호스트 이름입니다. 호스트 이름 형식은 다음과 xxxxxx.redis.cache.windows.net유사합니다.
    • 캐시의 고급 설정 블레이드에 있는 SSL 포트입니다. 기본값은 6380입니다.
  3. 인증 블레이드로 이동하여 리소스에서 Microsoft Entra Authentication이 사용하도록 설정되어 있는지 확인합니다.

관리 ID 추가

  1. 인증 블레이드의 Microsoft Entra Authentication 사용 확인란 아래에 있는 필드에 만든 관리 ID의 이름을 필수 구성 요소로 입력합니다.

    Redis 사용자로 추가할 관리 ID를 선택할 수 있는 필드를 보여 주는 스크린샷

  2. 관리 ID가 Redis 사용자 할당 데이터 소유자 액세스 정책 권한으로 추가되었는지 확인합니다.

공용 네트워크 액세스 사용

이 시나리오의 경우 Redis 캐시는 공용 네트워크 액세스를 사용합니다. 이 빠른 시작을 마치면 리소스를 정리해야 합니다.

  1. 프라이빗 엔드포인트 블레이드로 이동합니다.
  2. 상단 메뉴에서 공용 네트워크 액세스 사용을 클릭합니다.

Dapr 구성 요소 구성

에서 redis.yaml구성 요소는 AKS 클러스터에 대해 사용하도록 설정된 워크로드 ID를 사용하여 Entra ID 인증을 사용하도록 구성됩니다. 액세스 키가 필요하지 않습니다.

- name: useEntraID
  value: "true"
- name: enableTLS
  value: true
  1. 기본 코드 편집기에서 샘플의 deploy 디렉터리로 이동하여 엽니다 redis.yaml.

  2. 자리 redisHost표시자 <REDIS_HOST>:<REDIS_PORT> 값을 Azure Portal에서 이전에 저장한 Redis 캐시 호스트 이름 및 SSL 포트로 바꿉니다.

    - name: redisHost
    value: <your-cache-name>.redis.cache.windows.net:6380
    

구성 적용

  1. kubectl apply 명령을 사용하여 redis.yaml 파일을 적용합니다.

    kubectl apply -f ./deploy/redis.yaml
    
  2. kubectl get components.redis 명령을 사용하여 상태 저장소가 성공적으로 구성되었는지 확인합니다.

    kubectl get components.redis -o yaml
    

    예상 출력

    component.dapr.io/statestore created
    

Dapr 사이드카를 사용하여 Node.js 앱 배포

Node.js 앱 구성

Pod 사양에는 node.yaml워크로드 ID를 사용하기 위해 추가된 레이블이 있습니다.

labels:
  app: node
  azure.workload.identity/use: "true"
  1. 디렉터리로 이동하여 deploy 엽니다 node.yaml.

  2. 자리 표시자 <SERVICE_ACCOUNT_NAME> 값을 serviceAccountName 만든 서비스 계정 이름으로 바꿉 있습니다.

    • 이 값은 페더레이션 ID 자격 증명을 만드는 데 사용한 것과 동일한 서비스 계정이어야 합니다.

구성 적용

  1. kubectl apply 명령을 사용하여 클러스터에 Node.js 앱 배포를 적용합니다.

    kubectl apply -f ./deploy/node.yaml
    
  2. Kubernetes 배포는 비동기이므로 다음 단계로 이동하기 전에 다음 명령을 사용하여 배포가 완료되었는지 확인합니다.

    kubectl rollout status deploy/nodeapp
    
  3. kubectl get svc 명령을 사용하여 서비스에 액세스합니다.

    kubectl get svc nodeapp
    
  4. 출력의 EXTERNAL-IP를 기록해 둡니다.

Node.js 서비스 확인

  1. 를 사용하여 curl서비스를 호출합니다 EXTERNAL-IP.

    curl $EXTERNAL_IP/ports
    

    예제 출력

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. 애플리케이션에 주문을 제출합니다.

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. 주문을 확인합니다.

    curl $EXTERNAL_IP/order
    

    예상 출력

    { "orderId": "42" }
    

Dapr 사이드카를 사용하여 Python 앱 배포

Python 앱 구성

Pod 사양에는 python.yaml워크로드 ID를 사용하기 위해 추가된 레이블이 있습니다.

labels:
  app: node
  azure.workload.identity/use: "true"
  1. 디렉터리로 이동하여 deploy 엽니다 python.yaml.

  2. 자리 표시자 <SERVICE_ACCOUNT_NAME> 값을 serviceAccountName 만든 서비스 계정 이름으로 바꿉 있습니다.

    • 이 값은 페더레이션 ID 자격 증명을 만드는 데 사용한 것과 동일한 서비스 계정이어야 합니다.

구성 적용

  1. kubectl apply 명령을 사용하여 Kubernetes 클러스터에 Python 앱을 배포합니다.

    kubectl apply -f ./deploy/python.yaml
    
  2. Kubernetes 배포는 비동기이므로 다음 단계로 이동하기 전에 다음 명령을 사용하여 배포가 완료되었는지 확인합니다.

    kubectl rollout status deploy/pythonapp
    

메시지 관찰 및 지속성 확인

이제 Node.js 및 Python 애플리케이션이 모두 배포되었으므로 메시지가 전달되는 것을 볼 수 있습니다.

  1. kubectl logs 명령을 사용하여 Node.js 앱의 로그를 가져옵니다.

    kubectl logs --selector=app=node -c node --tail=-1
    

    예상 출력

    Got a new order! Order ID: 1
    Successfully persisted state
    Got a new order! Order ID: 2
    Successfully persisted state
    Got a new order! Order ID: 3
    Successfully persisted state
    
  2. 를 사용하여 curlNode.js 앱의 주문 엔드포인트를 호출하여 최신 주문을 가져옵니다.

    curl $EXTERNAL_IP/order
    

    응답에 최신 JSON 출력이 표시됩니다.

리소스 정리

이 빠른 시작에서 리소스를 더 이상 사용하지 않을 경우 리소스 그룹을 제거하여 연결된 모든 리소스를 삭제할 수 있습니다.

az group delete 명령을 사용하여 리소스 그룹, 클러스터, 네임스페이스 및 모든 관련 리소스를 제거합니다.

az group delete --name MyResourceGroup

다음 단계