다음을 통해 공유


Azure Container Apps에서 규칙 기반 라우팅 사용

이 문서에서는 Azure Container Apps에서 규칙 기반 라우팅을 사용하는 방법을 알아봅니다. 규칙 기반 라우팅을 사용하면 컨테이너 앱 환경에서 FQDN(정규화된 도메인 이름)을 만들 수 있습니다. 그런 다음 각 요청의 경로에 따라 이 FQDN에 대한 요청을 다른 컨테이너 앱으로 라우팅하는 규칙을 사용합니다.

필수 조건

설치 프로그램

  1. 다음 명령을 실행하여 CLI에서 Azure에 로그인합니다.

    az login
    
  2. 최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.

    az upgrade
    

    현재 사용 중인 모듈에 대한 경고를 무시합니다.

  3. 이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.AppMicrosoft.OperationalInsights 네임스페이스를 등록합니다.

    az provider register --namespace Microsoft.App
    
    az provider register --namespace Microsoft.OperationalInsights
    

환경 변수 만들기

다음 환경 변수를 만듭니다.

CONTAINER_APP_1_NAME="my-container-app-1"
CONTAINER_APP_1_IMAGE="mcr.microsoft.com/k8se/quickstart:latest"
CONTAINER_APP_1_TARGET_PORT="80"
CONTAINER_APP_2_NAME="my-container-app-2"
CONTAINER_APP_2_IMAGE="mcr.microsoft.com/dotnet/samples:aspnetapp"
CONTAINER_APP_2_TARGET_PORT="8080"
LOCATION="eastus"
RESOURCE_GROUP="my-container-apps"
ENVIRONMENT_NAME="my-container-apps-env"
ROUTE_CONFIG_NAME="my-route-config"

컨테이너 앱 만들기

  1. 다음 명령을 실행하여 첫 번째 컨테이너 앱을 만듭니다. 이 컨테이너 앱은 Container Apps 빠른 시작 이미지를 사용합니다.

    az containerapp up \
      --name $CONTAINER_APP_1_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --environment $ENVIRONMENT_NAME \
      --image $CONTAINER_APP_1_IMAGE \
      --target-port $CONTAINER_APP_1_TARGET_PORT \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    
  2. 다음 명령을 실행하여 두 번째 컨테이너 앱을 만듭니다. 이 컨테이너 앱은 ASP.NET 빠른 시작 이미지를 사용합니다.

    az containerapp up \
      --name $CONTAINER_APP_2_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --environment $ENVIRONMENT_NAME \
      --image $CONTAINER_APP_2_IMAGE \
      --target-port $CONTAINER_APP_2_TARGET_PORT \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    
  3. HTTP 경로 구성을 만듭니다.

    다음 파일을 만든 후 이를 routing.yml로 저장하십시오.

    rules:
      - description: App 1 rule
        routes:
          - match:
              prefix: /app1
            action:
              prefixRewrite: /
        targets:
          - containerApp: my-container-app-1
      - description: App 2 rule
        routes:
          - match:
              path: /app2
            action:
              prefixRewrite: /
          - match:
              path: /
        targets:
          - containerApp: my-container-app-2
    

    이 구성은 HTTP 트래픽에 대한 두 가지 라우팅 규칙을 정의합니다.

    재산 설명
    description 규칙에 대한 사람이 읽을 수 있는 레이블
    routes.match.prefix 일치시킬 URL 경로 접두사입니다. 예: /api.
    routes.action.prefixRewrite 전달하기 전에 일치하는 접두사를 대체할 항목입니다.
    targets.containerApp 일치하는 경로 요청이 전송되는 컨테이너 앱의 이름입니다.

    이러한 규칙을 사용하면 도메인의 다른 경로가 다른 컨테이너 앱으로 라우팅되는 동시에 대상 앱에 도달하기 전에 요청 경로를 수정할 수 있습니다.

    나열되지 않은 경로에 영향을 줄 수 있는 다른 속성은 다음과 같습니다.

    재산 설명
    route.match.path 정확히 일치하는 경로 정의입니다.
    route.match.pathSeparatedPrefix 모든 텍스트가 아닌 '/' 경계에 있는 경로와 일치합니다. 값을 /product로 설정하면 /product/1에서 일치하지만 /product1에서는 일치하지 않습니다.
    route.match.caseSensitive 경로 패턴이 대/소문자 구분과 일치하는지 여부를 제어합니다.
    target.label 컨테이너 앱 내에서 레이블이 지정된 특정 수정 버전으로 라우팅합니다.
    target.revision 컨테이너 앱 내의 특정 수정 버전으로 라우팅합니다.
  4. 다음 명령을 실행하여 HTTP 경로 구성을 만듭니다.

    az containerapp env http-route-config create \
      --http-route-config-name $ROUTE_CONFIG_NAME \
      --resource-group $RESOURCE_GROUP \
      --name $ENVIRONMENT_NAME \
      --yaml routing.yml \
      --query properties.fqdn
    

    HTTP 경로 구성의 FQDN(정규화된 도메인 이름)은 다음 예제와 같습니다. my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. 두 컨테이너 앱이 이미 있는지 확인합니다.

  2. 다음 Bicep 파일을 만들고 routing.bicep으로 저장합니다.

    resource containerAppsEnvironment 'Microsoft.App/managedEnvironments@2024-10-02-preview' = {
      name: 'my-container-apps-env'
      location: 'eastus'
      tags: {}
      properties: {
        workloadProfiles: [
            {
                workloadProfileType: 'Consumption'
                name: 'Consumption'
            }
        ]
      }
    }
    
    resource httpRouteConfig 'Microsoft.App/managedEnvironments/httpRouteConfigs@2024-10-02-preview' = {
      parent: containerAppsEnvironment
      name: 'my-route-config'
      location: 'eastus'
      properties: {
        rules: [
            {
                description: 'App 1 rule'
                routes: [
                    {
                        match: {
                            prefix: '/app1'
                        }
                        action: {
                            prefixRewrite: '/'
                        }
                    }
                ]
                targets: [
                    {
                        containerApp: 'my-container-app-1'
                    }
                ]
            }
            {
                description: 'App 2 rule'
                routes: [
                    {
                        match: {
                            path: '/app2'
                        }
                        action: {
                            prefixRewrite: '/'
                        }
                    }
                    {
                        match: {
                            path: '/'
                        }
                    }
                ]
                targets: [
                    {
                        containerApp: 'my-container-app-2'
                    }
                ]
            }
        ]
      }
    }
    
    output fqdn string = httpRouteConfig.properties.fqdn
    
  3. 다음 명령을 사용하여 Bicep 파일을 배포합니다.

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. 출력에서 HTTP 경로 구성의 정규화된 도메인 이름(FQDN)을 포함하는 outputs을 찾으십시오. 다음은 그 예입니다.

        "outputs": {
          "fqdn": {
            "type": "String",
            "value": "my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io"
          }
        },
    

HTTP 경로 구성 확인

  1. HTTP 경로 구성 FQDN에 경로 /app1를 사용하여 접속하세요.

    예: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    Container Apps 빠른 시작 이미지가 표시됩니다.

  2. HTTP 경로 구성 FQDN에 경로 /app2를 사용하여 접속하세요.

    예: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    ASP.NET 빠른 시작 이미지가 표시됩니다.

자원을 정리하세요

이 애플리케이션을 계속 사용하지 않으려면 다음 명령을 실행하여 이 빠른 시작에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 이 빠른 시작의 범위를 벗어난 리소스가 지정된 리소스 그룹에 있으면 해당 리소스도 삭제됩니다.

az group delete --name my-container-apps