قم بإعداد وتكوين وكيل عكسي في Azure Service Fabric

الوكيل العكسي هو خدمة اختيارية لـAzure Service Fabric تساعد الخدمات المصغرة التي تعمل في نظام مجموعة Service Fabric على اكتشاف الخدمات الأخرى التي تحتوي على نقاط نهاية HTTP* والتواصل معها. لمعرفة المزيد، راجع Reverse proxy in Azure Service Fabric. يوضح لك هذا المقال كيفية إعداد وتكوين وكيل عكسي في نظام المجموعة الخاص بك.

تمكين الوكيل العكسي باستخدام مدخل Microsoft Azure

يوفر مدخل Microsoft Azure خياراً لتمكين الوكيل العكسي عند إنشاء نظام مجموعة Service Fabric جديدة. لا يمكنك ترقية نظام مجموعة موجود لاستخدام وكيل عكسي من خلال المدخل.

لتكوين وكيل عكسي عند إنشاء مجموعة باستخدام مدخل Microsoft Azure، تأكد من القيام بما يلي:

  1. في Step 2: Cluster Configuration، ضمن Step 2: Cluster Configuration، حدد Enable reverse proxy.

    تمكين الوكيل العكسي على المدخل

  2. لتكوين وكيل عكسي آمن (بشكل اختياري)، تحتاج إلى تكوين شهادة TLS/SSL. في Step 3: Security، في Configure cluster security settings، ضمن Configuration type، حدد Custom. بعد ذلك، ضمن Reverse Proxy SSL certificate، حدد Include a SSL certificate for reverse proxy وأدخل تفاصيل شهادتك.

    تكوين وكيل عكسي آمن على المدخل

    إذا اخترت عدم تكوين الوكيل العكسي بشهادة عند إنشاء نظام مجموعة، يمكنك القيام بذلك لاحقاً من خلال قالب Resource Manager لمجموعة موارد نظام مجموعة. لمعرفة المزيد، راجع Enable reverse proxy via Azure Resource Manager templates.

تمكين الوكيل العكسي عبر قوالب Azure Resource Manager

بالنسبة لنظام مجموعة على Azure، يمكنك استخدام قالب Azure Resource Manager لتمكين الوكيل العكسي في Service Fabric. يمكنك تمكين الوكيل العكسي عند إنشاء نظام مجموعة أو تمكينها عن طريق تحديث نظام مجموعة في وقت لاحق.

بالنسبة إلى نظام مجموعة جديد، يمكنك إنشاء قالب Resource Manager مخصص أو يمكنك استخدام نموذج قالب.

يمكنك العثور على نماذج لقوالب Resource Manager التي يمكن أن تساعدك في تكوين وكيل عكسي آمن لنظام مجموعة Azure في قوالب نماذج وكيل عكسي آمنة على GitHub. ارجع إلى تكوين HTTPS Reverse Proxy * في مجموعة آمنة في ملف README للحصول على الإرشادات والقوالب التي يجب استخدامها لتكوين وكيل عكسي آمن باستخدام شهادة وللتعامل مع تمرير فوق الشهادة.

بالنسبة لنظام المجموعة الموجودة، يمكنك تصدير قالب Resource Manager لمجموعة موارد نظام مجموعة باستخدام مدخل Microsoft Azure أو PowerShell أو Azure CLI*.

بعد أن يكون لديك قالب Resource Manager، يمكنك تمكين الوكيل العكسي من خلال الخطوات التالية:

  1. حدد منفذاً للوكيل العكسي في قسم المعلمات بالقالب.

    "SFReverseProxyPort": {
        "type": "int",
        "defaultValue": 19081,
        "metadata": {
            "description": "Endpoint for Service Fabric Reverse proxy"
        }
    },
    
  2. حدد المنفذ لكل كائن من كائنات nodetype في قسم نوع المورد Microsoft.ServiceFabric/clusters.

    يتم تحديد المنفذ بواسطة اسم المعلمة، reverseProxyEndpointPort.

    {
        "apiVersion": "2021-06-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        ...
       "nodeTypes": [
          {
           ...
           "reverseProxyEndpointPort": "[parameters('SFReverseProxyPort')]",
           ...
          },
        ...
        ],
        ...
    }
    
  3. لتكوين شهادات TLS/SSL على المنفذ للوكيل العكسي، أضف الشهادة إلى كائن reverseProxyCertificate في قالب مورد Microsoft.ServiceFabric/clusters.

    {
        "apiVersion": "2021-06-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
        ],
        "properties": {
            ...
            "reverseProxyCertificate": {
                "thumbprint": "[parameters('sfReverseProxyCertificateThumbprint')]",
                "x509StoreName": "[parameters('sfReverseProxyCertificateStoreName')]"
            },
            ...
            "clusterState": "Default",
        }
    }
    

    يمكنك أيضاً تحديد اسم شائع لشهادات الوكيل العكسي باستخدام عنصر reverseProxyCertificateCommonNames في قالب مورد نظام المجموعة.

دعم شهادة وكيل عكسي تختلف عن شهادة نظام المجموعة

إذا كانت شهادة الوكيل العكسي مختلفة عن الشهادة التي تؤمن نظام مجموعة، يجب تثبيت الشهادة المحددة مسبقاً على الجهاز الظاهري وإضافتها إلى قائمة التحكم في الوصول (ACL) بحيث يمكن لـService Fabric الوصول إليها. يمكن القيام بذلك في قسم نوع المورد Microsoft.Compute/virtualMachineScaleSets. للتثبيت، أضف الشهادة إلى osProfile. يمكن لقسم الملحق الخاص بالقالب تحديث الشهادة في قائمة التحكم بالوصول (ACL).

{
  "apiVersion": "[variables('vmssApiVersion')]",
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  ....
    "osProfile": {
        "adminPassword": "[parameters('adminPassword')]",
        "adminUsername": "[parameters('adminUsername')]",
        "computernamePrefix": "[parameters('vmNodeType0Name')]",
        "secrets": [
          {
            "sourceVault": {
              "id": "[parameters('sfReverseProxySourceVaultValue')]"
            },
            "vaultCertificates": [
              {
                "certificateStore": "[parameters('sfReverseProxyCertificateStoreValue')]",
                "certificateUrl": "[parameters('sfReverseProxyCertificateUrlValue')]"
              }
            ]
          }
        ]
      }
 ....
 "extensions": [
        {
            "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]",
            "properties": {
                    "type": "ServiceFabricNode",
                    "autoUpgradeMinorVersion": false,
                    ...
                    "publisher": "Microsoft.Azure.ServiceFabric",
                    "settings": {
                      "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
                      "nodeTypeRef": "[parameters('vmNodeType0Name')]",
                      "dataPath": "D:\\\\SvcFab",
                      "durabilityLevel": "Bronze",
                      "testExtension": true,
                      "reverseProxyCertificate": {
                        "thumbprint": "[parameters('sfReverseProxyCertificateThumbprint')]",
                        "x509StoreName": "[parameters('sfReverseProxyCertificateStoreValue')]"
                      },
                },
                "typeHandlerVersion": "1.0"
            }
        },
    ]
  }

إشعار

عند استخدام شهادات مختلفة عن شهادة نظام مجموعة لتمكين الوكيل العكسي على نظام مجموعة موجودة، قم بتثبيت شهادة الوكيل العكسي وتحديث قائمة التحكم بالوصول (ACL) على نظام مجموعة قبل تمكين الوكيل العكسي. أكمل نشر قالب Azure Resource Manager باستخدام الإعدادات المذكورة مسبقاً قبل بدء النشر لتمكين الوكيل العكسي في الخطوات من 1 إلى 3.

تمكين الوكيل العكسي في نظم مجموعات مستقلة

بالنسبة لنظم المجموعات المستقلة، يمكنك تمكين الوكيل العكسي في ملف ClusterConfig.json. يمكنك تمكين الوكيل العكسي عند إنشاء نظام المجموعة أو عن طريق ترقية التكوين لنظام مجموعة موجودة. لمعرفة المزيد عن الإعدادات المتوفرة في ملفات ClusterConfig.json، راجع Standalone cluster settings.

توضح لك الخطوات التالية الإعدادات التي يجب استخدامها لتمكين الوكيل العكسي، واختيارياً، لتأمين الوكيل العكسي بشهادة X.509.

  1. لتمكين الوكيل العكسي، قم بتعيين قيمة reverseProxyEndpointPort لنوع العقدة ضمن properties في تكوين نظام مجموعة. يوضح JSON التالي تعيين منفذ نقطة نهاية الخادم الوكيل العكسي على 19081 للعقد من نوع "NodeType0":

        "properties": {
           ... 
            "nodeTypes": [
                {
                    "name": "NodeType0",
                    ...
                    "reverseProxyEndpointPort": "19081",
                    ...
                }
            ],
           ...
        }
    
  2. للحصول على وكيل عكسي آمن (بشكل اختياري)، قم بتكوين شهادة في قسم security ضمن properties.

    • بالنسبة لبيئة التطوير أو الاختبار، يمكنك استخدام إعداد ReverseProxyCertificate:

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificate": {
                           "Thumbprint": "[Thumbprint]",
                           "ThumbprintSecondary": "[Thumbprint]",
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      
    • بالنسبة لبيئة التشغيل، يُوصى بإعداد ReverseProxyCertificateCommonNames:

           "properties": {
               ...
               "security": {
                   ...
                   "CertificateInformation": {
                       ...
                       "ReverseProxyCertificateCommonNames": {
                         "CommonNames": [
                             {
                               "CertificateCommonName": "[CertificateCommonName]"
                             }
                           ],
                           "X509StoreName": "My"
                       },
                       ...
                   }
               },
               ...
           }
      

    لمعرفة المزيد عن تكوين وإدارة الشهادات لنظام مجموعة مستقلة، بالإضافة إلى مزيد من التفاصيل عن تكوين الشهادات المستخدمة لأمان الوكيل العكسي، راجع X509 certificate-based security.

بعد تعديل ملف ClusterConfig.json لتمكين الوكيل العكسي، اتبع الإرشادات الموجودة في ترقية تكوين المجموعة لدفع التغييرات إلى نظام المجموعة الخاصة بك.

كشف وكيل عكسي على منفذ عام من خلال Azure Load Balancer

لمعالجة الوكيل العكسي من خارج نظام مجموعة zure، قم بإعداد قواعد Azure Load Balancer وAzure Health Probe لمنفذ الوكيل العكسي. يمكن تنفيذ هذه الخطوات باستخدام مدخل Microsoft Azure أو قالب Azure Resource Manager في أي وقت بعد إنشاء نظام المجموعة.

تحذير

عند تكوين منفذ الوكيل العكسي في موازن التحميل، فإن جميع الخدمات المصغرة في نظام المجموعة التي تعرض نقطة نهاية HTTP قابلة للتوجيه من خارج نظام المجموعة. هذا يعني أن الخدمات المصغرة التي من المفترض أن تكون داخلية قد تكون قابلة للاكتشاف من قبل مستخدم متطفل محدد. من المحتمل أن يمثل هذا نقاط ضعف خطيرة يمكن استغلالها؛ على سبيل المثال:

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

تأكد من أنك تفهم تماماً العواقب الأمنية المحتملة نظام المجموعة الخاص بك والتطبيقات التي تشغل عليها وتعمل على تخفيفها، قبل أن تجعل منفذ الوكيل العكسي عاماً.

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

كشف الوكيل العكسي باستخدام مدخل Microsoft Azure

  1. في مدخل Microsoft Azure، انقر فوق مجموعة الموارد الخاصة بنظام مجموعة، ثم انقر فوق موازن التحميل لنظام المجموعة الخاص بك.

  2. لإضافة مجموعة فحص الصحة لمنفذ الوكيل العكسي، في الجزء الأيمن من نافذة موازن التحميل، ضمن SETTINGS، انقر فوق Health probes. ثم انقر فوق Add في الجزء العلوي من نافذة Health probes وأدخل التفاصيل الخاصة بمنفذ الوكيل العكسي، ثم انقر فوق OK. بشكل افتراضي، يكون منفذ الوكيل العكسي هو 19081، إلا إذا قمت بتغييره عند إنشاء نظام المجموعة.

    تكوين فحص صحة الوكيل العكسي

  3. لإضافة قاعدة موازن تحميل لعرض منفذ الوكيل العكسي، في الجزء الأيمن من نافذة موازن التحميل، ضمن SETTINGS، انقر فوق Load balancing rules. ثم انقر فوق Add أعلى نافذة قواعد موازنة التحميل وأدخل تفاصيل منفذ الوكيل العكسي. تأكد من تعيين قيمة Port على المنفذ الذي تريد عرض الوكيل العكسي عليه، وقيمة Backend port على المنفذ الذي قمت بتعيينه عند تمكين الوكيل العكسي، وقيمة Health probe على قيمة فحص الصحة الذي قم بتكوينه في الخطوة السابقة. عيّن الحقول الأخرى بالشكل المناسب وانقر فوق OK.

    تكوين قاعدة موازن التحميل للوكيل العكسي

كشف الوكيل العكسي عبر قوالب Azure Resource Manager

تشير صيغة JSON التالية إلى نفس القالب المستخدم في تمكين الوكيل العكسي عبر قوالب Azure Resource Manager. راجع هذا القسم من المستند للحصول على معلومات عن كيفية إنشاء قالب Azure Resource Manager أو تصدير قالب لنظام مجموعة موجود. يتم إجراء التغييرات على قسم نوع مورد Microsoft.Network/loadBalancers.

{
    "apiVersion": "[variables('lbApiVersion')]",
    "type": "Microsoft.Network/loadBalancers",
    ...
    ...
    "loadBalancingRules": [
        ...
        {
            "name": "LBSFReverseProxyRule",
            "properties": {
                "backendAddressPool": {
                    "id": "[variables('lbPoolID0')]"
                },
                "backendPort": "[parameters('SFReverseProxyPort')]",
                "enableFloatingIP": "false",
                "frontendIPConfiguration": {
                    "id": "[variables('lbIPConfig0')]"
                },
                "frontendPort": "[parameters('SFReverseProxyPort')]",
                "idleTimeoutInMinutes": "5",
                "probe": {
                    "id": "[concat(variables('lbID0'),'/probes/SFReverseProxyProbe')]"
                },
                "protocol": "tcp"
            }
        }
    ],
    "probes": [
        ...
        {
            "name": "SFReverseProxyProbe",
            "properties": {
                "intervalInSeconds": 5,
                "numberOfProbes": 2,
                "port":     "[parameters('SFReverseProxyPort')]",
                "protocol": "tcp"
            }
        }  
    ]
}

تخصيص سلوك الوكيل العكسي باستخدام إعدادات fabric

يمكنك تخصيص سلوك الوكيل العكسي من خلال إعدادات fabric في قالبAzure Resource Manager لنظام المجموعة المستضافة في Azure أو في ملف ClusterConfig.json لنظام المجموعة المستقلة. توجد الإعدادات التي تتحكم في سلوك الخادم الوكيل العكسي في قسم ApplicationGateway / Http في قسم fabricSettings ضمن قسم properties لنظام مجموعة.

على سبيل المثال، يمكنك تعيين قيمة DefaultHttpRequestTimeout لتعيين مهلة الطلبات إلى الوكيل العكسي على 180 ثانية كما في JSON التالي:

{
"fabricSettings": [
          ...
          {
            "name": "ApplicationGateway/Http",
            "parameters": [
              {
                "name": "DefaultHttpRequestTimeout",
                "value": "180"
              }
            ]
          }
        ],
        ...
}

إشعار

يبلغ الحد الأقصى للوكيل العكسي 16 كيلوبايت للعناوين ولا يدعم تغيير الحد إلى حجم أكبر.

لمزيد من المعلومات عن تحديث إعدادات fabric لنظم مجموعات Azure، راجع Customize cluster settings using Resource Manager templates. بالنسبة إلى نظم المجموعات المستقلة، راجع Customize cluster settings for standalone clusters.

يتم استخدام العديد من إعدادات fabric للمساعدة في إنشاء اتصال آمن بين الوكيل العكسي والخدمات. للحصول على معلومات مفصلة عن هذه الإعدادات، راجع Connect to a secure service with the reverse proxy.

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