إنشاء شبكات ظاهرية لمجموعات Azure HDInsight

توفر هذه المقالة أمثلة ونماذج التعليمات البرمجية لإنشاء وتكوين ⁧⁩شبكات Azure الظاهرية⁧⁩. لاستخدامها مع مجموعات Azure HDInsight. يتم تقديم أمثلة تفصيلية لإنشاء مجموعات أمان الشبكة (NSGs)، وتكوين DNS.

للحصول على معلومات أساسية حول استخدام الشبكات الظاهرية باستخدام Azure HDInsight، راجع ⁧⁩تخطيط شبكة ظاهرية لـAzure HDInsight⁧⁩.

المتطلبات الأساسية لعينات التعليمات البرمجية والأمثلة

قبل تنفيذ أي من نماذج التعليمات البرمجية في هذه المقالة، يتعين عليك فهم شبكة TCP/IP. إذا لم تكن على دراية بشبكات TCP/IP، فاستشر شخص قبل إجراء تعديلات على شبكات الإنتاج.

تتضمن المتطلبات الأساسية الأخرى للنماذج في هذه المقالة العناصر التالية:

  • إذا كنت تستخدم PowerShell، فستحتاج إلى تثبيت ⁧⁩AZ Module⁧⁩.
  • إذا كنت ترغب في استخدام Azure CLI، ولم تقم بتثبيته بعد، فراجع ⁧⁩تثبيت Azure CLI⁧⁩.

هام

إذا كنت تبحث عن إرشادات خطوة بخطوة حول توصيل HDInsight بشبكة الاتصال المحلية باستخدام شبكة Azure الظاهرية، فراجع مستند ⁧⁩توصيل HDInsight بشبكتك المحلية⁧⁩.

⁧⁩⁧⁩مثال: مجموعات أمان الشبكة مع HDInsight

توضح الأمثلة في هذا القسم كيفية إنشاء قواعد مجموعة أمان الشبكة. تسمح القواعد لـHDInsight بالاتصال بخدمات إدارة Azure. قبل استخدام الأمثلة، أضبط عناوين IP؛ لمطابقة عناوين منطقة Azure التي تستخدمها. يمكنك العثور على هذه المعلومات في ⁧⁩عناوين IP لإدارة HDInsight⁧⁩.

قالب Azure Resource Manager

ينشئ قالب Resource Manager التالي شبكة ظاهرية تقيد حركة المرور الواردة؛ ولكنها تسمح بحركة المرور من عناوين IP المطلوبة بواسطة HDInsight. ينشئ هذا القالب أيضًا مجموعة HDInsight في الشبكة الظاهرية.

Azure PowerShell

استخدم البرنامج النصي PowerShell التالي لإنشاء شبكة ظاهرية تقيد حركة المرور الواردة، وتسمح بحركة المرور من عناوين IP لمنطقة شمال أوروبا.

هام

غير عناوين IP لـ⁧hdirule1⁩ و⁧hdirule2⁩ في هذا المثال لمطابقة منطقة Azure التي تستخدمها. يمكنك العثور على هذه المعلومات في ⁧⁩عناوين IP لإدارة HDInsight⁧⁩.

$vnetName = "Replace with your virtual network name"
$resourceGroupName = "Replace with the resource group the virtual network is in"
$subnetName = "Replace with the name of the subnet that you plan to use for HDInsight"

# Get the Virtual Network object
$vnet = Get-AzVirtualNetwork `
    -Name $vnetName `
    -ResourceGroupName $resourceGroupName

# Get the region the Virtual network is in.
$location = $vnet.Location

# Get the subnet object
$subnet = $vnet.Subnets | Where-Object Name -eq $subnetName

# Create a Network Security Group.
# And add exemptions for the HDInsight health and management services.
$nsg = New-AzNetworkSecurityGroup `
    -Name "hdisecure" `
    -ResourceGroupName $resourceGroupName `
    -Location $location `
    | Add-AzNetworkSecurityRuleConfig `
        -name "hdirule1" `
        -Description "HDI health and management address 52.164.210.96" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "52.164.210.96" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 300 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule2" `
        -Description "HDI health and management 13.74.153.132" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "13.74.153.132" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 301 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule3" `
        -Description "HDI health and management 168.61.49.99" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "168.61.49.99" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 302 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule4" `
        -Description "HDI health and management 23.99.5.239" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "23.99.5.239" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 303 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule5" `
        -Description "HDI health and management 168.61.48.131" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "168.61.48.131" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 304 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule6" `
        -Description "HDI health and management 138.91.141.162" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "138.91.141.162" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 305 `
        -Direction Inbound `

# Set the changes to the security group
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg

# Apply the NSG to the subnet
Set-AzVirtualNetworkSubnetConfig `
    -VirtualNetwork $vnet `
    -Name $subnetName `
    -AddressPrefix $subnet.AddressPrefix `
    -NetworkSecurityGroup $nsg
$vnet | Set-AzVirtualNetwork

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

Get-AzNetworkSecurityGroup -Name hdisecure -ResourceGroupName RESOURCEGROUP |
Add-AzNetworkSecurityRuleConfig -Name "SSH" -Description "SSH" -Protocol "*" -SourcePortRange "*" -DestinationPortRange "22" -SourceAddressPrefix "*" -DestinationAddressPrefix "VirtualNetwork" -Access Allow -Priority 306 -Direction Inbound

Azure CLI

استخدم الخطوات التالية لإنشاء شبكة ظاهرية تقيد حركة المرور الواردة، ولكنها تسمح بحركة المرور من عناوين IP المطلوبة بواسطة HDInsight.

  1. استخدم الأمر التالي لإنشاء مجموعة أمان شبكة جديدة تسمى ⁧hdisecure⁩. استبدل ⁧RESOURCEGROUP⁩ بمجموعة الموارد التي تحتوي على شبكة Azure الظاهرية. استبدل ⁧LOCATION⁩ بالموقع (المنطقة) الذي تم إنشاء المجموعة فيه.

    az network nsg create -g RESOURCEGROUP -n hdisecure -l LOCATION
    

    بمجرد إنشاء المجموعة، تتلقى معلومات حول المجموعة الجديدة.

  2. استخدم ما يلي لإضافة قواعد إلى مجموعة أمان الشبكة الجديدة التي تسمح بالاتصال الوارد على المنفذ 443 من خدمة إدارة وصيانة Azure HDInsight. استبدل ⁧RESOURCEGROUP⁩ باسم مجموعة الموارد التي تحتوي على شبكة Azure الظاهرية.

    هام

    غير عناوين IP لـ⁧hdirule1⁩ و⁧hdirule2⁩ في هذا المثال لمطابقة منطقة Azure التي تستخدمها. يمكنك العثور على هذه المعلومات في ⁧⁩عناوين IP لإدارة HDInsight⁧⁩.

    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule1 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "52.164.210.96" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 300 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule2 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "13.74.153.132" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 301 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule3 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "168.61.49.99" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 302 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule4 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "23.99.5.239" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 303 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule5 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "168.61.48.131" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 304 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule6 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "138.91.141.162" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 305 --direction "Inbound"
    
  3. لاسترداد المعرف الفريد لمجموعة أمان الشبكة هذه، استخدم الأمر التالي:

    az network nsg show -g RESOURCEGROUP -n hdisecure --query "id"
    

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

    "/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Network/networkSecurityGroups/hdisecure"
    
  4. استخدم الأمر التالي لتطبيق مجموعة أمان الشبكة على شبكة فرعية. استبدل قيم ⁧GUID⁩ و⁧RESOURCEGROUP⁩ بالقيم التي تم إرجاعها من الخطوة السابقة. استبدل ⁧VNETNAME⁩ و⁧SUBNETNAME⁩ باسم الشبكة الظاهرية واسم الشبكة الفرعية التي تريد إنشائها.

    az network vnet subnet update -g RESOURCEGROUP --vnet-name VNETNAME --name SUBNETNAME --set networkSecurityGroup.id="/subscriptions/GUID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Network/networkSecurityGroups/hdisecure"
    

    بمجرد اكتمال هذا الأمر، يمكنك تثبيت HDInsight في الشبكة الظاهرية.

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

توضح التعليمات البرمجية التالية كيفية تمكين وصول SSH من الإنترنت:

az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n ssh --protocol "*" --source-port-range "*" --destination-port-range "22" --source-address-prefix "*" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 306 --direction "Inbound"

مثال ⁧⁩⁧⁩: تكوين DNS

تحليل الاسم بين شبكة ظاهرية وشبكة محلية متصلة

يفترض هذا المثال الافتراضات التالية:

  • أنك لديك شبكة Azure ظاهرية متصلة بشبكة محلية باستخدام بوابة VPN.

  • خادم DNS المخصص في الشبكة الظاهرية يشغل Linux أو Unix كنظام التشغيل.

  • تم تثبيت ⁧⁩Bind⁧⁩ على خادم DNS المخصص.

على خادم DNS المخصص في الشبكة الظاهرية:

  1. استخدم إما Azure PowerShell أو Azure CLI للبحث عن لاحقة DNS للشبكة الظاهرية:

    استبدل ⁧RESOURCEGROUP⁩ باسم مجموعة الموارد التي تحتوي على الشبكة الظاهرية، ثم أدخل الأمر:

    $NICs = Get-AzNetworkInterface -ResourceGroupName "RESOURCEGROUP"
    $NICs[0].DnsSettings.InternalDomainNameSuffix
    
    az network nic list --resource-group RESOURCEGROUP --query "[0].dnsSettings.internalDomainNameSuffix"
    
  2. على خادم DNS المخصص للشبكة الظاهرية، استخدم النص التالي كمحتويات الملف ⁧/etc/bind/named.conf.local⁩:

    // Forward requests for the virtual network suffix to Azure recursive resolver
    zone "0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net" {
        type forward;
        forwarders {168.63.129.16;}; # Azure recursive resolver
    };
    

    استبدل القيمة ⁧0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net⁩ بلاحقة DNS للشبكة الظاهرية الأخرى.

    يوجه هذا التكوين كافة طلبات DNS للاحقة DNS بالشبكة الظاهرية إلى محلل العودية Azure.

  3. على خادم DNS المخصص للشبكة الظاهرية استخدم النص التالي كمحتويات الملف ⁧/etc/bind/named.conf.options⁩:

    // Clients to accept requests from
    // TODO: Add the IP range of the joined network to this list
    acl goodclients {
        10.0.0.0/16; # IP address range of the virtual network
        localhost;
        localnets;
    };
    
    options {
            directory "/var/cache/bind";
    
            recursion yes;
    
            allow-query { goodclients; };
    
            # All other requests are sent to the following
            forwarders {
                192.168.0.1; # Replace with the IP address of your on-premises DNS server
            };
    
            dnssec-validation auto;
    
            auth-nxdomain no;    # conform to RFC1035
            listen-on { any; };
    };
    
    • استبدل القيمة ⁧10.0.0.0/16⁩ بنطاق عنوان IP الخاص بالشبكة الظاهرية. يسمح هذا الإدخال لعناوين طلبات تحليل الاسم ضمن هذا النطاق.

    • أضف نطاق عنوان IP للشبكة المحلية إلى المقطع ⁧acl goodclients { ... }⁩. يسمح الإدخال بطلبات تحليل الاسم من الموارد في الشبكة المحلية.

    • استبدل القيمة ⁧192.168.0.1⁩ بعنوان IP لخادم DNS المحلي. يقوم هذا الإدخال بتوجيه جميع طلبات DNS الأخرى إلى خادم DNS المحلي.

  4. لاستخدام التكوين، أعد تشغيل Bind. على سبيل المثال، ⁧sudo service bind9 restart⁩.

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

    ملاحظة

    راجع وثائق برنامج DNS للحصول على تفاصيل حول كيفية إضافة معيد توجيه شرطي.

بعد إكمال هذه الخطوات، يمكنك الاتصال بالموارد في أي من الشبكتين باستخدام أسماء مجالات مؤهلة بالكامل (FQDN). يمكنك الآن تثبيت HDInsight في الشبكة الظاهرية.

تحليل الاسم بين شبكتين ظاهريتين متصلتين

يفترض هذا المثال الافتراضات التالية:

  • لديك شبكتان ظاهريتان من Azure متصلتان باستخدام إما بوابة VPN أو بوابة نظير.

  • خادم DNS المخصص في كلتا الشبكتين يشغل Linux أو Unix كنظام التشغيل.

  • تم تثبيت ⁧⁩Bind⁧⁩ على خادم DNS المخصص.

  1. استخدم إما Azure PowerShell أو Azure CLI للبحث عن لاحقة DNS لكلا الشبكتين الظاهريتين:

    استبدل ⁧RESOURCEGROUP⁩ باسم مجموعة الموارد التي تحتوي على الشبكة الظاهرية، ثم أدخل الأمر:

    $NICs = Get-AzNetworkInterface -ResourceGroupName "RESOURCEGROUP"
    $NICs[0].DnsSettings.InternalDomainNameSuffix
    
    az network nic list --resource-group RESOURCEGROUP --query "[0].dnsSettings.internalDomainNameSuffix"
    
  2. استخدم النص التالي كمحتويات الملف ⁧/etc/bind/named.config.local⁩ على خادم DNS المخصص. إجراء هذا التغيير على خادم DNS المخصص في كل الشبكتين الظاهريتين.

    // Forward requests for the virtual network suffix to Azure recursive resolver
    zone "0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net" {
        type forward;
        forwarders {10.0.0.4;}; # The IP address of the DNS server in the other virtual network
    };
    

    استبدل القيمة ⁧0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net⁩ بلاحقة DNS للشبكة الظاهرية ⁧⁩الأخرى⁧⁩. يقوم هذا الإدخال بتوجيه طلبات لاحقة DNS للشبكة البعيدة إلى DNS المخصص في تلك الشبكة.

  3. على خادم DNS المخصص في الشبكتين الظاهريتين، استخدم النص التالي كمحتويات الملف ⁧/etc/bind/named.conf.options⁩:

    // Clients to accept requests from
    acl goodclients {
        10.1.0.0/16; # The IP address range of one virtual network
        10.0.0.0/16; # The IP address range of the other virtual network
        localhost;
        localnets;
    };
    
    options {
            directory "/var/cache/bind";
    
            recursion yes;
    
            allow-query { goodclients; };
    
            forwarders {
            168.63.129.16;   # Azure recursive resolver
            };
    
            dnssec-validation auto;
    
            auth-nxdomain no;    # conform to RFC1035
            listen-on { any; };
    };
    

    استبدل القيم ⁧10.0.0.0/16⁩ و⁧10.1.0.0/16⁩ بنطاق عنوان IP الخاص بشبكتك الظاهرية. يسمح هذا الإدخال للموارد في كل شبكة بتقديم طلبات خوادم DNS.

    تتم معالجة أية طلبات ليست لاحقات DNS للشبكات الظاهرية (على سبيل المثال، microsoft.com) بواسطة محلل العودية Azure.

  4. لاستخدام التكوين، أعد تشغيل Bind. على سبيل المثال، ⁧sudo service bind9 restart⁩ على كلا خادمي DNS.

بعد إكمال هذه الخطوات، يمكنك الاتصال بالموارد في أي من الشبكتين الظاهريتين باستخدام أسماء مجالات مؤهلة بالكامل (FQDN). يمكنك الآن تثبيت HDInsight في الشبكة الظاهرية.

أختبر الإعدادات قبل نشر مجموعة HDInsight

قبل نشر المجموعة الخاصة بك، يمكنك التحقق من صحة العديد من إعدادات تكوين الشبكة الخاصة بك عن طريق تشغيل أداة HDInsight Network Validator على جهاز ظاهري Azure Linux في نفس شبكة VNet والشبكة الفرعية مثل المجموعة المخطط لها.

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