다음을 통해 공유


자습서: Azure Kubernetes Service에서 호스트되는 애플리케이션에서 Azure Cache for Redis 또는 Azure Managed Redis에 연결

이 자습서에서는 이 샘플을 사용하여 Azure Cache for Redis 또는 Azure Managed Redis 인스턴스에 연결합니다.

필수 조건

중요합니다

이 자습서에서는 컨테이너, Pod 및 서비스와 같은 기본 Kubernetes 개념에 익숙하다고 가정합니다.

Azure Cache Redis 인스턴스 설정

  1. Azure Portal 또는 선호하는 CLI 도구를 사용하여 새 Azure Cache for Redis 인스턴스를 만듭니다. 빠른 시작 가이드를 사용하여 시작합니다. 또는 Azure Managed Redis 인스턴스도 만들 수 있습니다.

    이 자습서에서는 표준 C1 캐시를 사용합니다. Azure Portal에서 표준 C1 캐시를 만드는 스크린샷

  2. 캐시를 만드는 단계를 완료합니다.

  3. Redis 캐시 인스턴스가 만들어지면 인증 탭으로 이동합니다. Redis 캐시 인스턴스에 연결하는 데 사용할 사용자 할당 관리 ID를 선택한 다음 저장을 선택합니다.

  4. 또는 리소스 메뉴에서 데이터 액세스 구성으로 이동하여 사용자가 할당한 관리 ID를 사용하여 캐시에 연결할 새 Redis 사용자를 만들 수 있습니다.

  5. 포털에서 Redis 사용자의 사용자 이름을 기록해 둡니다. AKS 워크로드에서 이 사용자 이름을 사용합니다.

로컬로 샘플 실행

이 샘플을 로컬로 실행하려면 사용자 주체를 Redis 인스턴스에서 Redis 사용자로 구성합니다. 코드 샘플에서는 DefaultAzureCredential 을 통해 사용자 주체를 사용하여 Redis 인스턴스에 연결합니다.

AKS 클러스터 구성

AKS 클러스터에 대한 워크로드 ID를 구성하려면 다음 단계를 수행 합니다.

그리고 나서 다음 단계를 완료합니다.

  • OIDC 발급자 및 워크로드 ID 활성화
  • 관리 ID를 이미 만든 경우 사용자 할당 관리 ID를 만드는 단계를 건너뜁니다. 새 관리 ID를 만드는 경우 관리 ID에 대한 새 Redis 사용자를 만들고 적절한 데이터 액세스 권한을 할당해야 합니다.
  • 사용자가 할당한 관리 ID의 클라이언트 ID가 태그로 추가된 Kubernetes 서비스 계정 만들기
  • AKS 클러스터에 대한 페더레이션 ID 자격 증명을 만듭니다.

Azure Cache for Redis에 연결하는 워크로드 구성

다음으로 AKS 클러스터를 구성한 후 Azure Cache for Redis에 연결하도록 AKS 워크로드를 설정합니다.

  1. 샘플 앱에 대한 코드를 다운로드합니다.

  2. az acr build 명령을 사용하여 Docker 이미지를 빌드하고 Azure Container Registry에 푸시합니다.

     az acr build --image sample/connect-from-aks-sample:1.0 --registry yourcontainerregistry --file Dockerfile .
    
  3. 다음 명령을 사용하여 AKS 클러스터에 컨테이너 레지스트리를 연결합니다.

    az aks update --name clustername --resource-group mygroup --attach-acr youracrname
    

워크로드 배포

이 섹션에서는 먼저 Kubernetes CLI를 설치한 다음 AKS 클러스터에 연결합니다.

Kubernetes CLI 설치

Kubernetes CLI( kubectl)를 사용하여 로컬 컴퓨터에서 Kubernetes 클러스터에 연결합니다. 로컬로 실행하는 경우 다음 명령을 사용하여 kubectl을 설치할 수 있습니다.

az aks install-cli

Azure Cloud Shell을 사용하는 경우 kubectl 이 이미 설치되어 있으며 이 단계를 건너뛸 수 있습니다.

AKS 클러스터에 연결

  1. 포털을 사용하여 AKS 클러스터의 리소스 그룹 및 클러스터 이름을 복사합니다. AKS 클러스터에 연결하도록 kubectl 을 구성하려면 리소스 그룹 및 클러스터 이름과 함께 다음 명령을 사용합니다.

    az aks get-credentials --resource-group myResourceGroup --name myClusterName
    
  2. 다음 명령을 실행하여 클러스터에 연결할 수 있는지 확인합니다.

    kubectl get nodes
    

    클러스터 노드 목록을 보여 주는 유사한 출력이 표시됩니다.

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-21274953-vmss000001   Ready    agent   1d    v1.29.7
    aks-agentpool-21274953-vmss000003   Ready    agent   1d    v1.29.7
    aks-agentpool-21274953-vmss000006   Ready    agent   1d    v1.29.7
    

워크로드 실행

  1. 다음 코드에서는 워크로드를 실행하는 데 사용하는 Pod 사양 파일에 대해 설명합니다. 유의할 점은 Pod에는 azure.workloadidentity/use: "true"라는 레이블이 있으며, AKS 워크로드 ID가 요구하는 serviceAccountName 주석이 추가되어 있다는 것입니다. 액세스 키 인증을 사용하는 경우 AUTHENTICATION_TYPE, REDIS_HOSTNAME, REDIS_ACCESSKEY 및 REDIS_PORT 환경 변수의 값을 바꿉니다. Azure Managed Redis 인스턴스의 경우 REDIS_PORT 값을 10000으로 설정합니다.

     apiVersion: v1
     kind: Pod
     metadata:
       name: entrademo-pod
       labels:
         azure.workload.identity/use: "true"  # Required. Only pods with this label can use workload identity.
     spec:
       serviceAccountName: workload-identity-sa
       containers:
       - name: entrademo-container
         image: youracr.azurecr.io/connect-from-aks-sample:1.0
         imagePullPolicy: Always
         command: ["dotnet", "ConnectFromAKS.dll"] 
         resources:
           limits:
             memory: "256Mi"
             cpu: "500m"
           requests:
             memory: "128Mi"
             cpu: "250m"
         env:
              - name: AUTHENTICATION_TYPE
                value: "MANAGED_IDENTITY" # change to ACCESS_KEY to authenticate using access key
              - name: REDIS_HOSTNAME
                value: "your redis hostname"
              - name: REDIS_ACCESSKEY
                value: "your access key" 
              - name: REDIS_PORT
                value: "6380" # change to 10000 for Azure Managed Redis
       restartPolicy: Never
    
    
  2. 이 파일을 podspec.yaml로 저장한 다음 folloWing 명령을 실행하여 AKS 클러스터에 적용합니다.

    kubectl apply -f podspec.yaml
    

    Pod가 생성되었음을 나타내는 응답이 표시됩니다.

    pod/entrademo-pod created
    
  3. 애플리케이션을 테스트하려면 다음 명령을 실행하여 Pod가 실행 중인지 확인합니다.

    kubectl get pods
    

    다음과 같이 Pod가 성공적으로 실행되는 것을 볼 수 있습니다.

    NAME                       READY   STATUS      RESTARTS       AGE
    entrademo-pod              0/1     Completed   0              42s
    
  4. 이 자습서는 콘솔 앱이므로 Pod의 로그를 확인하여 이 명령을 사용하여 예상대로 실행되었는지 확인해야 합니다.

    kubectl logs entrademo-app
    

    사용자 할당 관리 ID를 사용하여 Pod가 Redis 인스턴스에 성공적으로 연결되었음을 나타내는 다음 로그가 표시됩니다.

    Connecting with managed identity..
    Retrieved value from Redis: Hello, Redis!
    Success! Previous value: Hello, Redis!
    

클러스터 정리

클러스터를 정리하려면 다음 명령을 실행합니다.

kubectl delete pod entrademo-pod

자원을 정리하세요

이 문서에서 만든 리소스를 계속 사용하려면 리소스 그룹을 유지합니다.

그렇지 않고 리소스 사용을 완료하는 경우 요금이 부과되지 않도록 하려면 만든 Azure 리소스 그룹을 삭제하면 됩니다.

중요합니다

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹을 삭제하는 경우 그 안의 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 해야 합니다. 유지하려는 리소스가 포함된 기존 리소스 그룹 내에서 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 각 리소스를 개별적으로 삭제할 수 있습니다.

리소스 그룹을 삭제하려면

  1. Azure Portal에 로그인한 다음, 리소스 그룹을 선택합니다.

  2. 삭제하려는 리소스 그룹을 선택합니다.

    리소스 그룹이 많은 경우 필드 필터링... 상자를 사용하여 이 문서에 대해 만든 리소스 그룹의 이름을 입력합니다. 결과 목록에서 리소스 그룹을 선택합니다.

    작업 창에서 삭제할 리소스 그룹 목록을 보여 주는 스크린샷.

  3. 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인한 다음, 삭제를 선택합니다.

    삭제를 확인하기 위해 리소스 이름이 필요한 양식을 보여 주는 스크린샷.

잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.