Azure Container Apps ile kural tabanlı yönlendirmeyi kullanma

Bu makalede, Azure Container Apps ile kural tabanlı yönlendirmeyi kullanmayı öğreneceksiniz. Kural tabanlı yönlendirme ile kapsayıcı uygulamalar ortamınızda tam etki alanı adı (FQDN) oluşturursunuz. Ardından, bu FQDN isteklerini her isteğin yoluna bağlı olarak farklı kapsayıcı uygulamalarına yönlendirmek için kuralları kullanırsınız.

Önkoşullar

Kurulum

  1. Cli'dan Azure'da oturum açmak için aşağıdaki komutu çalıştırın.

    az login
    
  2. CLI'nın en son sürümünü çalıştırdığınızdan emin olmak için yükseltme komutunu çalıştırın.

    az upgrade
    

    Hâlihazırda kullanılmakta olan modüller hakkında herhangi bir uyarıyı dikkate almayın.

  3. Geçerli uzantı veya modül yüklendikten sonra, Microsoft.App ve Microsoft.OperationalInsights ad alanlarını kaydedin.

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

Ortam değişkenlerini oluşturma

Aşağıdaki ortam değişkenlerini oluşturun.

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"

Kapsayıcı uygulamaları oluşturun

  1. İlk kapsayıcı uygulamanızı oluşturmak için aşağıdaki komutu çalıştırın. Bu kapsayıcı uygulaması Container Apps hızlı başlangıç görüntüsünü kullanır.

    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. İkinci kapsayıcı uygulamanızı oluşturmak için aşağıdaki komutu çalıştırın. Bu kapsayıcı uygulaması ASP.NET hızlı başlangıç görüntüsünü kullanır.

    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 yol yapılandırması oluşturma.

    Aşağıdaki dosyayı oluşturun ve olarak routing.ymlkaydedin.

    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
    

    Bu yapılandırma, HTTP trafiği için iki yönlendirme kuralı tanımlar.

    Uyarı

    Yönlendirme kurallarının sırası önemlidir.

    Daha belirli öneklerin, daha az belirli öneklerden önce gelmesi gerekir.

    Örneğin, ilk kural /api ön eki ile eşleşiyorsa, ikinci kural /api/v1 ön ekini kullansa bile bu kullanılır.

    Mülkiyet Açıklama
    description Kural için insan tarafından okunabilir etiket
    routes.match.prefix Eşleşecek URL yolu ön eki. Örneğin, /api.
    routes.action.prefixRewrite İletmeden önce eşleşen ön ekin yerine ne koyabilirsiniz?
    targets.containerApp Eşleşen yol isteğinin gönderildiği kapsayıcı uygulamasının adı.

    Bu kurallar, etki alanınızdaki farklı yolların farklı kapsayıcı uygulamalarına yönlendirilmesine olanak sağlarken, hedef uygulamaya ulaşmadan önce istek yolunu da değiştirir.

    Yollarınızı etkileyebilecek, listelenmeyen diğer özellikler şunlardır.

    Mülkiyet Açıklama
    route.match.path Tam eşleşme yol tanımı.
    route.match.pathSeparatedPrefix Herhangi bir metin yerine '/' sınırlarındaki yolları eşleştirir. Örneğin, değeri /product olarak ayarlarsanız, /product/1 üzerinde eşleşir, ancak /product1 üzerinde eşleşmez.
    route.match.caseSensitive Yol desenlerinin büyük/küçük harf duyarlılığıyla eşleşip eşleşmediğini denetler.
    target.label Kapsayıcı uygulamasında belirli bir etiketli düzeltmeye yönlendirme.
    target.revision Kapsayıcı uygulamasında belirli bir düzeltmeye yönlendirme.
  4. HTTP yol yapılandırmasını oluşturmak için aşağıdaki komutu çalıştırın.

    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 yol yapılandırmanızın tam nitelikli etki alanı adı (FQDN) şu örneğe benzer: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Her iki kapsayıcı uygulamanın da zaten var olduğundan emin olun.

  2. Aşağıdaki Bicep dosyasını oluşturun ve routing.bicep dosya adı olarak kaydedin.

    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 dosyasını aşağıdaki komutla dağıtın:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. Çıktıda, HTTP yol yapılandırmanızın tam etki alanı adını (FQDN) içeren outputs öğesini bulun. Örneğin:

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

HTTP yol yapılandırmasını doğrulama

  1. HTTP yol yapılandırması FQDN'nize /app1 yolu ile gidin.

    Örneğin: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app1.

    Container Apps hızlı başlangıç görüntüsünü görürsünüz.

  2. HTTP yol yapılandırması FQDN'nize /app2 yolu ile gidin.

    Örneğin: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    ASP.NET hızlı başlangıç görüntüsünü görürsünüz.

Kaynakları temizleme

Bu uygulamayı kullanmaya devam etmeyecekseniz, bu hızlı başlangıçta oluşturulan tüm kaynaklarla birlikte kaynak grubunu silmek için aşağıdaki komutu çalıştırın.

Dikkat

Aşağıdaki komut, belirtilen kaynak grubunu ve içindeki tüm kaynakları siler. Bu hızlı başlangıcın kapsamı dışındaki kaynaklar belirtilen kaynak grubunda varsa, bunlar da silinir.

az group delete --name my-container-apps