이 예제 시나리오에서는 원래 Kubernetes에서 실행되도록 디자인된 기존 워크로드의 예제를 Azure Container Apps에서 대신 실행할 수 있습니다. Azure Container Apps는 팀이 복잡한 인프라 및 컨테이너 오케스트레이션을 간소화하려는 브라운필드 워크로드에 적합합니다. 예제 워크로드는 컨테이너화된 마이크로 서비스 애플리케이션을 실행합니다.
이 예제에서는 Azure Kubernetes Service의 마이크로 서비스 아키텍처에서 사용되는 워크로드를 가져와서 Azure Container Apps에서 애플리케이션 플랫폼으로 다시 호스트합니다.
팁
아키텍처는 이 문서에 설명된 몇 가지 디자인 선택을 보여 주는 예제 구현 을 통해 지원됩니다.
아키텍처
이 아키텍처의 Visio 파일을 다운로드합니다.
이 시나리오에서 컨테이너 이미지는 Azure Container Registry에서 제공되고 컨테이너 앱 환경에 배포됩니다.
동일한 환경을 공유하는 서비스는 다음을 활용합니다.
- 내부 수신 및 서비스 검색
- 런타임 로깅을 위한 단일 Log Analytics 작업 영역
- 비밀 및 인증서의 보안 관리
워크플로 서비스 컨테이너 앱이 단일 수정 모드로 실행되고 있습니다. 단일 수정 모드에서 실행되는 컨테이너 앱에는 0개 복제본으로 지원되는 단일 수정 버전이 있습니다. 복제본은 애플리케이션 컨테이너 및 필요한 사이드카 컨테이너로 구성됩니다. 이 예제에서는 사이드카 컨테이너를 사용하지 않으므로 각 컨테이너 앱 복제본은 단일 컨테이너를 나타냅니다. 이 예제에서는 크기 조정을 채택하지 않으므로 각 컨테이너 앱에 대해 하나의 복제본만 실행됩니다.
워크플로는 비밀 관리에 대한 하이브리드 접근 방식을 사용합니다. 관리 ID는 이 구현에 코드 변경이 필요하지 않은 서비스에서 사용됩니다. 드론 스케줄러 및 배달 서비스는 사용자가 할당한 관리 ID를 통해 Azure Key Vault에서 인증하여 저장된 비밀에 액세스합니다. 나머지 서비스는 애플리케이션 수준에서 Container Apps 서비스를 통해 비밀을 저장합니다.
이 다이어그램은 솔루션의 런타임 아키텍처를 보여 줍니다.
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
- 수집 서비스: 클라이언트 요청을 수신하고, 버퍼링하고, Azure Service Bus를 통해 워크플로 서비스에 보냅니다.
- 워크플로 서비스: Azure Service Bus의 메시지를 사용하고 기본 서비스에 디스패치합니다.
- 패키지 서비스: 패키지를 관리합니다.
- 드론 스케줄러 서비스: 드론을 예약하고 이동 중인 드론을 모니터링합니다.
- 배달 서비스: 예약되거나 이동 중인 배달을 관리합니다.
구성 요소
드론 배달 서비스는 서로 협력하여 일련의 Azure 서비스를 사용합니다.
Azure Container Apps
Azure Container Apps는 기본 구성 요소입니다.
이러한 기능은 이전 AKS 아키텍처의 많은 복잡성을 대체합니다.
- 기본 제공 서비스 검색
- 완전 관리형 HTTP 및 HTTP/2 엔드포인트
- 통합 부하 분산
- 로깅 및 모니터링
- KEDA에서 제공하는 HTTP 트래픽 또는 이벤트 기반 자동 크기 조정(Kubernetes 기반 이벤트 기반 자동 크기 조정)
- 애플리케이션 업그레이드 및 버전 관리
외부 스토리지 및 기타 구성 요소
Azure Key Vault 서비스 - API 키, 암호, 인증서 등의 비밀을 안전하게 저장하고 액세스합니다.
Azure Container Registry - 프라이빗 컨테이너 이미지를 저장합니다. 또한 Docker Hub와 같은 다른 컨테이너 레지스트리도 사용할 수 있습니다.
Azure Cosmos DB는 오픈 소스 Azure Cosmos DB for MongoDB를 사용하여 데이터를 저장합니다. 마이크로 서비스는 일반적으로 상태 비저장으로, 외부 데이터 저장소에 상태를 씁니다. Azure Cosmos DB는 MongoDB 및 Cassandra용 오픈 소스 API를 사용하는 NoSQL 데이터베이스입니다.
Azure Service Bus는 안정적인 클라우드 MaaS(Messaging as a Service) 및 간단한 하이브리드 통합을 제공합니다. Service Bus는 마이크로 서비스 애플리케이션과 공통적인 비동기 메시징 패턴을 지원합니다.
Azure Cache for Redis는 애플리케이션 아키텍처에 캐싱 레이어를 추가하여 많은 트래픽 부하에서 속도와 성능을 향상시킵니다.
Azure Monitor 는 애플리케이션에서 메트릭과 로그를 수집하고 저장합니다. 이 데이터를 사용하여 애플리케이션을 모니터링하고, 경고 및 대시보드를 설정하고, 오류의 근본 원인을 분석할 수 있습니다. 이 시나리오에서는 Log Analytics 작업 영역을 사용하여 인프라 및 애플리케이션을 포괄적으로 모니터링합니다.
Application Insights - 서비스에 대한 확장 가능한 APM(애플리케이션 성능 관리) 및 모니터링을 제공합니다. 각 서비스는 Application Insights SDK를 사용하여 계측되어 앱을 모니터링하고 데이터를 Azure Monitor에 전달합니다.
애플리케이션을 구성하고 배포하는 Bicep 템플릿입니다.
대안
이 예제의 대체 시나리오는 Kubernetes를 사용하는 Fabrikam 드론 배달 애플리케이션으로, GitHub의 AKS(Azure Kubernetes Service) Fabrikam 드론 배달 리포지토리에서 사용할 수 있습니다.
시나리오 정보
비즈니스는 Azure Container Apps를 사용하여 마이크로 서비스 컨테이너의 배포 및 관리를 간소화할 수 있습니다. Container Apps는 최신 애플리케이션을 빌드하고 배포하기 위한 완전 관리형 서버리스 환경을 제공합니다.
Fabrikam, Inc.(가상의 회사)는 사용자가 배송을 위해 상품을 수령하기 위해 드론을 요청하는 드론 배달 애플리케이션을 구현합니다. 사용자가 픽업을 예약하면 백 엔드 시스템이 드론을 할당하고 사용자에게 예상 배달 시간을 알립니다.
마이크로 서비스 애플리케이션은 AKS(Azure Kubernetes Service) 클러스터에 배포되었습니다. 그러나 Fabrikam 팀은 고급 또는 플랫폼별 AKS 기능을 활용하지 않았습니다. 결국 많은 오버헤드 없이 애플리케이션을 Azure Container Apps로 마이그레이션했습니다. Azure Container Apps에 솔루션을 포팅함으로써 Fabrikam은 다음을 수행할 수 있었습니다.
- 애플리케이션을 거의 그대로 마이그레이션: AKS에서 Azure Container Apps로 애플리케이션을 이동할 때 매우 최소한의 코드 변경이 필요했습니다.
- Bicep 템플릿을 사용하여 인프라와 워크로드를 모두 배포합니다. 애플리케이션 컨테이너를 배포하는 데 Kubernetes YAML 매니페스트가 필요하지 않았습니다.
- 관리되는 수신을 통해 애플리케이션 노출: 수집 서비스를 노출하기 위한 외부 https 기반 수신에 대한 기본 제공 지원으로 자체 수신을 구성할 필요가 없습니다.
- ACR에서 컨테이너 이미지 끌어오기(Azure Container Registry): Azure Container Apps에는 특정 기본 이미지 또는 레지스트리가 필요하지 않습니다.
- 애플리케이션 수명 주기 관리: 수정 기능은 A/B 테스트 또는 블루/그린 배포 시나리오를 위해 특정 컨테이너 앱의 여러 수정 버전 실행 및 트래픽 분할을 지원합니다.
- 관리 ID 사용: Fabrikam 팀은 관리 ID를 사용하여 Azure Key Vault 및 Azure Container Registry로 인증할 수 있었습니다.
잠재적인 사용 사례
- 관리를 간소화하고 컨테이너 오케스트레이터 실행의 복잡성을 방지하기 위해 PaaS(Platform as a Service)에 브라운필드 마이크로 서비스 기반 애플리케이션을 배포합니다.
- 네이티브 0으로 스케일링을 지원하는 플랫폼으로 컨테이너화된 서비스를 마이그레이션하여 운영 및 관리를 최적화합니다.
- 단일 수정 모드에서 워크플로 서비스와 같은 장기 실행 백그라운드 프로세스를 실행합니다.
Container Apps의 다른 일반적인 용도는 다음과 같습니다.
- 서버리스 사용량 기반 플랫폼에서 컨테이너화된 워크로드 실행.
- KEDA에서 지원하는 HTTP/HTTPS 트래픽 및/또는 이벤트 기반 트리거를 기반으로 애플리케이션 자동 스케일링
- 컨테이너화된 애플리케이션에 대한 유지 관리 오버헤드 최소화
- API 엔드포인트 배포
- 백그라운드 처리 애플리케이션 호스팅
- 이벤트 기반 처리 수행
고려 사항
이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.
가용성
Container Apps를 사용하면 애플리케이션을 보다 쉽게 배포, 관리, 유지 관리 및 모니터링할 수 있습니다. 다음 주요 기능을 통해 가용성을 보장할 수 있습니다.
- 수정 버전을 사용하면 가동 중지 시간이 0인 애플리케이션 업데이트를 배포할 수 있습니다. 수정 버전을 사용하여 애플리케이션 업데이트 배포를 관리하고 수정 버전 간에 트래픽을 분할하여 블루/그린 배포 및 A/B 테스트(현재 이 예제 워크로드에서 사용되지 않음)를 지원할 수 있습니다.
- Container Apps 엔드투엔드 가시성 기능을 사용하면 실행 중인 애플리케이션을 전체적으로 파악할 수 있습니다. Container Apps는 Azure Monitor 및 Log Analytics와 통합되므로 컨테이너 앱 실행을 추적하고 메트릭 및 이벤트에 따라 경고를 설정할 수 있습니다.
- 앱이 예기치 않게 종료되면 Container Apps 서비스가 자동으로 앱을 다시 시작합니다.
- 트래픽 및 워크로드가 증가함에 따라 수요를 충족하기 위해 자동 스케일링 규칙을 사용하도록 설정합니다.
- Container Apps의 동적 부하 분산 기능은 성능을 최적화합니다(이 예제 워크로드에서는 활용되지 않음).
운영 우수성
운영 우수성은 애플리케이션을 배포하고 프로덕션에서 계속 실행하는 운영 프로세스를 다룹니다. 자세한 내용은 운영 우수성 핵심 요소 개요를 참조하세요.
운영 우수성을 달성하기 위해 Container Apps 서비스는 다음 기능을 제공합니다.
- 자동화된 CI/CD 배포를 설정하기 위한 GitHub Actions 통합.
- 애플리케이션 코드 및 스케일링 규칙의 변경 내용을 테스트하기 위해 트래픽 분할을 사용하는 다중 수정 모드.
- 컨테이너화된 애플리케이션에 대한 인사이트를 제공하기 위해 Azure Monitor 및 Log Analytics와 통합.
성능 효율성
성능 효율성은 사용자가 배치된 요구 사항을 효율적인 방식으로 충족하기 위해 워크로드의 크기를 조정할 수 있는 기능입니다. 자세한 내용은 성능 효율성 핵심 요소 개요를 참조하세요.
이 솔루션의 성능 고려 사항:
- 워크로드는 여러 마이크로 서비스 애플리케이션 간에 분산됩니다.
- 각 마이크로 서비스는 독립적이어서 다른 마이크로 서비스와 아무것도 공유하지 않으므로 마이크로 서비스를 독립적으로 확장할 수 있습니다.
- 워크로드가 증가함에 따라 자동 스케일링을 사용하도록 설정할 수 있습니다.
- 요청은 동적으로 부하가 분산됩니다.
- CPU 및 메모리 사용률, 대역폭 정보, 스토리지 사용률을 포함한 메트릭은 Azure Monitor를 통해 사용할 수 있습니다.
- Log Analytics는 각 Container Apps 환경에서 정보를 수집하는 로그 집계를 제공합니다.
안정성
안정성은 애플리케이션이 고객에 대한 약속을 충족할 수 있도록 합니다. 자세한 내용은 안정성 핵심 요소 개요를 참조하세요.
Container Apps는 실패한 컨테이너를 다시 시작하려고 하고 사용자의 하드웨어를 추상화합니다. Microsoft는 일시적인 오류를 처리하고 백업 컴퓨팅 리소스의 고가용성을 보장합니다.
Log Analytics 및 Azure Monitor를 통해 성능을 모니터링하면 부하 시 애플리케이션을 평가할 수 있습니다. 메트릭 및 로깅 정보는 실패를 방지하기 위해 추세를 인식하고 발생 시 실패의 근본 원인을 분석하는 데 필요한 데이터를 제공합니다.
보안
우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.
비밀
- 컨테이너 앱은 중요한 값을 비밀로 저장하고 검색할 수 있습니다. 컨테이너 앱에 대한 비밀이 정의되면 애플리케이션 및 연결된 크기 조정 규칙에서 사용할 수 있습니다. 다중 수정 모드에서 실행하는 경우 모든 수정 버전이 동일한 비밀을 공유합니다. 비밀은 애플리케이션 범위 변경으로 간주되므로 비밀 값을 변경하는 경우 새 수정 버전이 만들어지지 않습니다. 그러나 새 비밀 값을 로드하려면 실행 중인 수정 버전을 다시 시작해야 합니다. 이 시나리오에서는 애플리케이션 및 환경 변수 값이 사용됩니다.
- 환경 변수: 중요한 값은 애플리케이션 수준에서 안전하게 저장할 수 있습니다. 환경 변수가 변경되면 컨테이너 앱은 새 수정 버전을 생성합니다.
네트워크 보안
- 수신: 외부 액세스를 제한하기 위해 수집 서비스만 외부 수신에 대해 구성됩니다. 백 엔드 서비스는 Container Apps 환경의 내부 가상 네트워크를 통해서만 액세스할 수 있습니다. 필요한 경우 인터넷에만 서비스를 노출합니다. 이 아키텍처는 기본 제공 외부 수신 기능을 사용하므로 이 솔루션은 수신 지점을 WAF(웹 애플리케이션 방화벽) 뒤에 완전히 배치하거나 DDoS Protection 계획에 포함할 수 있는 기능을 제공하지 않습니다. 모든 웹 연결 워크로드에는 웹 애플리케이션 방화벽이 있어야 합니다.
- 가상 네트워크: 환경을 만들 때 사용자 지정 가상 네트워크를 제공할 수 있습니다. 그렇지 않으면 가상 네트워크가 자동으로 생성되고 Microsoft에서 관리됩니다. NSG(네트워크 보안 그룹)를 추가하거나 송신 방화벽에 트래픽을 강제로 터널링하는 등 Microsoft에서 관리하는 가상 네트워크를 조작할 수 없습니다. 이 예제에서는 자동으로 생성된 가상 네트워크를 사용합니다.
네트워크 토폴로지 옵션에 대한 자세한 내용은 Azure Container Apps의 네트워킹 아키텍처를 참조 하세요.
워크로드 ID
- Container Apps는 앱이 컨테이너 앱에서 자격 증명을 관리하지 않고 Azure Key Vault와 같은 Microsoft Entra ID로 보호되는 다른 리소스에 인증할 수 있도록 하는 Microsoft Entra 관리 ID를 지원합니다. 컨테이너 앱은 시스템 할당, 사용자 할당 또는 두 가지 유형의 관리 ID를 모두 사용할 수 있습니다. AD 인증을 지원하지 않는 서비스의 경우 Azure Key Vault에 비밀을 저장하고 관리 ID를 사용하여 비밀에 액세스해야 합니다.
- Azure Container Registry 액세스에 관리 ID를 사용합니다. Azure Container Apps를 사용하면 컨테이너 레지스트리 액세스와는 다른 관리 ID를 워크로드에 사용할 수 있습니다. 이 방법은 관리 ID에 대한 세분화된 액세스 제어를 달성하는 데 권장됩니다.
비용 최적화
- Microsoft Azure Well-Architected Framework의 비용 섹션에서 비용 관련 고려 사항을 설명합니다. Azure 가격 계산기를 사용하여 특정 시나리오에 대한 비용을 예측합니다.
- Azure Container Apps에는 사용량 기반 가격 책정 모델이 있습니다.
- Azure Container Apps는 0으로 스케일링을 지원합니다. 컨테이너 앱이 0으로 스케일링되면 요금이 없습니다.
- 이 시나리오에서는 Azure Cosmos DB 및 Azure Cache for Redis가 주요 비용 동인입니다.
시나리오 배포
Azure Container Apps 예제 시나리오 리포지토리의 README.md 단계를 따릅니다.
참가자
Microsoft는 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
보안 주체 작성자:
- Catherine Bundy | 기술 문서 작성자