Communicate between container apps in Azure Container Apps

يوفر Azure Container Apps اكتشاف وتوجيه خدمات مدمجة بحيث يمكن لتطبيقات الحاويات التواصل مع بعضها البعض دون إدارة البنية التحتية. عند نشر عدة تطبيقات حاويات في نفس البيئة، تتولى المنصة حل DNS، وتوازن الأحمال، وتوجيه حركة المرور الآمن تلقائيا.

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

يمكن لتطبيقات الحاويات الوصول إلى بعضها البعض بأي من هذه الطرق:

  • اسم النطاق المؤهل بالكامل (FQDN): النطاق الافتراضي الذي يتم إنشاؤه
  • اسم التطبيق: عنوان قصير http://<APP_NAME> للمكالمات الداخلية
  • استدعاء خدمة DAPR: نهج قائم على العربة الجانبية مع إعادة محاولات مدمجة وقابلية للملاحظة
  • النطاق المخصص: اسم النطاق الخاص بك مع شهادة مدارة

إشعار

عندما تستدعي تطبيق حاوية آخر في نفس البيئة باستخدام FQDN أو اسم التطبيق، لا تغادر حركة مرور الشبكة البيئة أبدا.

لماذا يهم

في بنية الخدمات المصغرة، تحتاج الخدمات إلى الاتصال ببعضها البعض بشكل موثوق. يزيل Azure Container Apps العبء التشغيلي لإعداد اكتشاف الخدمة، وإدارة سجلات DNS، وتكوين البروكسيات العكسية.

إليك ما تتعامل معه المنصة نيابة عنك:

  • التسجيل التلقائي لنظام DNS: كل تطبيق حاوية يحصل على اسم مضيف قابل للحل بمجرد نشره.
  • التوجيه المدار بواسطة الوكيل: تتدفق جميع حركة المرور بين التطبيقات عبر طبقة وكيل مدمجة في Envoy تتولى إنهاء TLS، وتقسيم الحركة، وتوازن الأحمال.
  • عزل بنطاق البيئة: يمكن الوصول إلى نقاط النهاية الداخلية فقط من داخل نفس البيئة، مما يخلق حدودا أمنية طبيعية.
  • مرونة البروتوكول: التواصل عبر HTTP/1.1، HTTP/2 (ل gRPC)، أو TCP الخام حسب احتياجات عبء العمل لديك.

هذه القدرات تعني أنه يمكنك التركيز على منطق التطبيق بدلا من شبكة السباكة.

موقع تطبيق الحاوية (FQDN)

يتكون اسم النطاق المؤهل بالكامل لكل تطبيق حاوية من اسم التطبيق، ومعرف بيئة فريد، والمنطقة. تقع هذه الأجزاء من المجال جميعها تحت النطاق azurecontainerapps.io الأعلى.

Azure Container Apps تطبيق الحاوية مؤهل بالكامل لاسم النطاق.

FQDNs الخارجية والداخلية

إعداد رؤية الدخول يتحكم فيما إذا كان تطبيقك متاحا من خارج البيئة:

الرؤية نمط FQDN يمكن الوصول إليها من
الخارجيه <APP_NAME>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io أي مكان (الإنترنت العام)
Internal <APP_NAME>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io نفس البيئة فقط

عندما تضبط Inress إلى داخلي، يتضمن FQDN مقطعا .internal. . لا تزال تطبيقات الحاويات الأخرى في نفس البيئة قادرة على الوصول إلى التطبيق باستخدام هذا العنوان، لكن الطلبات القادمة من خارج البيئة تتلقى 404 استجابة من وكيل البيئة. يتم حل اسم DNS إلى عنوان IP المشترك للبيئة، لكن الوكيل يرفض الطلب لأن التطبيق داخلي فقط.

احصل على اسم المجال المؤهل بالكامل

يرجع الأمر az containerapp show اسم المجال المؤهل بالكامل لتطبيق الحاوية.

az containerapp show \
  --resource-group <RESOURCE_GROUP_NAME> \
  --name <CONTAINER_APP_NAME> \
  --query properties.configuration.ingress.fqdn

في هذا المثال، استبدل العناصر النائبة المحاطة بـ<> بالقيم الخاصة بك.

تشبه القيمة التي أرجعت من هذا الأمر اسم مجال مثل المثال التالي:

myapp.happyhill-70162bb9.canadacentral.azurecontainerapps.io

FQDNs لعلامة المراجعة

عندما تقوم بتعيين تسميات لتعديلات محددة، تحصل كل تسمية على FQDN فريدة باستخدام فاصل ثلاثي الشرطة:

<APP_NAME>---<LABEL>.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

بالنسبة للتطبيقات الداخلية، يتضمن النمط المقطع:.internal.

<APP_NAME>---<LABEL>.internal.<ENVIRONMENT_UNIQUE_ID>.<REGION>.azurecontainerapps.io

تسمح لك شبكات FQDN الخاصة بالتسمية بإرسال حركة مرور مباشرة إلى نسخة معينة. هذه الممارسة مفيدة لاختبار الإصدارات الجديدة، وإجراء تجارب A/B، أو توفير نقاط نهاية مستقرة لعمليات نشر المراجعة المحددة.

استدعاء تطبيق حاوية بالاسم

أسهل طريقة لاستدعاء تطبيق حاوية آخر من نفس البيئة هي من خلال اسمه. أرسل طلبا إلى http://<CONTAINER_APP_NAME>، ويقوم نظام DNS المدمج في البيئة بحل الاسم تلقائيا.

http://my-backend-api

كيف يعمل دقة DNS

خلف الكواليس، يستخدم Azure Container Apps تكوين DNS مخصص يترجم أسماء تطبيقات الحاويات إلى عناوين قابلة للتوجيه. عندما يطلب تطبيقك اسم تطبيق آخر أو FQDN:

  1. خادم DNS الخاص بالبيئة يحل اسم المضيف إلى عنوان خدمة وكالة Envoy.
  2. يقوم وكيل Envoy بتحديد التطبيق المستهدف من اسم المضيف الأصلي.
  3. يقوم الوكيل بتوجيه الطلب إلى الإصدارات الصحيحة بناء على تكوين حركة المرور لديك.

هذه البنية تعني أن تطبيقات الحاويات لا تتواصل مباشرة مع وحدات بعضها البعض. تمر جميع حركة المرور عبر طبقة الوكيل، التي توفر إنهاء TLS، وتوازن الأحمال، وتقسيم الحركة.

نصيحة

استخدم اسم التطبيق القصير (http://<APP_NAME>) للمكالمات بين تطبيقات الحاويات في نفس البيئة. إنه أبسط من FQDN الكامل ويعمل بنفس الطريقة لأن DNS يحل النمطين عبر نفس الوكيل.

بروتوكولات النقل

تدعم تطبيقات الحاويات ثلاثة أوضاع نقل للدخول، مكوونة من خلال transport الخاصية:

نقل حالة الاستخدام التفاصيل
تلقائي (افتراضي) واجهات برمجة التطبيقات والخدمات القياسية للويب يتفاوض تلقائيا على HTTP/1.1 و HTTP/2
HTTP/2 خدمات gRPC تمكين HTTP/2 من طرف إلى طرف، وهو المطلوب ل gRPC
Tcp بروتوكولات غير HTTP (قواعد بيانات، بروتوكولات مخصصة) اتصالات TCP الخام مع تعيين المنافذ

إشعار

يتطلب إدخال TCP الخارجي VNet مخصص. إذا حاولت إنشاء تطبيق TCP خارجي بدون VNet مخصص، ستتلقى ContainerAppTcpRequiresVnet خطأ. يعمل إدخال TCP الداخلي بدون VNet مخصص.

عند استخدام النقل في TCP، يمكنك أيضا كشف منافذ إضافية خارج منفذ الدخول الرئيسي. كل منفذ إضافي ينشئ نقطة نهاية TCP منفصلة يمكن للتطبيقات الأخرى في البيئة الاتصال بها.

تقسيم حركة المرور وتوجيه المراجعة

يدعم Azure Container Apps ثلاثة أوضاع مراجعة تؤثر على كيفية توزيع حركة المرور بين تطبيقات الحاويات:

وضع السلوك
single جميع الحركة تذهب إلى أحدث نسخة نشطة.
متعدد تنقسم حركة المرور بين التعديلات حسب النسبة المئوية، بناء على قواعد المرور الخاصة بك.
التسميات كل نسخة معنونة تحصل على FQDN فريدة للوصول المباشر.

في الوضع المتعدد ، عندما يستدعي تطبيق حاوية آخر FQDN الخاص بتطبيقك، يقوم الوكيل بتوزيع الطلبات تلقائيا عبر الإصدارات حسب الأوزان التي تم تكوينها. في وضع التسميات ، يمكن للمتصلين استهداف نسخة محددة باستخدام تسميتها FQDN.

لمزيد من المعلومات، راجع المراجعات في Azure Container Apps.

استدعاء خدمة Dapr

يوفر DAPR (وقت تشغيل التطبيقات الموزعة) نهجا يعتمد على العربة الجانبية للتواصل بين التطبيقات. من خلال تفعيل Dapr، تحصل تطبيقات الحاويات الخاصة بك على استدعاء خدمة مدمج مع TLS متبادل، وإعادة الرجوع التلقائي، والتتبع الموزع عبر Azure Application Insights.

مخطط يوضح موقع تطبيق الحاوية Azure Container Apps باستخدام Dapr.

كيف يعمل استدعاء DAPR

كل تطبيق حاوية مدعم ب DAPR يدير عملية جانبية إلى جانب تطبيقك. لاستدعاء تطبيق آخر يدعم DAPR، قم بتقديم طلب HTTP محلي إلى الجانب التابع ل Dapr، الذي يتولى اكتشاف الخدمة والتوجيه:

http://localhost:3500/v1.0/invoke/<DAPR_APP_ID>/method/<METHOD_NAME>

على سبيل المثال، لاستدعاء catalog الطريقة على تطبيق بمعرف تطبيق Dapr هو order-processor:

http://localhost:3500/v1.0/invoke/order-processor/method/catalog

يقوم السائدكار بحل التطبيق المستهدف من خلال نطاق DNS مخصص ويوجه الطلب عبر طبقة الوكيل Envoy. هذه هي نفس البنية التحتية التي تتعامل مع التوجيه القائم على FQDN.

إشعار

يستخدم Dapr مسار حل DNS خاص به (المجال .dapr ) منفصلا عن دقة FQDN القياسية. كلا المسارين يمران عبر بنية الوكلاء التحتية للبيئة.

Dapr App ID

معرف تطبيق Dapr هو الهوية التي تستخدمها التطبيقات الأخرى لاستدعاء خدمتك. إذا لم تقم بتعيين معرف تطبيق صريح، فإن وقت تشغيل Dapr يتحول افتراضيا إلى اسم تطبيق الحاوية الخاص بك. تظهر appId: null واجهة برمجة تطبيقات ARM عندما لا تقوم بتكوين معرف مخصص، لكن وقت التشغيل يطبق اسم التطبيق تلقائيا. قم بتعيين معرف تطبيق مخصص في إعدادات Dapr إذا كنت بحاجة إلى معرف مختلف.

يجب أن تكون معرفات تطبيقات Dapr فريدة داخل البيئة. إذا حاولت نشر تطبيق حاوية بمعرف تطبيق Dapr مستخدم بالفعل من قبل تطبيق آخر، يتم إنشاء مورد تطبيق الحاوية لكن المراجعة تفشل في توفير (provisioningState: Failed). رسالة الخطأ تحدد معرف التطبيق المتضارب والتطبيق الذي يملكه.

تطبيقات Dapr فقط (بدون دخول HTTP)

يمكنك تفعيل Dapr على تطبيق الحاوية دون ضبط HTTP inress. في هذه الحالة، لا يمكن الوصول إلى التطبيق عبر FQDN أو اسم التطبيق، لكن تطبيقات DAPR الأخرى يمكنها استدعائه عبر استدعاء خدمة Dapr. هذا النمط مفيد للعاملين في الخلفية أو معالجي الأحداث الذين يحتاجون فقط لاستقبال المكالمات من خدمات أخرى داخل الشبكة.

نصيحة

عند إنشاء تطبيق ممنوع الدخول باستخدام Azure CLI، احذف كل من علامات --ingress و --target-port. بما في ذلك --target-port بدون --ingress إرجاع خطأ في الاستخدام.

تكوين عربة الجانب Dapr

تقوم بتكوين جهاز Dapr الجانبي من خلال خصائص تطبيق الحاويات الخاص بك. تشمل الإعدادات الرئيسية:

الإعدادات الوصف
appId معرف تطبيق Dapr (يستخدم افتراضيا باسم تطبيق الحاوية)
appPort المنفذ الذي يستمع إليه تطبيقك (يعود إلى منفذ الهدف للدخول)
appProtocol بروتوكول التواصل بين Dapr والتطبيق (على سبيل المثال، http، grpc)
logLevel Dapr sidecar log verbosity
enableApiLogging ما إذا كان يجب تسجيل استدعاءات API في Dapr
httpMaxRequestSize الحد الأقصى لحجم جسم الطلب بالميغابايت لخادم DAPR HTTP
httpReadBufferSize الحد الأقصى لحجم مخزن القراءة في HTTP بوحدة الكيلوبايت

لمزيد من المعلومات حول تكوين Dapr مع Azure Container Apps، راجع Dapr مع Azure Container Apps.

الأمن للتواصل بين التطبيقات

يتضمن Azure Container Apps عدة ميزات أمنية تؤثر على كيفية تواصل تطبيقات الحاويات:

  • TLS افتراضيا: جميع حركة المرور بين تطبيقات الحاويات تمر عبر وكيل Envoy، الذي يتولى إنهاء TLS. قم بتعيينه allowInsecure ( false الافتراضي) لتطبيق إعادة توجيه HTTPS.
  • وضع شهادة العميل (mTLS): تكوين TLS مشترك عن طريق تعيين وضع شهادة العميل على require، accept، أو ignore.
  • قيود IP: حدد قواعد السماح أو الرفض لتقييد عناوين IP التي يمكن الوصول إلى تطبيقك.
  • سياسات CORS: قم بتكوين قواعد مشاركة الموارد عبر المصادر لعملاء ممتصفحين يستدعون تطبيقات الحاويات الخاصة بك.

إشعار

عند استخدام استدعاء خدمة Dapr، تقوم العربات الجانبية تلقائيا بتأمين الاتصال عبر TLS مشترك بين الخدمات. لا تحتاج إلى تكوين mTLS بشكل منفصل لمكالمات Dapr-to-Dapr.

لمزيد من المعلومات، راجع Ingress في Azure Container Apps.

إضافة مجالات مخصصة

يمكنك تعيين أسماء نطاقاتك الخاصة بتطبيق حاوية عن طريق تكوين نطاقات مخصصة في إعدادات الوصول. يمكن لكل نطاق مخصص الإشارة إلى شهادة TLS مدارة أو مرفوعة.

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

لمزيد من المعلومات، راجع النطاقات المخصصة في Azure Container Apps.

محلول نموذجي

عينة توضح كيفية الاتصال بين الحاويات باستخدام كل من FQDN وDAPR متوفرة على Azure Samples.

فهم التواصل بين التطبيقات في Azure Container Apps يرتبط بعدة مواضيع ذات صلة:

  • Environments in Azure Container Apps: الحد المشترك الذي تكتشف فيه تطبيقات الحاويات بعضها البعض وتتواصل معه
  • Ingress في Azure Container Apps: كيفية تكوين نقاط النهاية الخارجية والداخلية، TLS، وقواعد التوجيه
  • ><تكامل DAPR مع Azure Container Apps: تغطية أعمق لمكونات DAPR، وإدارة النشر/الفرع، وإدارة الولاية إلى جانب استدعاء الخدمة
  • الشبكات في Azure Container Apps: تكامل VNet، نقاط النهاية الخاصة، وأمن الشبكة لبيئتك
  • المراجعات في Azure Container Apps : كيف تؤثر أوضاع المراجعة وتقسيم حركة المرور على التوجيه بين التطبيقات

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