Поделиться через


Конфигурация общедоступного IP-адреса уровня экземпляра в Облачные службы

В этой статье описывается, как настроить общедоступный IP-адрес уровня экземпляра (PIP) в Облачные службы Microsoft Azure (классической) и Azure Облачные службы (расширенная поддержка). В отличие от виртуального IP-адреса (VIP), общедоступный IP-адрес уровня экземпляра не балансирован. ВИРТУАЛЬНЫЙ IP-адрес назначается облачной службе, а все виртуальные машины и экземпляры ролей в общей виртуальной машине облачной службы. Однако общедоступный IP-адрес (PIP) связан только с сетевым адаптером одного экземпляра. Общедоступный IP-адрес полезен в развертываниях с несколькими экземплярами, в которых каждый экземпляр может быть доступен независимо от Интернета. На следующей схеме показано значение PIP и отличает его от ВИРТУАЛЬНОго IP-адреса.

Схема, показывающая связь между общедоступными IP-адресами, виртуальными IP-адресами и Интернетом в Облачные службы Microsoft Azure.

На схеме сетевой трафик, отправляемый на ВИРТУАЛЬНЫй IP-адрес, отображается как балансировка нагрузки между IP-адресом центра обработки данных (DIP) 1 и DIP 2. Однако трафик, который отправляется в PIP 1, всегда идет в DIP 1, и трафик, который отправляется в PIP 2 всегда идет к DIP 2. IP-адрес центра обработки данных — это частный IP-адрес виртуальной машины.

Дополнительные сведения см. в статье блога Azure по общедоступному IP-адресу уровня экземпляра.

Процедура Облачные службы Azure (классическая версия)

  1. Настройте общедоступный IP-адрес уровня экземпляра по роли:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceConfiguration
            serviceName="TestVirtualnetwork"
            xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration"
            osFamily="6"
            osVersion="*"
            schemaVersion="2015-04.2.6">
        <Role name="WebRole1">
            <Instances count="1" />
            <ConfigurationSettings>
                <Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="xxx" />
            </ConfigurationSettings>
        </Role>
        <Role name="WebRole2">
            <Instances count="1" />
            <ConfigurationSettings>
                <Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="xxx" />
            </ConfigurationSettings>
        </Role>
        <Role name="WebRole3">
            <Instances count="1" />
            <ConfigurationSettings>
                <Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="xxx" />
            </ConfigurationSettings>
        </Role>
        <Role name="WebRole4">
            <Instances count="1" />
            <ConfigurationSettings>
                <Setting name="APPINSIGHTS_INSTRUMENTATIONKEY" value="xxx" />
            </ConfigurationSettings>
        </Role>
        <NetworkConfiguration>
            <VirtualNetworkSite name="Group RESOURCE_GROUP VIRTUAL_NETWORK_NAME" />
            <AddressAssignments>
                <InstanceAddress roleName="WebRole1">
                    <Subnets><Subnet name="subnet001" /></Subnets>
                    <PublicIPs>
                        <PublicIP name="PubIP" domainNameLabel="pip" />  <!-- with domain -->
                    </PublicIPs>
                </InstanceAddress>
                <InstanceAddress roleName="WebRole2">
                    <Subnets><Subnet name="subnet003" /></Subnets>
                    <PublicIPs>
                        <PublicIP name="PubIP"/>                         <!-- without domain -->
                    </PublicIPs>
                </InstanceAddress>
            </AddressAssignments>
        </NetworkConfiguration>
    </ServiceConfiguration>
    
  2. Получите текущий общедоступный IP-адрес роли с помощью одного из следующих методов.

    Для каждого экземпляра роли выполните командлет Get-AzureRole PowerShell. Этот командлет основан на модуле Azure.Service . Используя конфигурацию IP-адресов на предыдущем шаге, можно увидеть разницу между сведениями о экземпляре каждого экземпляра роли.

    1. Просмотрите сведения о роли, имя общедоступного WebRole2 IP-адреса которого не имеет метки доменного имени:

      $roleParams = @{
          ServiceName = "<cloud-service-name>"
          Slot = "Production"
          RoleName = "WebRole2"
          InstanceDetails = $true
      }
      Get-AzureRole @roleParams
      

      Выходные данные командлета похожи на следующий текст:

      InstanceEndpoints            : {Microsoft.WindowsAzure.Plugins.RemoteForwarder.RdpInput, Endpoint1}
      InstanceErrorCode            : 
      InstanceFaultDomain          : 0
      InstanceName                 : WebRole2_IN_0
      InstanceSize                 : Standard_D1_v2
      InstanceStateDetails         : 
      InstanceStatus               : ReadyRole
      InstanceUpgradeDomain        : 0
      RoleName                     : WebRole2
      DeploymentID                 : 0123456789abcdef0123456789abcdef
      IPAddress                    : 10.2.2.5
      PublicIPAddress              : 20.115.22.157
      PublicIPName                 : PubIP
      PublicIPIdleTimeoutInMinutes : 
      PublicIPDomainNameLabel      : 
      PublicIPFqdns                : {}
      ServiceName                  : contoso-vnet-pip
      OperationDescription         : Get-AzureRole
      OperationId                  : 12345678-9abc-def0-1234-56789abcdef0
      OperationStatus              : Succeeded
      
    2. Теперь просмотрите сведения о WebRole1 роли, которая использует одно и то же общедоступное IP-имя, но также имеет метку доменного имени:

      $roleParams = @{
          ServiceName = "<cloud-service-name>"
          Slot = "Production"
          RoleName = "WebRole1"
          InstanceDetails = $true
      }
      Get-AzureRole @roleParams
      

      В выходных данных командлета InstanceEndpoints, , RoleNamePublicIPAddressInstanceNameIPAddressPublicIPDomainNameLabelInstanceStatus, PublicIPFqdnsи OperationId значения отличаются:

      InstanceEndpoints            : {Endpoint1}
      InstanceErrorCode            : 
      InstanceFaultDomain          : 0
      InstanceName                 : WebRole1_IN_0
      InstanceSize                 : Standard_D1_v2
      InstanceStateDetails         : 
      InstanceStatus               : StoppedVM
      InstanceUpgradeDomain        : 0
      RoleName                     : WebRole1_IN_0
      DeploymentID                 : 0123456789abcdef0123456789abcdef
      IPAddress                    : 10.2.0.4
      PublicIPAddress              : 20.168.229.192
      PublicIPName                 : PubIP
      PublicIPIdleTimeoutInMinutes : 
      PublicIPDomainNameLabel      : pip
      PublicIPFqdns                : {pip.contoso-vnet-pip.cloudapp.net, pip.0.contoso-vnet-pip.cloudapp.net}
      ServiceName                  : contoso-vnet-pip
      OperationDescription         : Get-AzureRole
      OperationId                  : 23456789-abcd-ef01-2345-6789abcdef01
      OperationStatus              : Succeeded
      

Процедура Облачные службы Azure (расширенная поддержка)

  1. Настройте общедоступный IP-адрес уровня экземпляра по роли:

    <?xml version="1.0" encoding="utf-16"?>
    <ServiceConfiguration
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            serviceName="Test_cloudservice"
            osFamily="6"
            osVersion="*"
            schemaVersion="2015-04.2.6"
            xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
        <Role name="TestWebRole">
            <ConfigurationSettings>
                <Setting
                        name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"
                        value="UseDevelopmentStorage=true" />
            </ConfigurationSettings>
            <Instances count="2" />
        </Role>
        <Role name="TestWorkerRole">
            <ConfigurationSettings>
                <Setting
                        name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"
                        value="UseDevelopmentStorage=true" />
            </ConfigurationSettings>
            <Instances count="1" />
        </Role>
        <NetworkConfiguration>
            <VirtualNetworkSite name="test001VNet" />
            <AddressAssignments>
                <InstanceAddress roleName="TestWebRole">
                    <Subnets>
                        <Subnet name="default" />
                    </Subnets>
                    <PublicIPs>
                        <PublicIP name="PubIP" domainNameLabel="pip" />
                    </PublicIPs>
                </InstanceAddress>
                <InstanceAddress roleName="TestWorkerRole">
                    <Subnets>
                        <Subnet name="default" />
                    </Subnets>
                </InstanceAddress>
                <ReservedIPs>
                    <ReservedIP name="Group TESTCSES cses-prod" />
                </ReservedIPs>
            </AddressAssignments>
        </NetworkConfiguration>
    </ServiceConfiguration>
    
  2. Чтобы получить общедоступный IP-адрес сетевого адаптера, используйте PublicIPAddress In CloudService — list Cloud Service Public IP Addresss REST API. В следующем фрагменте кода показан пример ответа JSON:

    {
      "value": [
        {
          "name": "PubIP",
          "id": "/subscriptions/<your-subscription-guid>/resourceGroups/TESTCSES/providers/Microsoft.Compute/cloudServices/testcsesv2/roleInstances/TestWebRole_IN_0/networkInterfaces/nic1/ipConfigurations/ipconfig1/publicIPAddresses/PubIP",
          "etag": "W/\"3456789a-bcde-f012-3456-789abcdef012\"",
          "location": "eastus",
          "properties": {
            "provisioningState": "Succeeded",
            "resourceGuid": "<your-resource-guid>",
            "ipAddress": "20.169.153.231",
            "publicIPAddressVersion": "IPv4",
            "publicIPAllocationMethod": "Dynamic",
            "idleTimeoutInMinutes": 4,
            "dnsSettings": {
              "domainNameLabel": "pip.0.cses-prod",
              "fqdn": "pip.0.cses-prod.eastus.cloudapp.azure.com"
            },
            "ipTags": [],
            "ipConfiguration": {
              "id": "/subscriptions/<your-subscription-guid>/resourceGroups/TESTCSES/providers/Microsoft.Compute/cloudServices/testcsesv2/roleInstances/TestWebRole_IN_0/networkInterfaces/nic1/ipConfigurations/ipconfig1"
            }
          },
          "sku": {
            "name": "Basic",
            "tier": "Regional"
          }
        },
        {
          "name": "PubIP",
          "id": "/subscriptions/<your-subscription-guid>/resourceGroups/TESTCSES/providers/Microsoft.Compute/cloudServices/testcsesv2/roleInstances/TestWebRole_IN_1/networkInterfaces/nic1/ipConfigurations/ipconfig1/publicIPAddresses/PubIP",
          "etag": "W/\"456789ab-cdef-0123-4567-89abcdef0123\"",
          "location": "eastus",
          "properties": {
            "provisioningState": "Succeeded",
            "resourceGuid": "<your-resource-guid>",
            "ipAddress": "20.231.68.190",
            "publicIPAddressVersion": "IPv4",
            "publicIPAllocationMethod": "Dynamic",
            "idleTimeoutInMinutes": 4,
            "dnsSettings": {
              "domainNameLabel": "pip.1.cses-prod",
              "fqdn": "pip.1.cses-prod.eastus.cloudapp.azure.com"
            },
            "ipTags": [],
            "ipConfiguration": {
              "id": "/subscriptions/<your-subscription-guid>/resourceGroups/TESTCSES/providers/Microsoft.Compute/cloudServices/testcsesv2/roleInstances/TestWebRole_IN_1/networkInterfaces/nic1/ipConfigurations/ipconfig1"
            }
          },
          "sku": {
            "name": "Basic",
            "tier": "Regional"
          }
        }
      ]
    }
    

Хотя два объекта в value массиве имеют ключевое name значение PubIP, существуют различия в параметрах IP-адреса и DNS в соответствующих properties ключах. Ключ ipAddress имеет значение 20.169.153.231 в первом объекте массива и 20.231.68.190 во втором объекте массива. Ключ dnsSettings имеет значение pip.0.cses-prod в первом объекте массива и pip.1.cses-prod во втором объекте массива.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.