Bagikan melalui


Menggunakan perutean berbasis aturan dengan Azure Container Apps

Dalam artikel ini, Anda akan mempelajari cara menggunakan perutean berbasis aturan dengan Azure Container Apps. Dengan perutean berbasis aturan, Anda membuat nama domain yang sepenuhnya memenuhi syarat (FQDN) di lingkungan aplikasi kontainer Anda. Anda kemudian menggunakan aturan untuk merutekan permintaan FQDN ini ke aplikasi kontainer yang berbeda, tergantung pada jalur setiap permintaan.

Prasyarat

Pengaturan

  1. Jalankan perintah berikut sehingga masuk ke Azure dari CLI.

    az login
    
  2. Untuk memastikan Anda menjalankan CLI versi terbaru, jalankan perintah peningkatan.

    az upgrade
    

    Abaikan peringatan apa pun tentang modul yang saat ini digunakan.

  3. Sekarang setelah ekstensi atau modul saat ini diinstal, daftarkan Microsoft.App dan Microsoft.OperationalInsights namespace.

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

Membuat variabel lingkungan

Buat variabel lingkungan berikut.

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"

Membuat aplikasi kontainer

  1. Jalankan perintah berikut untuk membuat aplikasi kontainer pertama Anda. Aplikasi kontainer ini menggunakan gambar quickstart 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. Jalankan perintah berikut untuk membuat aplikasi kontainer kedua Anda. Aplikasi kontainer ini menggunakan gambar mulai cepat 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. Buat konfigurasi rute HTTP.

    Buat file berikut dan simpan sebagai 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
    

    Konfigurasi ini menentukan dua aturan perutean untuk lalu lintas HTTP.

    Nota

    Urutan aturan perutean penting.

    Awalan yang lebih spesifik harus sebelum awalan yang kurang spesifik.

    Misalnya, jika aturan pertama cocok dengan awalan /api, yang akan digunakan bahkan jika aturan kedua menggunakan awalan /api/v1.

    Harta benda Deskripsi
    description Label yang dapat dibaca manusia untuk aturan
    routes.match.prefix Awalan jalur URL untuk dicocokkan. Contohnya, /api.
    routes.action.prefixRewrite Apa yang harus digunakan untuk mengganti awalan yang cocok sebelum diteruskan.
    targets.containerApp Nama aplikasi kontainer tempat permintaan rute yang sesuai dikirim.

    Aturan ini memungkinkan jalur yang berbeda di domain Anda untuk dirutekan ke aplikasi kontainer yang berbeda sambil juga memodifikasi jalur permintaan sebelum mencapai aplikasi tujuan.

    Properti lain yang tidak tercantum yang dapat memengaruhi rute Anda termasuk yang berikut ini.

    Harta benda Deskripsi
    route.match.path Definisi jalur pencocokan yang tepat.
    route.match.pathSeparatedPrefix Mencocokkan rute pada batas '/' daripada teks apa pun. Misalnya, jika Anda mengatur nilai ke /product, maka nilai akan cocok pada /product/1, tetapi tidak /product1.
    route.match.caseSensitive Mengontrol apakah pola rute cocok dengan sensitivitas huruf besar/kecil atau tidak.
    target.label Arahkan ke revisi berlabel tertentu dalam aplikasi kontainer.
    target.revision Arahkan ke revisi tertentu pada aplikasi kontainer.
  4. Jalankan perintah berikut untuk membuat konfigurasi rute 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
    

    Nama domain konfigurasi rute HTTP Anda yang sepenuhnya memenuhi syarat (FQDN) terlihat seperti contoh ini: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io

  1. Pastikan kedua aplikasi kontainer sudah ada.

  2. Buat file Bicep berikut dan simpan sebagai 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. Sebarkan file Bicep dengan perintah berikut:

    az deployment group create `
      --name $ROUTE_CONFIG_NAME `
      --resource-group $RESOURCE_GROUP `
      --template-file routing.bicep
    
  4. Dalam output, temukan outputs, yang berisi nama domain konfigurasi rute HTTP Anda yang sepenuhnya memenuhi syarat (FQDN). Contohnya:

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

Memverifikasi konfigurasi rute HTTP

  1. Akses FQDN konfigurasi rute HTTP Anda dengan menambahkan jalur /app1.

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

    Anda melihat gambar panduan cepat Container Apps.

  2. Akses FQDN konfigurasi rute HTTP Anda dengan menambahkan jalur /app2.

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

    Anda melihat gambar panduan cepat ASP.NET.

Membersihkan sumber daya

Jika Anda tidak akan menggunakan aplikasi ini lagi, jalankan perintah berikut untuk menghapus grup sumber daya beserta semua sumber daya yang dibuat dalam panduan cepat ini.

Perhatian

Perintah berikut menghapus grup sumber daya yang ditentukan dan semua sumber daya yang terkandung di dalamnya. Jika ada sumber daya di luar lingkup panduan cepat ini di dalam grup sumber daya yang ditentukan, sumber daya tersebut juga akan dihapus.

az group delete --name my-container-apps