다음을 통해 공유


Azure Container Apps 환경에서 프라이빗 엔드포인트 사용(미리 보기)

이 문서에서는 프라이빗 엔드포인트를 사용하여 공용 인터넷에 노출하지 않고 Azure Container App에 안전하게 액세스하는 방법을 알아봅니다.

프라이빗 엔드포인트는 VNet(가상 네트워크)의 개인 IP 주소를 사용합니다. 이 엔드포인트는 Azure Private Link에서 제공하는 서비스에 비공개로 안전하게 연결합니다.

Azure Container Apps의 프라이빗 엔드포인트는 인바운드 HTTP 트래픽만 지원합니다. TCP 트래픽은 지원되지 않습니다.

필수 조건

컨테이너 앱 만들기

먼저 Azure Portal에 로그인합니다.

  1. 위쪽 검색 창에서 Container Apps를 검색합니다.

  2. 검색 결과에서 Container Apps를 선택합니다.

  3. 생성 단추를 선택합니다.

  4. 기본 사항 탭의 컨테이너 앱 만들기 페이지에서 다음 값을 입력합니다.

    설정 작업
    구독 Azure 구독을 선택합니다.
    Resource group 새로 만들기를 선택하고, my-container-apps를 입력합니다.
    컨테이너 앱 이름 my-container-app을 입력합니다.
    배포 원본 컨테이너 이미지를 선택합니다.
    지역 미국 중부를 선택합니다.
  5. 컨테이너 앱 환경 만들기 필드에서 새 만들기 링크를 선택합니다.

  6. 기본 사항 탭의 Container Apps 환경 만들기 페이지에서 다음 값을 입력합니다.

    설정
    환경 이름 my-environment를 입력합니다.
    영역 중복 사용 안 함 선택
  7. 네트워킹 탭을 선택하여 VNet(가상 네트워크)을 만듭니다. 기본적으로 공용 네트워크 액세스는 사용하도록 설정됩니다. 즉, 프라이빗 엔드포인트가 사용하지 않도록 설정됩니다.

  8. 공용 네트워크 액세스를 사용하지 않도록 설정합니다.

  9. 사용자 고유의 가상 네트워크 사용을 아니요설정합니다. 기존 VNet을 사용할 수 있지만 프라이빗 엔드포인트는 최소 CIDR 범위 /27 이상의 서브넷이 필요한 워크로드 프로필 환경에서만 지원됩니다. 서브넷 크기 조정에 대해 자세히 알아보려면 네트워킹 아키텍처 개요를 참조하세요.

  10. 프라이빗 엔드포인트 사용을 예설정합니다.

  11. 프라이빗 엔드포인트 이름을 my-private-endpoint로 설정합니다.

  12. 프라이빗 엔드포인트 가상 네트워크 필드에서 새 만들기 링크를 선택합니다.

  13. Virtual Network 만들기 페이지에서 Virtual Networkmy-private-endpoint-vnet으로 설정합니다. 확인을 선택합니다.

  14. 프라이빗 엔드포인트 가상 네트워크 서브넷 필드에서 새 만들기 링크를 선택합니다.

  15. 서브넷 만들기 페이지에서 서브넷 이름을 my-private-endpoint-vnet-subnet으로 설정합니다. 확인을 선택합니다.

  16. DNS를 Azure 프라이빗 DNS 영역으로 설정합니다.

  17. 만들기를 실행합니다.

  18. 기본 사항 탭의 컨테이너 앱 만들기 페이지에서 다음 : 컨테이너>를 선택합니다.

  19. 컨테이너 탭의 컨테이너 앱 만들기 페이지에서 빠른 시작 이미지 사용을 선택합니다.

  20. 페이지 아래쪽에서 검토 및 만들기를 선택합니다.

    오류가 없으면 만들기 단추가 사용하도록 설정됩니다.

    오류가 있으면 오류가 포함된 탭이 빨간색 점으로 표시됩니다. 적절한 탭으로 이동합니다. 오류가 포함된 필드는 빨간색으로 강조 표시됩니다. 모든 오류가 해결되면 검토 및 만들기를 다시 선택합니다.

  21. 만들기를 실행합니다.

    배포 진행 중이라는 메시지가 있는 페이지가 표시됩니다. 배포가 성공적으로 완료되면 배포가 완료됨이라는 메시지가 표시됩니다.

    컨테이너 앱 엔드포인트로 이동하면 컨테이너 앱 환경에 공용 액세스가 비활성화되어 있기 때문에 수신됩니다 ERR_CONNECTION_CLOSED . 대신 프라이빗 엔드포인트를 사용하여 컨테이너 앱에 액세스합니다.

필수 조건

  • 활성 구독이 있는 Azure 계정

  • 최신 버전의 Azure CLI 최신 버전을 실행 중인지 확인하려면 다음 명령을 실행합니다.

    az upgrade
    
  • Azure CLI용 Azure Container Apps 확장의 최신 버전입니다. 최신 버전을 실행 중인지 확인하려면 다음 명령을 실행합니다.

    az extension add --name containerapp --upgrade --allow-preview true
    

    참고 항목

    2024년 5월부터 Azure CLI 확장 기능은 기본적으로 미리 보기 기능을 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 --allow-preview true를 사용하여 Container Apps 확장을 설치합니다.

필수 구성 요소 및 설정에 대한 자세한 내용은 빠른 시작: containerapp을 사용하여 첫 번째 컨테이너 앱 배포를 참조하세요.

환경 변수 설정

다음 환경 변수를 설정합니다.

RESOURCE_GROUP="my-container-apps"
LOCATION="centralus"
ENVIRONMENT_NAME="my-environment"
CONTAINERAPP_NAME="my-container-app"
VNET_NAME="my-custom-vnet"
SUBNET_NAME="my-custom-subnet"
PRIVATE_ENDPOINT="my-private-endpoint"
PRIVATE_ENDPOINT_CONNECTION="my-private-endpoint-connection"
PRIVATE_DNS_ZONE="privatelink.${LOCATION}.azurecontainerapps.io"
DNS_LINK="my-dns-link"

Azure 리소스 그룹 만들기

컨테이너 앱 배포와 관련된 서비스를 구성하는 리소스 그룹을 만듭니다.

az group create \
    --name $RESOURCE_GROUP \
    --location $LOCATION

가상 네트워크 만들기

Azure Container Apps의 환경은 컨테이너 앱 그룹 주위에 보안 경계를 만듭니다. 동일한 환경에 배포된 컨테이너 앱은 동일한 가상 네트워크에 배포되고 동일한 Log Analytics 작업 영역에 로그를 씁니다.

  1. Container Apps 환경과 연결할 Azure VNet(가상 네트워크)을 만듭니다. VNet에는 환경 배포에 사용할 수 있는 서브넷이 있어야 합니다. 기존 VNet을 사용할 수 있지만 프라이빗 엔드포인트는 최소 CIDR 범위 /27 이상의 서브넷이 필요한 워크로드 프로필 환경에서만 지원됩니다. 서브넷 크기 조정에 대해 자세히 알아보려면 네트워킹 아키텍처 개요를 참조하세요.

    az network vnet create \
        --resource-group $RESOURCE_GROUP \
        --name $VNET_NAME \
        --location $LOCATION \
        --address-prefix 10.0.0.0/16
    
  2. VNet과 연결하고 프라이빗 엔드포인트를 포함할 서브넷을 만듭니다.

    az network vnet subnet create \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 10.0.0.0/21
    
  3. 서브넷 ID를 검색합니다. 이를 사용하여 프라이빗 엔드포인트를 만듭니다.

    SUBNET_ID=$(az network vnet subnet show \
        --resource-group $RESOURCE_GROUP \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --query "id" \
        --output tsv)
    

환경 만들기

  1. 이전 단계에서 배포된 VNet을 사용하여 Container Apps 환경을 만듭니다. 프라이빗 엔드포인트는 새 환경의 기본 형식인 워크로드 프로필 환경에서만 지원됩니다.

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    
  2. 환경 ID를 검색합니다. 이 방법을 사용하여 환경을 구성합니다.

    ENVIRONMENT_ID=$(az containerapp env show \
        --resource-group $RESOURCE_GROUP \
        --name $ENVIRONMENT_NAME \
        --query "id" \
        --output tsv)
    
  3. 환경에 대한 공용 네트워크 액세스를 사용하지 않도록 설정합니다. 프라이빗 엔드포인트를 사용하도록 설정하려면 이 작업이 필요합니다.

    az containerapp env update \
        --id $ENVIRONMENT_ID \
        --public-network-access Disabled
    

프라이빗 엔드포인트 만들기

이전에 만든 환경 및 서브넷에 프라이빗 엔드포인트를 만듭니다.

az network private-endpoint create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $PRIVATE_ENDPOINT \
    --subnet $SUBNET_ID \
    --private-connection-resource-id $ENVIRONMENT_ID \
    --connection-name $PRIVATE_ENDPOINT_CONNECTION \
    --group-id managedEnvironments

프라이빗 DNS 영역 구성

  1. 프라이빗 엔드포인트 IP 주소를 검색합니다. 이를 사용하여 프라이빗 DNS 영역에 DNS 레코드를 추가합니다.

    PRIVATE_ENDPOINT_IP_ADDRESS=$(az network private-endpoint show \
        --name $PRIVATE_ENDPOINT \
        --resource-group $RESOURCE_GROUP \
        --query 'customDnsConfigs[0].ipAddresses[0]' \
        --output tsv)
    
  2. 환경 기본 도메인을 검색합니다. 이를 사용하여 프라이빗 DNS 영역에 DNS 레코드를 추가합니다.

    DNS_RECORD_NAME=$(az containerapp env show \
        --id $ENVIRONMENT_ID \
        --query 'properties.defaultDomain' \
        --output tsv | sed 's/\..*//')
    
  3. 프라이빗 DNS 영역 만들기.

    az network private-dns zone create \
        --resource-group $RESOURCE_GROUP \
        --name $PRIVATE_DNS_ZONE
    
  4. VNet과 프라이빗 DNS 영역 간에 링크를 만듭니다.

    az network private-dns link vnet create \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --name $DNS_LINK \
        --virtual-network $VNET_NAME \
        --registration-enabled false
    
  5. 프라이빗 엔드포인트에 대한 레코드를 프라이빗 DNS 영역에 추가합니다.

    az network private-dns record-set a add-record \
        --resource-group $RESOURCE_GROUP \
        --zone-name $PRIVATE_DNS_ZONE \
        --record-set-name $DNS_RECORD_NAME \
        --ipv4-address $PRIVATE_ENDPOINT_IP_ADDRESS
    

컨테이너 앱 배포

사용자 환경에 컨테이너 앱을 배포합니다. 이 컨테이너 앱은 단순히 빠른 시작 이미지를 사용합니다.

컨테이너 앱 엔드포인트로 이동하면 컨테이너 앱 환경에 공용 액세스가 비활성화되어 있기 때문에 수신됩니다 ERR_CONNECTION_CLOSED . 대신 프라이빗 엔드포인트를 사용하여 컨테이너 앱에 액세스합니다.

az containerapp up \
    --name $CONTAINERAPP_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT_NAME \
    --image mcr.microsoft.com/k8se/quickstart:latest \
    --target-port 80 \
    --ingress external \
    --query properties.configuration.ingress.fqdn

프라이빗 엔드포인트 연결 확인

이 섹션에서는 프라이빗 엔드포인트를 사용하여 정의한 컨테이너 앱에 액세스할 수 있도록 VNet에 연결된 가상 머신을 만듭니다.

VM(가상 머신) 만들기

먼저 Azure Portal에 로그인합니다.

  1. 위쪽 검색 창에서 가상 머신을 검색합니다.

  2. 검색 결과에서 가상 머신을 선택합니다.

  3. 만들기를 실행합니다.

  4. 기본 사항 탭의 가상 머신 만들기 페이지에서 다음 값을 입력합니다.

    설정 작업
    구독 Azure 구독을 선택합니다.
    Resource group my-container-apps를 선택합니다.
    가상 머신 이름 azurevm을 입력합니다.
    지역 미국 중부를 선택합니다.
    가용성 옵션 인프라 중복이 필요하지 않습니다.를 선택합니다.
    보안 유형 표준을 선택합니다.
    이미지 Windows Server 2022 Datacenter: Azure Edition - x64 Gen2를 선택합니다.
    사용자 이름 azureuser를 입력합니다.
    암호 암호를 입력합니다.
    암호 확인 암호를 다시 입력합니다.
    퍼블릭 인바운드 포트 없음을 선택합니다.
  5. 네트워킹 탭에서 다음 값을 입력합니다.

    설정 작업
    가상 네트워크 my-private-endpoint-vnet을 선택합니다.
    서브넷 my-private-endpoint-vnet-subnet(10.0.0.0/23)을 선택합니다.
    공용 IP 없음을 선택합니다.
    NIC 네트워크 보안 그룹 추가 고급을 선택합니다.
  6. 검토 + 생성를 선택합니다.

  7. 만들기를 선택합니다.

환경 변수 설정

다음 환경 변수를 설정합니다.

VM_NAME="azurevm"
VM_ADMIN_USERNAME="azureuser"

VM(가상 머신) 만들기

다음 명령을 실행합니다.

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name $VM_NAME \
    --image Win2022Datacenter \
    --public-ip-address "" \
    --vnet-name $VNET_NAME \
    --subnet $SUBNET_NAME \
    --admin-username $VM_ADMIN_USERNAME

이 명령을 실행하면 VM에 대한 관리자 암호를 묻는 메시지가 표시됩니다.

관리자 사용자 이름은 1자에서 20자 사이여야 합니다.

관리자 암호에는 다음과 같은 요구 사항이 있습니다.

  • 길이는 12자에서 123자 사이여야 합니다.
  • 소문자 1개, 대문자 1개, 숫자 1개, 특수 문자 1개 중 3개여야 합니다.

연결 테스트

  1. 먼저 Azure Portal에 로그인합니다.

  2. 위쪽 검색 창에서 만든 VM을 검색하고 검색 결과에서 선택합니다.

  3. VM에 대한 개요 페이지에서 연결을 선택한 다음 Bastion을 통해 연결을 선택합니다.

  4. Bastion 페이지에서 Bastion 배포를 선택합니다.

  5. 사용자 이름VM 암호를 VM을 만들 때 사용한 사용자 이름 및 암호로 설정합니다.

  6. 연결을 선택합니다.

  7. 연결한 후 VM에서 PowerShell을 실행합니다.

  8. PowerShell에서 다음 명령을 실행합니다. <자리 표시자>를 해당 값으로 바꿉니다.

    nslookup <CONTAINER_APP_ENDPOINT>
    

    출력은 다음 예제와 유사하며 값은 PLACEHOLDERS를 <대체합니다>.

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    <ENVIRONMENT_DEFAULT_DOMAIN>.privatelink.<LOCATION>.azurecontainerapps.io
    
    Address:  10.0.0.4
    Aliases:  <CONTAINER_APP_ENDPOINT>
    
  9. VM에서 브라우저를 엽니다.

  10. 컨테이너 앱 엔드포인트로 찾습니다. 빠른 시작 컨테이너 앱 이미지에 대한 출력이 표시됩니다.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 my-container-apps 리소스 그룹을 제거할 수 있습니다. 이렇게 하면 Azure Container Apps 인스턴스 및 연결된 모든 서비스가 삭제됩니다. 또한 Container Apps 서비스에 의해 자동으로 만들어지고 사용자 지정 네트워크 구성 요소를 포함하는 리소스 그룹도 삭제됩니다.

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 지정된 리소스 그룹에 이 가이드의 범위에 속하지 않는 리소스가 있는 경우에도 해당 리소스가 삭제됩니다.

az group delete --name $RESOURCE_GROUP