استخدام التوجيه القائم على القواعد مع Azure Container Apps

في هذه المقالة، ستتعلم كيفية استخدام التوجيه المستند إلى القواعد مع Azure Container Apps. باستخدام التوجيه المستند إلى القواعد، يمكنك إنشاء اسم مجال مؤهل بالكامل (FQDN) على بيئة تطبيقات الحاوية. ثم يمكنك استخدام القواعد لتوجيه طلبات FQDN هذه إلى تطبيقات حاوية مختلفة، اعتمادا على مسار كل طلب.

نموذج التوجيه والتفويض

تعمل إعدادات مسارات HTTP (httpRouteConfigs) على مستوى بيئة تطبيقات الحاويات. يمكن للمسار استهداف أي تطبيق حاوية في نفس البيئة، بغض النظر عن إعداد الدخول الفردي للتطبيق المستهدف. نظرا لأن FQDN الخاص بالمسار منشور ضمن نطاق البيئة، يمكن للمسار توفير نقطة دخول عامة ترسل الطلبات إلى تطبيق حاوية يستخدم الدخول الداخلي (external: false). يتيح هذا السلوك تكوين عدة تطبيقات تحت مضيف واحد.

تحدد صلاحيات تكوينات مسارات HTTP ضمن البيئة المدارة بدلا من تطبيقات الحاويات الفردية. إنشاء أو تحديث أو حذف مسار يتطلب Microsoft.App/managedEnvironments/httpRouteConfigs/write إذنا من البيئة. لا حاجة لإذن إضافي على تطبيق الحاوية المستهدفة. هذا السلوك يتوافق مع كون البيئة حدود ثقة مشتركة، حيث تنتمي جميع تطبيقات الحاويات في البيئة إلى نفس العميل. أي مدير له دور محدد ضمن نطاق البيئة يتضمن httpRouteConfigs/write إذنا، مثل المساهم على البيئة، يمكنه إنشاء مسارات تستهدف أي تطبيق حاوية في تلك البيئة.

مهم

يمكن لتكوين مسار HTTP كشف تطبيق حاوية يستخدم الإدخال الداخلي (external: false) إذا قمت بتكوين التطبيق كهدف مسار. يتحكم الإعداد external: false في ظهور صفحة FQDN الخاصة بالتطبيق. باستخدام هذا التكوين، لا تمنع البيئة التطبيق من استقبال حركة المرور عبر مسار على مستوى البيئة. للحفاظ على تطبيق الحاوية غير قابل للوصول من خارج البيئة، لا تشير إليه كهدف في أي تكوين مسار HTTP. بدلا من ذلك، ضع التطبيق في بيئة منفصلة لا تحتوي على مسارات عامة، أو استخدم ضوابط على مستوى الشبكة لتقييد حركة المرور الواردة.

المتطلبات الأساسية

الإعداد

  1. قم بتشغيل الأمر التالي حتى تسجيل الدخول إلى Azure من CLI.

    az login
    
  2. للتأكد من تشغيل أحدث إصدار من CLI، قم بتشغيل أمر الترقية.

    az upgrade
    

    تجاهل أي تحذيرات حول الوحدات النمطية المستخدمة حاليا.

  3. الآن بعد تثبيت الملحق أو الوحدة النمطية Microsoft.App الحالية، قم بتسجيل مساحات الأسماء و Microsoft.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. قم بتشغيل الأمر التالي لإنشاء تطبيق الحاوية الأول. يستخدم تطبيق الحاوية هذا صورة التشغيل السريع لتطبيقات الحاوية.

    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.

    إشعار

    ترتيب قواعد التوجيه مهم.

    يجب أن تكون البادئات الأكثر تحديدا قبل بادئات أقل تحديدا.

    على سبيل المثال، إذا كانت القاعدة الأولى تطابق بادئة /api، استخدام ذلك حتى لو استخدمت القاعدة الثانية بادئة /api/v1.

    الخاصية الوصف
    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. في الإخراج، ابحث عن outputs، الذي يحتوي على اسم المجال المؤهل بالكامل لتكوين مسار HTTP (FQDN). على سبيل المثال:

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

    ترى صورة التشغيل السريع لتطبيقات الحاوية.

  2. استعرض للوصول إلى تكوين مسار HTTP FQDN باستخدام المسار /app2.

    على سبيل المثال: my-route-config.ambitiouspebble-11ba6155.eastus.azurecontainerapps.io/app2.

    ترى صورة التشغيل السريع ASP.NET.

تنظيف الموارد

في حال عدم استمرارك في استخدام هذا التطبيق، فقم بتشغيل الأمر التالي لحذف مجموعة الموارد مع جميع الموارد التي تم إنشاؤها في هذا التشغيل السريع.

تنبيه

يحذف الأمر التالي مجموعة الموارد المحددة وجميع الموارد المضمنة فيها. إذا كانت الموارد خارج نطاق هذا التشغيل السريع موجودة في مجموعة الموارد المحددة، حذفها أيضا.

az group delete --name my-container-apps