Compartilhar via


Configuração de endereço IP público no nível da instância no Serviços de Nuvem

Este artigo discute como configurar um PIP (endereço IP público) no nível da instância em Serviços de Nuvem do Microsoft Azure (clássico) e Serviços de Nuvem do Azure (suporte estendido). Ao contrário de um ENDEREÇO IP virtual (VIP), um endereço IP público no nível da instância não é balanceado por carga. Um VIP é atribuído ao serviço de nuvem e todas as máquinas virtuais e instâncias de função no serviço de nuvem compartilham esse VIP. No entanto, um PIP (endereço IP público) está associado apenas ao adaptador de rede de uma única instância. O endereço IP público é útil em implantações de várias instâncias nas quais cada instância pode ser acessível independentemente da Internet. O diagrama a seguir ilustra o valor do PIP e o diferencia do VIP.

Diagrama que mostra a relação entre endereços IP públicos, endereços IP virtuais e a Internet em Serviços de Nuvem do Microsoft Azure.

No diagrama, o tráfego de rede enviado para o VIP é mostrado como balanceado por carga entre o endereço IP do datacenter (DIP) 1 e o DIP 2. No entanto, o tráfego enviado para PIP 1 sempre vai para o DIP 1, e o tráfego enviado para PIP 2 sempre vai para DIP 2. Um endereço IP do datacenter é o endereço IP privado da máquina virtual (VM).

Para obter mais informações, consulte o artigo Endereço IP público no nível da instância do Blog do Azure.

Procedimento para Serviços de Nuvem do Azure (clássico)

  1. Configurar um endereço IP público no nível da instância por função:

    <?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. Obtenha o endereço IP público atual de uma função usando um dos métodos a seguir.

    Para cada instância de função, execute o cmdlet Get-AzureRole PowerShell. Esse cmdlet é baseado no Azure.Service módulo. Usando a configuração de endereço IP na etapa anterior, podemos ver a diferença entre os detalhes da instância de cada instância de função.

    1. Exiba os detalhes da WebRole2 função, cujo nome IP público não tem um rótulo de nome de domínio:

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

      A saída do cmdlet se assemelha ao seguinte texto:

      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. Agora, exiba os detalhes da WebRole1 função, que usa o mesmo nome IP público, mas também tem um rótulo de nome de domínio:

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

      Na saída do cmdlet, os InstanceEndpointsvalores , , InstanceName, InstanceStatusRoleName, IPAddress, PublicIPDomainNameLabelPublicIPAddress, PublicIPFqdnse OperationId são diferentes:

      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
      

Procedimento para Serviços de Nuvem do Azure (suporte estendido)

  1. Configurar um endereço IP público no nível da instância por função:

    <?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. Use a API REST publicIPAddress In CloudService – List Cloud Service Public IP Addresss para obter o endereço IP público do adaptador de rede. O snippet de código a seguir mostra um exemplo de resposta 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"
          }
        }
      ]
    }
    

Embora os dois objetos na value matriz tenham um name valor chave de PubIP, há diferenças no endereço IP e nas configurações DNS dentro das respectivas properties chaves. A ipAddress chave tem um valor de 20.169.153.231 no objeto de primeira matriz e 20.231.68.190 no segundo objeto de matriz. A dnsSettings chave tem um valor de pip.0.cses-prod no objeto de primeira matriz e pip.1.cses-prod no segundo objeto de matriz.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.