Kubernetes에서 ConfigMaps의 구성 데이터를 사용하도록 Pod를 설정할 수 있습니다. 이 방법은 컨테이너 이미지에서 구성 데이터를 분리할 수 있으므로 애플리케이션의 이식성을 향상시킵니다.
Azure App Configuration Kubernetes 공급자 는 App Configuration에 저장된 키-값 및 Azure Key Vault 참조에서 Kubernetes ConfigMaps 및 비밀을 생성하는 방법을 제공합니다. 이 공급자를 사용하는 경우 App Configuration을 사용하여 애플리케이션 코드를 변경하지 않고 구성 데이터를 중앙에서 저장하고 관리할 수 있습니다.
ConfigMap은 환경 변수 또는 탑재된 파일로 사용할 수 있습니다. 이 빠른 시작에서는 AKS 워크로드에 Azure App Configuration Kubernetes Provider를 통합합니다. 공급자는 App Configuration 저장소의 데이터에서 ConfigMap을 만듭니다. 워크로드에서는 ConfigMap을 데이터 볼륨에 탑재된 JSON 파일로 사용하는 Pod에서 기본 ASP.NET Core 앱을 실행합니다.
팁
Kubernetes에서 호스트되는 워크로드에서 App Configuration에 액세스하는 다른 방법은 App Configuration에 대한 Azure Kubernetes Service 액세스를 참조하세요.
참고 항목
이 빠른 시작에서는 Azure App Configuration Kubernetes 공급자를 설정하는 단계를 안내합니다. 필요에 따라 다음 Azure Developer CLI 명령을 사용하여 Azure 리소스를 프로비전하고 이 빠른 시작에서 사용하는 샘플 애플리케이션을 배포할 수 있습니다. 이러한 명령은 이 용도로 템플릿을 azure-appconfig-aks 사용합니다. 이 템플릿에 대한 자세한 내용은 azure-appconfig-aks GitHub 리포지토리를 참조하세요.
azd init -t azure-appconfig-aks
azd up
필수 조건
- App Configuration 저장소. 저장소를 만듭니다.
- Azure Container Registry의 인스턴스입니다. 레지스트리를 만듭니다.
- 컨테이너 레지스트리에서 이미지를 끌어올 수 있는 권한이 있는 AKS 클러스터입니다. AKS 클러스터 만들기.
- .NET SDK 8.0 이상.
- Azure CLI.
- Docker Desktop.
- Helm.
- kubectl.
AKS에서 실행되는 애플리케이션 만들기
이 섹션에서는 AKS에서 실행되는 기본 ASP.NET Core 웹 애플리케이션을 만듭니다. 애플리케이션은 로컬 JSON 파일에서 구성 데이터를 읽습니다. 다음 섹션에서는 애플리케이션 코드를 변경하지 않고 애플리케이션이 App Configuration의 구성 데이터를 사용할 수 있도록 설정합니다.
파일에서 구성을 읽는 AKS 애플리케이션이 이미 있는 경우 이 섹션을 건너뛰고 Azure App Configuration Kubernetes 공급자 사용으로 이동하면 됩니다. 이 섹션을 건너뛰는 경우 공급자가 생성하는 구성 파일이 애플리케이션에서 사용하는 파일 경로와 일치하는지 확인합니다.
애플리케이션 만들기
.NET CLI(명령줄 인터페이스)를 사용하여 다음 명령을 실행합니다. 새 MyWebApp 디렉터리에 ASP.NET Core 웹앱 프로젝트를 만듭니다.
dotnet new webapp --output MyWebApp --framework net8.0MyWebApp 디렉터리에서 Pages 디렉터리로 이동한 다음 Index.cshtml을 엽니다. 콘텐츠를 다음 코드로 바꿉다.
@page @model IndexModel @using Microsoft.Extensions.Configuration @inject IConfiguration Configuration @{ ViewData["Title"] = "Home page"; } <style> h1 { color: @Configuration["Settings:FontColor"]; } </style> <div class="text-center"> <h1>@Configuration["Settings:Message"]</h1> </div>프로젝트의 루트에 구성 디렉터리를 만듭니다. 구성 디렉터리에서 다음 콘텐츠가 포함된 mysettings.json 파일을 추가합니다.
{ "Settings": { "FontColor": "Black", "Message": "Message from the local configuration" } }프로젝트 루트 디렉터리에서 Program.cs 연 다음 메서드를 호출
AddJsonFile하여 구성 원본에 JSON 파일을 추가합니다.// Existing code in Program.cs // ... ... // Add a JSON configuration source. builder.Configuration.AddJsonFile("config/mysettings.json", reloadOnChange: true, optional: false); var app = builder.Build(); // The rest of the existing code in Program.cs // ... ...
애플리케이션 컨테이너화
릴리스 모드에서 앱을 빌드하고 게시된 디렉터리에서 자산을 만들려면 dotnet publish 명령을 실행합니다.
dotnet publish -c Release -o published프로젝트 디렉터리의 루트에 Dockerfile 파일을 만들고, 텍스트 편집기에서 이 파일을 열고, 다음 콘텐츠를 입력합니다. Dockerfile은 확장명이 없는 텍스트 파일입니다. 컨테이너 이미지를 만드는 데 사용합니다.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime WORKDIR /app COPY published/ ./ ENTRYPOINT ["dotnet", "MyWebApp.dll"]다음 명령을 실행하여 명명된
aspnetapp컨테이너 이미지를 빌드합니다.docker build --tag aspnetapp .
Container Registry에 이미지 푸시
컨테이너 레지스트리에 로그인하려면 az acr login 명령을 실행합니다. 다음 코드는 라는
myregistry레지스트리에 로그인 합니다. 해당 레지스트리 이름을 레지스트리 이름으로 바꿉습니다.az acr login --name myregistry성공적으로 로그인하면 명령이 반환
Login Succeeded됩니다.이미지에 대해 호출
myregistry.azurecr.io/aspnetapp:v1된 태그를aspnetapp만들려면 docker 태그 명령을 사용합니다. 레지스트리의 이름으로 바꿉myregistry다.docker tag aspnetapp myregistry.azurecr.io/aspnetapp:v1팁
기존 Docker 이미지 및 태그 목록을 검토하려면 다음을 실행
docker image ls합니다. 이 시나리오에서는 출력에 두 개 이상의 이미지가aspnetappmyregistry.azurecr.io/aspnetapp나열되어야 합니다.이미지를 컨테이너 레지스트리에 업로드하려면 docker push 명령을 사용합니다. 예를 들어 다음 명령은 레지스트리
myregistry아래에 태그v1가 있는 리aspnetapp포지토리에 이미지를 푸시합니다.docker push myregistry.azurecr.io/aspnetapp:v1
애플리케이션 배포
프로젝트의 루트 디렉터리에 Deployment 디렉터리를 만듭니다.
배포를 정의하려면 배포 디렉터리에 다음 콘텐츠가 포함된 deployment.yaml 파일을 추가합니다. 값을
template.spec.containers.image이전 섹션에서 만든 태그로 바꿉습니다.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80서비스를 정의
LoadBalancer하려면 다음 콘텐츠가 포함된 service.yaml 파일을 배포 디렉터리에 추가합니다.apiVersion: v1 kind: Service metadata: name: aspnetapp-demo-service spec: type: LoadBalancer ports: - port: 80 selector: app: aspnetapp-demokubectl이 AKS 클러스터에 연결할 수 있도록 하려면 다음 명령을 실행합니다. AKS 클러스터에 대한 자격 증명을 다운로드하고 클러스터의 컨텍스트에 병합합니다.
az aks get-credentials --name <your-AKS-instance-name> --resource-group <your-AKS-resource-group>AKS 클러스터에 애플리케이션을 배포하고 리소스를 만들려면 다음 명령을 실행합니다.
kubectl create namespace appconfig-demo kubectl apply -f ./Deployment -n appconfig-demo서비스에서 노출되는
LoadBalancer외부 IP 주소를 얻으려면 다음 명령을 실행합니다.kubectl get service aspnetapp-demo-service -n appconfig-demo브라우저 창에서 이전 단계에서 얻은 IP 주소로 이동합니다. 웹 페이지는 다음 스크린샷과 유사합니다.
Azure App Configuration Kubernetes 공급자 사용
이제 AKS에서 실행 중인 애플리케이션이 있으므로 다음 단계는 AkS 클러스터에 Azure App Configuration Kubernetes Provider를 배포하여 Kubernetes 컨트롤러로 실행하는 것입니다. 이 공급자는 App Configuration 저장소에서 데이터를 검색하고, 데이터 볼륨에 탑재된 JSON 파일로 사용할 수 있는 ConfigMap을 만듭니다.
App Configuration 저장소 설정
App Configuration 저장소에 다음 키와 값을 추가합니다. 각각에 대해 레이블 및 콘텐츠 형식에 대한 기본값을 사용합니다. Azure Portal 또는 Azure CLI를 사용하여 저장소에 키 값을 추가하는 방법에 대한 자세한 내용은 키-값 만들기를 참조하세요.
| 키 | 값 |
|---|---|
| 설정:글꼴 색상 | 녹색 |
| 설정:메시지 | Azure App Configuration으로부터 안녕하세요 |
Azure App Configuration Kubernetes 공급자 설정
AKS 클러스터에 Azure App Configuration Kubernetes Provider를 설치합니다. 공급자를 AKS 확장으로 설치하거나 Helm 차트를 사용하여 설치할 수 있습니다. AKS 확장은 Azure CLI, ARM 템플릿(Azure Resource Manager 템플릿) 또는 Bicep 파일을 통해 원활한 설치 및 관리를 제공합니다. 또한 AKS 확장을 사용하면 자동 부 버전 및 패치 버전 업데이트를 용이하게 하여 시스템이 최신 상태로 유지되도록 할 수 있습니다.
Azure CLI 확장에
k8s-extension추가합니다.az extension add --name k8s-extension리소스 공급자를
KubernetesConfiguration등록합니다.az provider register --namespace Microsoft.KubernetesConfigurationApp Configuration용 AKS 확장을 설치합니다.
cluster-name및resource-group매개 변수 값을 AKS 인스턴스의 해당 값으로 바꿉니다. 기본적으로 공급자는 네임스페이스에azappconfig-system설치됩니다.az k8s-extension create --cluster-type managedClusters \ --cluster-name <your-AKS-instance-name> \ --resource-group <your-AKS-resource-group> \ --name appconfigurationkubernetesprovider \ --extension-type Microsoft.AppConfiguration자세한 내용은 Azure App Configuration AKS 확장 설치를 참조하세요.
리소스를
AzureAppConfigurationProvider정의하려면 다음 콘텐츠가 포함된 appConfigurationProvider.yaml 파일을 배포 디렉터리에 추가합니다.AzureAppConfigurationProvider는 사용자 지정 리소스입니다. App Configuration 저장소에서 다운로드할 데이터를 정의합니다. ConfigMap도 만듭니다.apiVersion: azconfig.io/v1 kind: AzureAppConfigurationProvider metadata: name: appconfigurationprovider-sample spec: endpoint: <your-app-configuration-store-endpoint> target: configMapName: configmap-created-by-appconfig-provider configMapData: type: json key: mysettings.json auth: workloadIdentity: serviceAccountName: <your-service-account-name>endpoint필드의 값을 Azure App Configuration 저장소의 엔드포인트로 바꿉니다. 다음 단계로 진행하여 인증 정보로auth섹션을 업데이트합니다.참고 항목
AzureAppConfigurationProvider는 선언적 API 개체입니다. App Configuration 저장소의 데이터에서 만든 ConfigMap의 원하는 상태를 정의합니다. 원하는 상태의 정의는 다음 동작을 지정합니다.- 이름이 같은 ConfigMap이 동일한 네임스페이스에 이미 있는 경우 ConfigMap 만들기가 실패합니다.
- ConfigMap은 다른 방법으로 삭제되거나 수정된 경우 App Configuration 저장소의 현재 데이터를 기반으로 다시 설정됩니다.
- Azure App Configuration Kubernetes 공급자를 제거하면 ConfigMap이 삭제됩니다.
App Configuration 저장소를 사용하여 인증하려면 워크로드 ID 사용에 대한 지침을 따릅니다. 지침을 따를 때 필드를 만든 서비스 계정의 이름으로 바꿔
serviceAccountNameappConfigurationProvider.yaml 파일을 업데이트합니다. 다른 인증 방법에 대한 자세한 내용은 인증의 예제를 참조하세요.다음 코드와 같이 ConfigMap
configmap-created-by-appconfig-provider을 탑재된 데이터 볼륨으로 사용하도록 배포 디렉터리의 deployment.yaml 파일을 업데이트합니다. 값은volumeMounts.mountPathDockerfile에 지정된 값과 이전에 만든 구성 디렉터리와 일치WORKDIR해야 합니다. 또한 값template.spec.containers.image이 이전에 만든 이미지의 이름과 일치하는지 확인합니다.apiVersion: apps/v1 kind: Deployment metadata: name: aspnetapp-demo labels: app: aspnetapp-demo spec: replicas: 1 selector: matchLabels: app: aspnetapp-demo template: metadata: labels: app: aspnetapp-demo spec: containers: - name: aspnetapp image: myregistry.azurecr.io/aspnetapp:v1 ports: - containerPort: 80 volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: configmap-created-by-appconfig-provider변경 내용을 배포하려면 다음 명령을 실행합니다. 기존 AKS 애플리케이션을 사용하는 경우 네임스페이스를 업데이트합니다.
kubectl apply -f ./Deployment -n appconfig-demo브라우저를 새로 고칩니다. 페이지에 업데이트된 콘텐츠가 표시됩니다.
문제 해결
애플리케이션이 App Configuration 저장소에서 데이터를 읽지 않는 경우 다음 명령을 실행하여 ConfigMap이 제대로 만들어졌는지 확인합니다.
kubectl get configmap configmap-created-by-appconfig-provider -n appconfig-demo
ConfigMap이 만들어지지 않은 경우 다음 명령을 실행하여 데이터 검색 상태를 가져옵니다.
kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
Azure App Configuration Kubernetes Provider가 App Configuration 저장소에서 데이터를 성공적으로 phase 검색하는 경우 다음 예제와 status 같이 출력 섹션의 속성이 있어야 Complete합니다.
$ kubectl get AzureAppConfigurationProvider appconfigurationprovider-sample -n appconfig-demo -o yaml
apiVersion: azconfig.io/v1
kind: AzureAppConfigurationProvider
... ... ...
status:
lastReconcileTime: "2025-08-04T13:58:02Z"
lastSyncTime: "2025-08-04T13:58:02Z"
message: Complete sync key-values from App Configuration to target ConfigMap or
Secret.
phase: Complete
단계 속성이 없 COMPLETE으면 App Configuration 저장소에서 데이터가 제대로 다운로드되지 않습니다. Azure App Configuration Kubernetes 공급자의 로그에 액세스하려면 다음 명령을 실행합니다.
kubectl logs deployment/az-appconfig-k8s-provider -n azappconfig-system
이 로그를 추가 문제 해결에 사용합니다. 일반적인 문제에 대한 해결 방법은 FAQ를 참조하세요.
자주 묻는 질문(FAQ)
ConfigMap 또는 비밀이 생성되지 않는 이유는 무엇인가요?
자세한 오류 정보가 포함된 로그를 수집하려면 문제 해결의 단계를 수행합니다. 이 문제의 몇 가지 일반적인 원인은 다음과 같습니다.
- 응답 403: 403 사용할 수 없음: 구성된 ID에 App Configuration 저장소에 액세스하는 데 필요한 권한이 없습니다. 사용 중인 ID와 일치하는 예제는 인증을 참조하세요.
-
Key Vault 참조는 App Configuration에서 찾을 수 있지만 'spec.secret'은 구성되지 않았습니다. 하나 이상의 Key Vault 참조가 선택한 키-값에 포함되지만 Key Vault에 대한 인증 정보는 제공되지 않습니다. 구성의 무결성을 유지하기 위해 전체 구성이 로드되지 않습니다.
spec.secret섹션을 구성하여 필요한 인증 정보를 제공합니다. 예제 및 자세한 내용은 Key Vault 참조를 참조하세요 .
생성된 ConfigMap에 예상 데이터가 포함되지 않는 이유는 무엇인가요?
지정한 키-값 선택기가 예상 데이터와 일치하는지 확인합니다. 선택기를 지정하지 않으면 레이블이 없는 모든 키 값이 App Configuration 저장소에서 다운로드됩니다. 키 필터를 사용하는 경우 예상되는 키-값의 접두사와 일치하는지 확인합니다. 키-값에 레이블이 있는 경우 선택기에서 레이블 필터를 지정해야 합니다. 자세한 예제는 키-값 선택을 참조하세요.
Azure App Configuration Kubernetes 공급자 설치를 사용자 지정하는 방법
Azure App Configuration Kubernetes Provider를 설치할 때 추가 Helm 값을 제공하여 설치를 사용자 지정할 수 있습니다. 예를 들어, 로그 수준을 설정하고, 공급자가 특정 노드에서 실행되도록 구성하거나, 워크로드 ID를 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 설치를 참조 하세요.
ConfigMap 및 Secret의 주문형 새로 고침을 트리거하는 방법은 무엇입니까?
데이터를 자동으로 새로 고치도록 구성할 수 있습니다. 그러나 App Configuration 및 Key Vault에서 최신 데이터를 가져오기 위해 주문형 새로 고침을 트리거하려는 경우가 있습니다. 새로 고침을 트리거하려면 .의 AzureAppConfigurationProvider섹션을 수정할 metadata.annotations 수 있습니다. 그런 다음 Kubernetes 공급자는 ConfigMap 및 Secret을 App Configuration 저장소 및 Key Vault의 최신 데이터로 업데이트합니다. 예를 들어 주문형 새로 고침을 참조하세요.
Kubernetes 공급자가 생성한 ConfigMap 및 비밀을 삭제하거나 수정하지 않는 것이 좋습니다. 최신 데이터에서 새 데이터가 생성되지만, 이 경우 오류 발생 시 애플리케이션에 가동 중지 시간이 발생할 수 있습니다.
공급자를 버전 2.0.0으로 업그레이드한 후 워크로드 ID를 사용하여 App Configuration에서 인증할 수 없는 이유는 무엇인가요?
버전 2.0.0부터 워크로드 ID를 사용하여 App Configuration을 인증하려면 사용자가 제공한 서비스 계정이 필요합니다. 이 변경은 네임스페이스 격리를 통해 보안을 강화합니다. 이전에는 Kubernetes 공급자의 서비스 계정이 모든 네임스페이스에 사용되었습니다. 업데이트된 지침은 워크로드 ID 사용에 대한 설명서를 참조하세요. 버전 2.0.0으로 업그레이드할 때 마이그레이션할 시간이 필요한 경우 공급자를 설치하는 동안 일시적으로 설정을 사용할 workloadIdentity.globalServiceAccountEnabled=true 수 있습니다. 공급자의 서비스 계정 사용에 대한 지원은 향후 릴리스에서 사용 중단될 예정입니다.
리소스 정리
Azure App Configuration Kubernetes 공급자를 제거하지만 AKS 클러스터를 유지하려면 다음 명령을 사용하여 공급자를 제거합니다.
az k8s-extension delete --cluster-type managedClusters \
--cluster-name <your-AKS-instance-name> \
--resource-group <your-AKS-resource-group> \
--name appconfigurationkubernetesprovider
이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.
중요합니다
리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.
- Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
- 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
- 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
- 리소스 그룹 삭제를 선택합니다.
- 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.
잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.
참고 항목
Azure Developer CLI를 사용하여 리소스를 설정하는 경우 azd down 명령을 실행하여 azure-appconfig-aks 템플릿에서 만들어진 모든 리소스를 삭제할 수 있습니다.
다음 단계
이 빠른 시작에서 관련 정보는 다음과 같습니다.
- AKS에서 실행되는 애플리케이션을 만들었습니다.
- Azure App Configuration Kubernetes 공급자를 사용하여 AKS 클러스터를 App Configuration 저장소에 연결했습니다.
- App Configuration 저장소의 데이터로 ConfigMap을 만들었습니다.
- 애플리케이션 코드를 변경하지 않고 App Configuration 저장소의 구성 데이터로 애플리케이션을 실행했습니다.
AKS 워크로드를 업데이트하여 구성 데이터를 동적으로 새로 고치는 방법을 알아보려면 다음 자습서를 계속 진행하세요.
Azure App Configuration Kubernetes 공급자에 대한 자세한 내용은 Azure App Configuration Kubernetes 공급자 참조를 참조하세요.