عرض التطبيقات على الإنترنت باستخدام إنهاء TLS في Application Gateway

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تشرح هذه المقالة كيفية عرض التطبيقات على الإنترنت باستخدام Application Gateway.

عند نشر مثيل خدمة Azure Spring Apps في شبكتك الظاهرية (VNET)، لا يمكن الوصول إلى التطبيقات الموجودة على مثيل الخدمة إلا في الشبكة الخاصة. لتسهيل الوصول إلى التطبيقات على الإنترنت، تحتاج إلى التكامل مع Azure Application Gateway. يمكن فك تشفير حركة البيانات المشفرة الواردة في بوابة التطبيق أو يمكن تمريرها إلى Azure Spring Apps مشفرةً لتحقيق TLS/SSL من طرف إلى طرف. لأغراض التطوير والاختبار، يمكنك البدء بإنهاء SSL في بوابة التطبيق، والتي يغطيها هذا الدليل. بالنسبة للإنتاج، نوصي باستخدام TLS/SSL من طرف إلى طرف مع شهادة خاصة، كما هو موضح في عرض التطبيقات مع TLS من طرف إلى طرف في شبكة ظاهرية.

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

تكوين Application Gateway لتطبيقات Azure Spring Apps

نوصي بأن يكون اسم المجال، كما يراه المتصفح، هو نفس اسم المضيف الذي تستخدمه Application Gateway لتوجيه نسبة استخدام الشبكة إلى الواجهة الخلفية من Azure Spring Apps. توفر هذه التوصية أفضل تجربة عند استخدام Application Gateway لعرض التطبيقات المستضافة في Azure Spring Apps والموجودة في شبكة ظاهرية. إذا كان المجال الذي تعرضه Application Gateway مختلفاً عن المجال المقبول لدى Azure Spring Apps، يمكن تعطيل ملفات تعريف الارتباط وعناوين URL لإعادة التوجيه التي تم إنشاؤها (على سبيل المثال). لمزيد من المعلومات، راجع الاحتفاظ باسم المضيف.

لتكوين Application Gateway أمام Azure Spring Apps في شبكة ظاهرية خاصة، اتبع الخطوات التالية.

  1. اتبع الإرشادات الواردة في نشر تطبيقات Azure Spring في شبكة ظاهرية.
  2. اتبع الإرشادات الواردة في الوصول إلى تطبيقك في شبكة خاصة.
  3. احصل على شهادة للمجال الذي تختاره، وقم بتخزينها في Key Vault. لمزيد من المعلومات، راجع البرنامج التعليمي: استيراد شهادة في Azure Key Vault.
  4. قم بتكوين مجال مخصص وشهادة مقابلة من Key Vault على تطبيق تم توزيعه في Azure Spring Apps. لمزيد من المعلومات، راجع البرنامج التعليمي: تعيين مجال مخصص موجود إلى Azure Spring Apps.
  5. انشر Application Gateway في شبكة ظاهرية تم تكوينها وفقا للقائمة التالية:
    • استخدم Azure Spring Apps في مجموعة الواجهة الخلفية، المشار إليها بواسطة المجال اللاحق بـ private.azuremicroservices.io.
    • قم بتضمين وحدة استماع HTTPS باستخدام نفس الشهادة من Key Vault.
    • قم بتكوين الشبكة الظاهرية باستخدام إعدادات HTTP التي تستخدم اسم المجال المخصص الذي تم تكوينه في Azure Spring Apps بدلاً من المجال الملحوق بـ private.azuremicroservices.io.
  6. قم بتكوين DNS العام خاصتك للإشارة إلى بوابة التطبيق.

تحديد المتغيرات

بعد ذلك، استخدم الأوامر التالية لتحديد المتغيرات لمجموعة الموارد والشبكة الظاهرية التي أنشأتها وفقاً للتوجيهات الواردة في توزيع Azure Spring Apps في شبكة ظاهرية. استبدل العناصر النائبة <...> بقيم حقيقية استنادًا إلى منظومتك الفعلية. عند تعريف SPRING_APP_PRIVATE_FQDN، قم بإزالة https:// من عنوان URI.

export SUBSCRIPTION='<subscription-id>'
export RESOURCE_GROUP='<resource-group-name>'
export LOCATION='eastus'
export SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-instance>'
export APPNAME='<name-of-app-in-Azure-Spring-Apps>'
export SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
export VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
export APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
export APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'

تسجيل الدخول إلى Azure

استخدم الأمر التالي لتسجيل الدخول إلى Azure CLI واختر اشتراكك النشط.

az login
az account set --subscription $SUBSCRIPTION

قم بتكوين اسم المجال العام على Azure Spring Apps

ستتدفق حركة البيانات إلى التطبيق الذي تم نشره على Azure Spring Apps باستخدام اسم المجال العام. لتكوين تطبيقك للاستماع إلى اسم المضيف هذا عبر HTTP، استخدم الأوامر التالية لإضافة مجال مخصص إلى تطبيقك، واستبدال العناصر النائبة <...> بقيم حقيقية:

export KV_NAME='<name-of-key-vault>'
export KV_RG='<resource-group-name-of-key-vault>'
export CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
export DOMAIN_NAME=myapp.mydomain.com

az spring app custom-domain bind \
    --resource-group $RESOURCE_GROUP \
    --service $SPRING_CLOUD_NAME \
    --domain-name $DOMAIN_NAME \
    --app $APPNAME

إنشاء موارد الشبكة

ستنضم بوابة التطبيق التي سيتم إنشاؤها إلى نفس الشبكة الظاهرية المستضيفة لمثيل خدمة Azure Spring Apps. أولًا، قم بإنشاء شبكة فرعية جديدة لبوابة التطبيق في الشبكة الظاهرية، ثم قم بإنشاء عنوان IP عام كواجهة أمامية لبوابة التطبيق، على النحو الموضح في المثال التالي.

export APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
az network vnet subnet create \
    --name $APPLICATION_GATEWAY_SUBNET_NAME \
    --resource-group $RESOURCE_GROUP \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --allocation-method Static \
    --sku Standard

قم بإنشاء هوية مدارة لبوابة التطبيق

يجب أن تكون بوابة التطبيق لديك قادرة على الوصول إلى Key Vault لقراءة الشهادة. للقيام بذلك، ستستخدم بوابة التطبيق هوية مُدارة يعينها المستخدم. لمزيد من المعلومات، راجع ما هي الهويات المدارة لموارد Azure؟ إنشاء الهوية المدارة باستخدام الأمر التالي، واستبدال <العنصر النائب ...> :

export APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
az identity create \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME

ثم استخدم الأمر التالي لجلب objectId للهوية المدارة. سيتم استخدام هذه القيمة لاحقًا لمنح حقوق الوصول إلى الشهادة في Key Vault.

export APPGW_IDENTITY_CLIENTID=$(az identity show \
    --resource-group $RESOURCE_GROUP \
    --name $APPGW_IDENTITY_NAME \
    --query clientId \
    --output tsv)
export APPGW_IDENTITY_OID=$(az ad sp show \
    --id $APPGW_IDENTITY_CLIENTID \
    --query objectId \
    --output tsv)

قم بتعيين النهج على Key Vault

قم بتكوين Key Vault باستخدام الأمر التالي بحيث يُسمح للهوية المُدارة لبوابة التطبيق بالوصول إلى الشهادة المُخزنة في Key Vault:

az keyvault set-policy \
    --resource-group $KV_RG \
    --name $KV_NAME \
    --object-id $APPGW_IDENTITY_OID \
    --secret-permissions get list \
    --certificate-permissions get list

إنشاء بوابة تطبيق

قم بإنشاء بوابة تطبيق باستخدام az network application-gateway create، وحدد اسم المجال المؤهل بالكامل الخاص بالتطبيق (FQDN) كخوادم في تجمع الواجهة الخلفية. تأكد من استخدام الهوية المُدارة التي عيّنها المستخدم والإشارة إلى الشهادة في Key Vault باستخدام المعرف السري للشهادة.

export APPGW_NAME='<name-for-application-gateway>'
export CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
export KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show \
    --name $CERT_NAME_IN_KV \
    --vault-name $KV_NAME \
    --query sid \
    --output tsv)

az network application-gateway create \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --capacity 2 \
    --sku Standard_v2 \
    --frontend-port 443 \
    --http-settings-cookie-based-affinity Disabled \
    --http-settings-port 80 \
    --http-settings-protocol Http \
    --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --vnet-name $VIRTUAL_NETWORK_NAME \
    --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
    --servers $SPRING_APP_PRIVATE_FQDN \
    --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
    --identity $APPGW_IDENTITY_NAME

قد يستغرق Azure ما يصل إلى 30 دقيقة لإنشاء بوابة التطبيق.

حدِّث إعدادات HTTP لاستخدام اسم المجال مقابل الخلفية

حدِّث إعدادات HTTP لاستخدام اسم المجال العام كاسم مضيف بدلاً من المجال المتبوع بـ .private.azuremicroservices.io لإرسال حركة البيانات إلى Azure Spring Apps باستخدامه.

az network application-gateway http-settings update \
    --resource-group $RESOURCE_GROUP \
    --gateway-name $APPGW_NAME \
    --host-name-from-backend-pool false \
    --host-name $DOMAIN_NAME \
    --name appGatewayBackendHttpSettings

تحقق من نشر بوابة التطبيق

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

az network application-gateway show-backend-health \
    --name $APPGW_NAME \
    --resource-group $RESOURCE_GROUP

يشير الإخراج إلى الحالة الصحية لمجموعة الواجهة الخلفية، كما هو موضح في المثال التالي:

{
  "backendAddressPools": [
    {
      "backendHttpSettingsCollection": [
        {
          "servers": [
            {
              "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
              "health": "Healthy",
              "healthProbeLog": "Success. Received 200 status code",
              "ipConfiguration": null
            }
          ]
        }
      ]
    }
  ]
}

قم بتكوين DNS والوصول إلى التطبيق

قم بتكوين DNS العام للإشارة إلى بوابة التطبيق باستخدام CNAME أو سجل A. يمكنك العثور على العنوان العام لبوابة التطبيق باستخدام الأمر التالي:

az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
    --query [ipAddress] \
    --output tsv

يمكنك الآن الوصول إلى التطبيق باستخدام اسم المجال العام.

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

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

az group delete --name $RESOURCE_GROUP

الخطوات التالية