다음을 통해 공유


Azure Front Door를 사용하여 Azure Container App에 대한 프라이빗 링크 만들기(미리 보기)

이 문서에서는 공용 인터넷 대신 프라이빗 링크를 사용하여 Azure Front Door에서 Azure Container Apps로 직접 연결하는 방법을 알아봅니다. 이 자습서에서는 Azure Container Apps 워크로드 프로필 환경, Azure Front Door를 만들고 프라이빗 링크를 통해 안전하게 연결합니다. 그런 다음 컨테이너 앱과 Azure Front Door 간의 연결을 확인합니다.

필수 조건

  • 활성 구독이 있는 Azure 계정

  • 이 기능은 Azure CLI에서만 사용할 수 있습니다. 최신 버전의 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"
AFD_PROFILE="my-afd-profile"
AFD_ENDPOINT="my-afd-endpoint"
AFD_ORIGIN_GROUP="my-afd-origin-group"
AFD_ORIGIN="my-afd-origin"
AFD_ROUTE="my-afd-route"

Azure 리소스 그룹 만들기

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

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

환경 만들기

  1. 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
    

컨테이너 앱 배포

  1. 다음 명령을 실행하여 사용자 환경에 컨테이너 앱을 배포합니다.

    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
    
  2. 컨테이너 앱 엔드포인트를 검색합니다.

    ACA_ENDPOINT=$(az containerapp show \
        --name $CONTAINERAPP_NAME \
        --resource-group $RESOURCE_GROUP \
        --query properties.configuration.ingress.fqdn \
        --output tsv)
    

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

Azure Front Door 프로필 만들기

AFD 프로필을 만듭니다. 프라이빗 링크는 SKU Standard_AzureFrontDoor를 사용하는 AFD 프로필의 원본에 대해 지원되지 않습니다.

az afd profile create \
    --profile-name $AFD_PROFILE \
    --resource-group $RESOURCE_GROUP \
    --sku Premium_AzureFrontDoor

Azure Front Door 엔드포인트 만들기

AFD 프로필에 엔드포인트를 추가합니다.

az afd endpoint create \
    --resource-group $RESOURCE_GROUP \
    --endpoint-name $AFD_ENDPOINT \
    --profile-name $AFD_PROFILE \
    --enabled-state Enabled

Azure Front Door 원본 그룹 만들기

AFD 원본 그룹을 만듭니다.

az afd origin-group create \
    --resource-group $RESOURCE_GROUP \
    --origin-group-name $AFD_ORIGIN_GROUP \
    --profile-name $AFD_PROFILE \
    --probe-request-type GET \
    --probe-protocol Http \
    --probe-interval-in-seconds 60 \
    --probe-path / \
    --sample-size 4 \
    --successful-samples-required 3 \
    --additional-latency-in-milliseconds 50

Azure Front Door 원본 만들기

원본 그룹에 AFD 원본을 추가합니다.

az afd origin create \
    --resource-group $RESOURCE_GROUP \
    --origin-group-name $AFD_ORIGIN_GROUP \
    --origin-name $AFD_ORIGIN \
    --profile-name $AFD_PROFILE \
    --host-name $ACA_ENDPOINT \
    --origin-host-header $ACA_ENDPOINT \
    --priority 1 \
    --weight 500 \
    --enable-private-link true \
    --private-link-location $LOCATION \
    --private-link-request-message "AFD Private Link Request" \
    --private-link-resource $ENVIRONMENT_ID \
    --private-link-sub-resource-type managedEnvironments

프라이빗 엔드포인트 연결 나열

  1. 다음 명령을 실행하여 환경에 대한 프라이빗 엔드포인트 연결을 나열합니다.

    az network private-endpoint-connection list \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --type Microsoft.App/managedEnvironments
    
  2. 응답에서 프라이빗 엔드포인트 연결 리소스 ID를 기록합니다. 프라이빗 엔드포인트 연결의 값은 properties.privateLinkServiceConnectionState.description .입니다 AFD Private Link Request. 프라이빗 엔드포인트 연결 리소스 ID는 다음과 같습니다.

    /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/managedEnvironments/my-environment/privateEndpointConnections/<PRIVATE_ENDPOINT_CONNECTION_ID>
    

    다음과 같은 프라이빗 엔드포인트 ID와 혼동하지 마세요.

    /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/eafd-Prod-centralus/providers/Microsoft.Network/privateEndpoints/<PRIVATE_ENDPOINT_ID>
    

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

다음 명령을 실행하여 연결을 승인합니다. PLACEHOLDER>를 <이전 섹션에서 기록한 프라이빗 엔드포인트 연결 리소스 ID로 바꿉니다.

az network private-endpoint-connection approve --id <PRIVATE_ENDPOINT_CONNECTION_RESOURCE_ID>

경로 추가

다음 명령을 실행하여 이전에 만든 엔드포인트를 원본 그룹에 매핑합니다.

az afd route create \
    --resource-group $RESOURCE_GROUP \
    --profile-name $AFD_PROFILE \
    --endpoint-name $AFD_ENDPOINT \
    --forwarding-protocol MatchRequest \
    --route-name $AFD_ROUTE \
    --https-redirect Enabled \
    --origin-group $AFD_ORIGIN_GROUP \
    --supported-protocols Http Https \
    --link-to-default-domain Enabled

Azure Front Door에서 컨테이너 앱 액세스

  1. AFD 엔드포인트의 호스트 이름을 검색합니다.

    az afd endpoint show \
        --resource-group $RESOURCE_GROUP \
        --profile-name $AFD_PROFILE \
        --endpoint-name $AFD_ENDPOINT \
        --query hostName \
        --output tsv
    

    호스트 이름은 다음 예제와 같습니다.

    my-afd-endpoint.<HASH>.b01.azurefd.net
    
  2. 호스트 이름으로 찾습니다. 빠른 시작 컨테이너 앱 이미지에 대한 출력이 표시됩니다.

    AFD 프로필을 전역적으로 배포하는 데 몇 분 정도 걸리므로 처음에는 예상 출력이 표시되지 않으면 몇 분 정도 기다린 다음 새로 고칩니다.

리소스 정리

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

주의

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

az group delete --name $RESOURCE_GROUP