أنماط شبكات Service Fabric

يمكنك دمج نظام مجموعة Azure Service Fabric مع ميزات شبكات Azure الأخرى. في هذه المقالة، نعرض لك كيفية إنشاء أنظمة مجموعات تستخدم الميزات التالية:

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

السماح لموفر موارد Service Fabric بالاستعلام عن نظام المجموعة

ينفرد Service Fabric عن ميزات الشبكات الأخرى في جانب واحد. يستخدم مدخل Microsoft Azure موفر موارد Service Fabric داخلياً للاتصال بنظام مجموعة للحصول على معلومات عن العُقد والتطبيقات. يتطلب موفر موارد Service Fabric الوصول الوارد المتاح علناً إلى منفذ بوابة HTTP (المنفذ 19080 بشكل افتراضي) على نقطة نهاية الإدارة. يستخدم Service Fabric Explorer نقطة نهاية الإدارة لإدارة نظام المجموعة. يستخدم موفر موارد Service Fabric أيضاً هذا المنفذ للاستعلام عن معلومات عن نظام المجموعة لعرضها في مدخل Microsoft Azure.

إذا تعذر الوصول إلى المنفذ 19080 من موفر موارد Service Fabric، فستظهر رسالة مثل Nodes Not Found في المدخل، وتظهر قائمة العُقد والتطبيقات فارغة. إذا كنت تريد عرض نظام المجموعة في مدخل Microsoft Azure، يجب أن يعرض موازن التحميل عنوان IP عاماً، ويجب أن تسمح مجموعة أمان الشبكة بنسبة استخدام الشبكة الواردة للمنفذ 19080. إذا لم يستوفِ الإعداد هذه المتطلبات، لا يعرض مدخل Microsoft Azure حالة نظام المجموعة.

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

القوالب

توجد جميع قوالب Service Fabric في GitHub. يجب أن تكون قادراً على توزيع القوالب كما هي باستخدام أوامر PowerShell التالية. في حالة توزيع قالب Azure Virtual Network الموجود أو قالب بروتوكول الإنترنت (IP) العام الثابت، فاقرأ قسم إعداد أولي من هذه المقالة أولاً.

الإعداد الأولي

شبكة ظاهرية موجودة

في المثال التالي، نبدأ بشبكة ظاهرية موجودة تُسمى ExistingRG-vnet، في مجموعة موارد ExistingRG. تسمى الشبكة الفرعية الافتراضية. يتم إنشاء هذه الموارد الافتراضية عند استخدام مدخل Microsoft Azure لإنشاء جهاز ظاهري (VM) قياسي. يمكنك إنشاء الشبكة الظاهرية والشبكة الفرعية دون إنشاء الجهاز الظاهري، ولكن الهدف الرئيسي لإضافة نظام مجموعة إلى شبكة ظاهرية موجودة هو توفير اتصال الشبكة إلى الأجهزة الظاهرية الأخرى. يعطي إنشاء الجهاز الظاهري مثالاً جيداً عن كيفية استخدام شبكة ظاهرية موجودة عادةً. إذا كان نظام مجموعة Service Fabric يستخدم موازن تحميل داخلياً فقط، بلا عنوان IP عام، يمكنك استخدام الجهاز الظاهري وIP العام الخاص به كمربع انتقال آمن.

عنوان IP عام ثابت

بصفة عامة، يُقصد بعنوان IP العام الثابت المورد المخصص الذي تتم إدارته بشكل منفصل عن الجهاز الظاهري أو الأجهزة الظاهرية التي تم تعيينه إليها. ويتم توفيره في مجموعة موارد شبكات مخصصة (على عكس مجموعة موارد نظام مجموعة Service Fabric نفسها). إنشاء عنوان IP عام ثابت يسمى staticIP1 في مجموعة موارد ExistingRG نفسها، إما في مدخل Microsoft Azure وإما باستخدام PowerShell:

PS C:\Users\user> New-AzPublicIpAddress -Name staticIP1 -ResourceGroupName ExistingRG -Location westus -AllocationMethod Static -DomainNameLabel sfnetworking

Name                     : staticIP1
ResourceGroupName        : ExistingRG
Location                 : westus
Id                       : /subscriptions/1237f4d2-3dce-1236-ad95-123f764e7123/resourceGroups/ExistingRG/providers/Microsoft.Network/publicIPAddresses/staticIP1
Etag                     : W/"fc8b0c77-1f84-455d-9930-0404ebba1b64"
ResourceGuid             : 77c26c06-c0ae-496c-9231-b1a114e08824
ProvisioningState        : Succeeded
Tags                     :
PublicIpAllocationMethod : Static
IpAddress                : 40.83.182.110
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
IpConfiguration          : null
DnsSettings              : {
                             "DomainNameLabel": "sfnetworking",
                             "Fqdn": "sfnetworking.westus.cloudapp.azure.com"
                           }

قالب Service Fabric

في الأمثلة الواردة في هذه المقالة، نستخدم template.json لنظام Service Fabric. يمكنك استخدام معالج المدخل القياسي لتنزيل القالب من المدخل قبل إنشاء نظام مجموعة. يمكنك أيضاً استخدام أحد نماذج القوالب، مثل نظام مجموعة Service Fabric الآمن المكون من خمس عُقد.

الشبكة الظاهرية أو الشبكة الفرعية الحالية

  1. تغيير معلمة الشبكة الفرعية إلى اسم الشبكة الفرعية الموجودة، ثم إضافة معلمتين جديدتين للإشارة إلى الشبكة الظاهرية الموجودة:

        "subnet0Name": {
                "type": "string",
                "defaultValue": "default"
            },
            "existingVNetRGName": {
                "type": "string",
                "defaultValue": "ExistingRG"
            },
    
            "existingVNetName": {
                "type": "string",
                "defaultValue": "ExistingRG-vnet"
            },
            /*
            "subnet0Name": {
                "type": "string",
                "defaultValue": "Subnet-0"
            },
            "subnet0Prefix": {
                "type": "string",
                "defaultValue": "10.0.0.0/24"
            },*/
    

    يمكنك أيضاً تعطيل المعلمة باسم "virtualNetworkName" بحيث لا تطالبك بإدخال اسم الشبكة الظاهرية مرتين في جزء توزيع نظام المجموعة في مدخل Microsoft Azure.

  2. عطِّل سمة nicPrefixOverride لـ Microsoft.Compute/virtualMachineScaleSets، لأنك تستخدم الشبكة الفرعية الموجودة وعطَّلت هذا المتغير في الخطوة 1.

            /*"nicPrefixOverride": "[parameters('subnet0Prefix')]",*/
    
  3. تغيير متغير vnetID للإشارة إلى الشبكة الظاهرية الموجودة:

            /*old "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",*/
            "vnetID": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', parameters('existingVNetRGName'), '/providers/Microsoft.Network/virtualNetworks/', parameters('existingVNetName'))]",
    
  4. إزالة Microsoft.Network/virtualNetworks من مواردك، حتى لا ينشئ Azure شبكة ظاهرية جديدة:

    /*{
    "apiVersion": "[variables('vNetApiVersion')]",
    "type": "Microsoft.Network/virtualNetworks",
    "name": "[parameters('virtualNetworkName')]",
    "location": "[parameters('computeLocation')]",
    "properties": {
        "addressSpace": {
            "addressPrefixes": [
                "[parameters('addressPrefix')]"
            ]
        },
        "subnets": [
            {
                "name": "[parameters('subnet0Name')]",
                "properties": {
                    "addressPrefix": "[parameters('subnet0Prefix')]"
                }
            }
        ]
    },
    "tags": {
        "resourceType": "Service Fabric",
        "clusterName": "[parameters('clusterName')]"
    }
    },*/
    
  5. تعطيل الشبكة الظاهرية من سمة dependsOn لـ Microsoft.Compute/virtualMachineScaleSets، حتى لا تعتمد على إنشاء شبكة ظاهرية جديدة:

    "apiVersion": "[variables('vmssApiVersion')]",
    "type": "Microsoft.Computer/virtualMachineScaleSets",
    "name": "[parameters('vmNodeType0Name')]",
    "location": "[parameters('computeLocation')]",
    "dependsOn": [
        /*"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]",
        */
        "[Concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]",
    
    
  6. توزيع القالب:

    New-AzResourceGroup -Name sfnetworkingexistingvnet -Location westus
    New-AzResourceGroupDeployment -Name deployment -ResourceGroupName sfnetworkingexistingvnet -TemplateFile C:\SFSamples\Final\template\_existingvnet.json
    

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

    C:>\Users\users>ping 10.0.0.5 -n 1
    C:>\Users\users>ping NOde1000000 -n 1
    

للاطلاع على مثال آخر، راجع مثالاً غير خاص بـ Service Fabric.

عنوان IP عام ثابت

  1. إضافة معلمات لاسم مجموعة موارد IP الثابتة الموجودة والاسم واسم المجال المؤهل بالكامل (FQDN):

    "existingStaticIPResourceGroup": {
                "type": "string"
            },
            "existingStaticIPName": {
                "type": "string"
            },
            "existingStaticIPDnsFQDN": {
                "type": "string"
    }
    
  2. أزِل معلمة dnsName. (يحتوي عنوان IP الثابت على واحدة بالفعل.)

    /*
    "dnsName": {
        "type": "string"
    },
    */
    
  3. إضافة متغير للإشارة إلى عنوان IP الثابت الموجود:

    "existingStaticIP": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', parameters('existingStaticIPResourceGroup'), '/providers/Microsoft.Network/publicIPAddresses/', parameters('existingStaticIPName'))]",
    
  4. إزالة Microsoft.Network/publicIPAddresses من مواردك، حتى لا ينشئ Azure عنوان IP جديداً:

    /*
    {
        "apiVersion": "[variables('publicIPApiVersion')]",
        "type": "Microsoft.Network/publicIPAddresses",
        "name": "[concat(parameters('lbIPName'),)'-', '0')]",
        "location": "[parameters('computeLocation')]",
        "properties": {
            "dnsSettings": {
                "domainNameLabel": "[parameters('dnsName')]"
            },
            "publicIPAllocationMethod": "Dynamic"        
        },
        "tags": {
            "resourceType": "Service Fabric",
            "clusterName": "[parameters('clusterName')]"
        }
    }, */
    
  5. تعطيل عنوان IP من سمة dependsOn لـ Microsoft.Network/loadBalancers، حتى لا تعتمد على إنشاء عنوان IP جديد:

    "apiVersion": "[variables('lbIPApiVersion')]",
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB', '-', parameters('clusterName'), '-', parameters('vmNodeType0Name'))]",
    "location": "[parameters('computeLocation')]",
    /*
    "dependsOn": [
        "[concat('Microsoft.Network/publicIPAddresses/', concat(parameters('lbIPName'), '-', '0'))]"
    ], */
    "properties": {
    
  6. في مورد Microsoft.Network/loadBalancers، غيِّر عنصر publicIPAddress لـ frontendIPConfigurations للإشارة إلى عنوان IP الثابت الموجود بدلاً من عنوان تم إنشاؤه حديثاً:

                "frontendIPConfigurations": [
                        {
                            "name": "LoadBalancerIPConfig",
                            "properties": {
                                "publicIPAddress": {
                                    /*"id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]"*/
                                    "id": "[variables('existingStaticIP')]"
                                }
                            }
                        }
                    ],
    
  7. في مورد Microsoft.ServiceFabric/clusters، غيِّر managementEndpoint إلى اسم المجال المؤهل بالكامل (FQDN) لنظام أسماء المجالات (DNS) الخاص بعنوان IP الثابت. إذا كنت تستخدم نظام مجموعة آمناً، فتأكد من تغيير http:// إلى https://. (لاحظ أن هذه الخطوة تنطبق على أنظمة مجموعات Service Fabric فقط. إذا كنت تستخدم مجموعة مقاييس جهاز ظاهري، يمكنك تخطي هذه الخطوة.)

                    "fabricSettings": [],
                    /*"managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",*/
                    "managementEndpoint": "[concat('http://',parameters('existingStaticIPDnsFQDN'),':',parameters('nt0fabricHttpGatewayPort'))]",
    
  8. توزيع القالب:

    New-AzResourceGroup -Name sfnetworkingstaticip -Location westus
    
    $staticip = Get-AzPublicIpAddress -Name staticIP1 -ResourceGroupName ExistingRG
    
    $staticip
    
    New-AzResourceGroupDeployment -Name deployment -ResourceGroupName sfnetworkingstaticip -TemplateFile C:\SFSamples\Final\template\_staticip.json -existingStaticIPResourceGroup $staticip.ResourceGroupName -existingStaticIPName $staticip.Name -existingStaticIPDnsFQDN $staticip.DnsSettings.Fqdn
    

بعد التوزيع، يمكنك رؤية أن موازن التحميل مرتبط بعنوان IP الثابت العام من مجموعة الموارد الأخرى. نقطة نهاية اتصال عميل Service Fabric ونقطة نهاية Service Fabric Explorer إلى اسم المجال المؤهل بالكامل (FQDN) لنظام أسماء المجالات (DNS) الخاص بعنوان IP الثابت.

موازن التحميل الداخلي فقط

يستبدل هذا السيناريو موازن التحميل الخارجي في قالب Service Fabric الافتراضي بموازن تحميل داخلي فقط. اطلع على مطلع هذه المقالة لمعرفة الآثار المرتبطة بمدخل Microsoft Azure وموفر موارد Service Fabric.

  1. أزِل معلمة dnsName. (غير مطلوبة.)

    /*
    "dnsName": {
        "type": "string"
    },
    */
    
  2. اختيارياً، إذا كنت تستخدم أسلوب تخصيص ثابتاً، يمكنك إضافة معلمة عنوان IP ثابت. إذا كنت تستخدم أسلوب تخصيص ديناميكياً، فلا تحتاج إلى إجراء هذه الخطوة.

            "internalLBAddress": {
                "type": "string",
                "defaultValue": "10.0.0.250"
            }
    
  3. إزالة Microsoft.Network/publicIPAddresses من مواردك، حتى لا ينشئ Azure عنوان IP جديداً:

    /*
    {
        "apiVersion": "[variables('publicIPApiVersion')]",
        "type": "Microsoft.Network/publicIPAddresses",
        "name": "[concat(parameters('lbIPName'),)'-', '0')]",
        "location": "[parameters('computeLocation')]",
        "properties": {
            "dnsSettings": {
                "domainNameLabel": "[parameters('dnsName')]"
            },
            "publicIPAllocationMethod": "Dynamic"        
        },
        "tags": {
            "resourceType": "Service Fabric",
            "clusterName": "[parameters('clusterName')]"
        }
    }, */
    
  4. أزِل سمة dependsOn لعنوان IP والخاصة بـ Microsoft.Network/loadBalancers، حتى لا تعتمد على إنشاء عنوان IP جديد. إضافة سمة dependsOn للشبكة الظاهرية لأن موازن التحميل يعتمد الآن على الشبكة الفرعية من الشبكة الظاهرية:

                "apiVersion": "[variables('lbApiVersion')]",
                "type": "Microsoft.Network/loadBalancers",
                "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]",
                "location": "[parameters('computeLocation')]",
                "dependsOn": [
                    /*"[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]"*/
                    "[concat('Microsoft.Network/virtualNetworks/',parameters('virtualNetworkName'))]"
                ],
    
  5. تغيير إعداد frontendIPConfigurations لموازن التحميل من استخدام publicIPAddress، إلى استخدام شبكة فرعية وprivateIPAddress. privateIPAddress يستخدم عنوان IP داخلياً ثابتاً محدداً مسبقاً. لاستخدام عنوان IP ديناميكي، أزِل عنصرprivateIPAddress، ثم غيِّر privateIPAllocationMethod إلى Dynamic.

                "frontendIPConfigurations": [
                        {
                            "name": "LoadBalancerIPConfig",
                            "properties": {
                                /*
                                "publicIPAddress": {
                                    "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]"
                                } */
                                "subnet" :{
                                    "id": "[variables('subnet0Ref')]"
                                },
                                "privateIPAddress": "[parameters('internalLBAddress')]",
                                "privateIPAllocationMethod": "Static"
                            }
                        }
                    ],
    
  6. في مورد Microsoft.ServiceFabric/clusters، غيِّر managementEndpoint للإشارة إلى عنوان موازن التحميل الداخلي. إذا كنتَ تستخدم نظام مجموعة آمناً، فتأكد من تغيير http:// إلى https://. (لاحظ أن هذه الخطوة تنطبق على أنظمة مجموعات Service Fabric فقط. إذا كنت تستخدم مجموعة مقاييس جهاز ظاهري، يمكنك تخطي هذه الخطوة.)

                    "fabricSettings": [],
                    /*"managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",*/
                    "managementEndpoint": "[concat('http://',reference(variables('lbID0')).frontEndIPConfigurations[0].properties.privateIPAddress,':',parameters('nt0fabricHttpGatewayPort'))]",
    
  7. توزيع القالب:

    New-AzResourceGroup -Name sfnetworkinginternallb -Location westus
    
    New-AzResourceGroupDeployment -Name deployment -ResourceGroupName sfnetworkinginternallb -TemplateFile C:\SFSamples\Final\template\_internalonlyLB.json
    

بعد التوزيع، يستخدم موازن التحميل عنوان IP الثابت الخاص 10.0.0.250. إذا كان لديك جهاز آخر في الشبكة الظاهرية نفسها، يمكنك الانتقال إلى نقطة نهاية Service Fabric Explorer الداخلية. لاحظ أنها تتصل بإحدى العُقد خلف موازن التحميل.

موازن التحميل الداخلي والخارجي

في هذا السيناريو، تبدأ بموازن التحميل الخارجي الموجود بنوع عُقد واحد، وتضيف موازن تحميل داخلياً لنوع العقدة نفسه. يمكن تعيين منفذ خلفي مرفق بقائمة عناوين خلفية إلى موازن تحميل واحد فقط. اختر موازن التحميل الذي سيحتوي على منافذ التطبيق، وموازن التحميل الذي سيحتوي على نقاط نهاية الإدارة (المنفذان 19000 و19080). إذا وضعت نقاط نهاية الإدارة على موازن التحميل الداخلي، فضع في اعتبارك قيود موفر موارد Service Fabric التي تمت مناقشتها سابقاً في هذه المقالة. في المثال الذي نستخدمه، تظل نقاط نهاية الإدارة على موازن التحميل الخارجي. يمكنك أيضاً إضافة منفذ تطبيق منفذ 80، ووضعه على موازن التحميل الداخلي.

في نظام المجموعة بنوعين من العُقد، يكون نوع العقدة الواحدة على موازن التحميل الخارجي. ويكون نوع العقدة الآخر على موازن التحميل الداخلي. لاستخدام نظام مجموعة بنوعين من العُقد، في قالب بنوعين من العُقدة مُنشأ من المدخل (والذي يأتي مع موازني تحميل)، بدِّل موازن التحميل الثاني إلى موازن تحميل داخلي. لمزيد من المعلومات، راجع قسم موازن التحميل الداخلي فقط.

  1. أضف معلمة عنوان IP لموازن التحميل الداخلي الثابت. (للحصول على الملاحظات المتعلقة باستخدام عنوان IP ديناميكي، راجع الأقسام السابقة من هذه المقالة.)

            "internalLBAddress": {
                "type": "string",
                "defaultValue": "10.0.0.250"
            }
    
  2. أضف معلمة منفذ التطبيق 80.

  3. لإضافة إصدارات داخلية من متغيرات الشبكات الموجودة، انسخها والصقها، وأضف "‎-Int" إلى الاسم:

    /* Add internal load balancer networking variables */
            "lbID0-Int": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'), '-Internal'))]",
            "lbIPConfig0-Int": "[concat(variables('lbID0-Int'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
            "lbPoolID0-Int": "[concat(variables('lbID0-Int'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
            "lbProbeID0-Int": "[concat(variables('lbID0-Int'),'/probes/FabricGatewayProbe')]",
            "lbHttpProbeID0-Int": "[concat(variables('lbID0-Int'),'/probes/FabricHttpGatewayProbe')]",
            "lbNatPoolID0-Int": "[concat(variables('lbID0-Int'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]",
            /* Internal load balancer networking variables end */
    
  4. إذا بدأت بالقالب المُنشأ من المدخل والذي يستخدم منفذ التطبيق 80، يضيف قالب المدخل الافتراضي AppPort1 (المنفذ 80) على موازن التحميل الخارجي. في هذه الحالة، أزِل AppPort1 من موازن التحميل الخارجي loadBalancingRules والتحقيقات، بحيث يمكنك إضافته إلى موازن التحميل الداخلي:

    "loadBalancingRules": [
        {
            "name": "LBHttpRule",
            "properties":{
                "backendAddressPool": {
                    "id": "[variables('lbPoolID0')]"
                },
                "backendPort": "[parameters('nt0fabricHttpGatewayPort')]",
                "enableFloatingIP": "false",
                "frontendIPConfiguration": {
                    "id": "[variables('lbIPConfig0')]"            
                },
                "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]",
                "idleTimeoutInMinutes": "5",
                "probe": {
                    "id": "[variables('lbHttpProbeID0')]"
                },
                "protocol": "tcp"
            }
        } /* Remove AppPort1 from the external load balancer.
        {
            "name": "AppPortLBRule1",
            "properties": {
                "backendAddressPool": {
                    "id": "[variables('lbPoolID0')]"
                },
                "backendPort": "[parameters('loadBalancedAppPort1')]",
                "enableFloatingIP": "false",
                "frontendIPConfiguration": {
                    "id": "[variables('lbIPConfig0')]"            
                },
                "frontendPort": "[parameters('loadBalancedAppPort1')]",
                "idleTimeoutInMinutes": "5",
                "probe": {
                    "id": "[concate(variables('lbID0'), '/probes/AppPortProbe1')]"
                },
                "protocol": "tcp"
            }
        }*/
    
    ],
    "probes": [
        {
            "name": "FabricGatewayProbe",
            "properties": {
                "intervalInSeconds": 5,
                "numberOfProbes": 2,
                "port": "[parameters('nt0fabricTcpGatewayPort')]",
                "protocol": "tcp"
            }
        },
        {
            "name": "FabricHttpGatewayProbe",
            "properties": {
                "intervalInSeconds": 5,
                "numberOfProbes": 2,
                "port": "[parameters('nt0fabricHttpGatewayPort')]",
                "protocol": "tcp"
            }
        } /* Remove AppPort1 from the external load balancer.
        {
            "name": "AppPortProbe1",
            "properties": {
                "intervalInSeconds": 5,
                "numberOfProbes": 2,
                "port": "[parameters('loadBalancedAppPort1')]",
                "protocol": "tcp"
            }
        } */
    
    ],
    "inboundNatPools": [
    
  5. حدد مورد Microsoft.Network/loadBalancers ثانياً. فهو يبدو مشابهاً لموازن التحميل الداخلي المُنشأ في قسم موازن التحميل الداخلي فقط، ولكنه يستخدم متغيرات موازن التحميل "‎-Int"، وينفذ منفذ التطبيق 80 فقط. يؤدي هذا إلى إزالة inboundNatPools أيضاً، للحفاظ على نقاط نهاية RDP على موازن التحميل العام. إذا كنت تريد الاحتفاظ بـ RDP على موازن التحميل الداخلي، فانقل inboundNatPools من موازن التحميل الخارجي إلى موازن التحميل الداخلي هذا:

            /* Add a second load balancer, configured with a static privateIPAddress and the "-Int" load balancer variables. */
            {
                "apiVersion": "[variables('lbApiVersion')]",
                "type": "Microsoft.Network/loadBalancers",
                /* Add "-Internal" to the name. */
                "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'), '-Internal')]",
                "location": "[parameters('computeLocation')]",
                "dependsOn": [
                    /* Remove public IP dependsOn, add vnet dependsOn
                    "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]"
                    */
                    "[concat('Microsoft.Network/virtualNetworks/',parameters('virtualNetworkName'))]"
                ],
                "properties": {
                    "frontendIPConfigurations": [
                        {
                            "name": "LoadBalancerIPConfig",
                            "properties": {
                                /* Switch from Public to Private IP address
                                */
                                "publicIPAddress": {
                                    "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]"
                                }
                                */
                                "subnet" :{
                                    "id": "[variables('subnet0Ref')]"
                                },
                                "privateIPAddress": "[parameters('internalLBAddress')]",
                                "privateIPAllocationMethod": "Static"
                            }
                        }
                    ],
                    "backendAddressPools": [
                        {
                            "name": "LoadBalancerBEAddressPool",
                            "properties": {}
                        }
                    ],
                    "loadBalancingRules": [
                        /* Add the AppPort rule. Be sure to reference the "-Int" versions of backendAddressPool, frontendIPConfiguration, and the probe variables. */
                        {
                            "name": "AppPortLBRule1",
                            "properties": {
                                "backendAddressPool": {
                                    "id": "[variables('lbPoolID0-Int')]"
                                },
                                "backendPort": "[parameters('loadBalancedAppPort1')]",
                                "enableFloatingIP": "false",
                                "frontendIPConfiguration": {
                                    "id": "[variables('lbIPConfig0-Int')]"
                                },
                                "frontendPort": "[parameters('loadBalancedAppPort1')]",
                                "idleTimeoutInMinutes": "5",
                                "probe": {
                                    "id": "[concat(variables('lbID0-Int'),'/probes/AppPortProbe1')]"
                                },
                                "protocol": "tcp"
                            }
                        }
                    ],
                    "probes": [
                    /* Add the probe for the app port. */
                    {
                            "name": "AppPortProbe1",
                            "properties": {
                                "intervalInSeconds": 5,
                                "numberOfProbes": 2,
                                "port": "[parameters('loadBalancedAppPort1')]",
                                "protocol": "tcp"
                            }
                        }
                    ],
                    "inboundNatPools": [
                    ]
                },
                "tags": {
                    "resourceType": "Service Fabric",
                    "clusterName": "[parameters('clusterName')]"
                }
            },
    
  6. في networkProfile لمورد Microsoft.Compute/virtualMachineScaleSets، أضف قائمة العناوين الخلفية الداخلية:

    "loadBalancerBackendAddressPools": [
                                                        {
                                                            "id": "[variables('lbPoolID0')]"
                                                        },
                                                        {
                                                            /* Add internal BE pool */
                                                            "id": "[variables('lbPoolID0-Int')]"
                                                        }
    ],
    
  7. توزيع القالب:

    New-AzResourceGroup -Name sfnetworkinginternalexternallb -Location westus
    
    New-AzResourceGroupDeployment -Name deployment -ResourceGroupName sfnetworkinginternalexternallb -TemplateFile C:\SFSamples\Final\template\_internalexternalLB.json
    

بعد التوزيع، يمكنك رؤية موازني تحميل في مجموعة الموارد. إذا استعرضت موازنات التحميل، يمكنك رؤية عنوان IP العام ونقاط نهاية الإدارة (المنفذان 19000 و19080) المعينة إلى عنوان IP العام. يمكنك أيضاً رؤية عنوان IP الداخلي الثابت ونقطة نهاية التطبيق (المنفذ 80) المعينة إلى موازن التحميل الداخلي. يستخدم كل من موازني التحميل نفس القائمة الخلفية لمجموعة مقاييس الأجهزة الظاهرية.

ملاحظات لأحمال العمل الإنتاجية

تم تصميم قوالب GitHub أعلاه للعمل مع وحدة حفظ المخزون الافتراضية لخدمة Azure Standard Load Balancer ‏(SLB)، وحدة حفظ المخزون الأساسية. لا يوجد في LB لوحدة حفظ المخزون الأساسية أي اتفاقية على مستوى الخدمة، لذلك، بالنسبة لأحمال العمل الإنتاجية، يجب استخدام وحدة حفظ المخزون القياسية. لمزيد من المعلومات عن ذلك، راجع نظرة عامة حول Azure Standard Load Balancer. أي نظام مجموعة Service Fabric يستخدم وحدة حفظ المخزون القياسية لـ SLB يجب عليه ضمان أن كل نوع من العُقدة له قاعدة تسمح بنسبة استخدام الشبكة الصادرة على المنفذ 443. وهذا ضروري لإكمال مجموعة أنظمة المجموعات، وسيفشل أي توزيع يتم دون هذه القاعدة. في المثال أعلاه لموازن التحميل "الداخلي فقط"، يجب إضافة موازن تحميل خارجي إضافي إلى القالب مع قاعدة تسمح بنسبة استخدام الشبكة الصادرة للمنفذ 443.

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

إنشاء نظام مجموعة