实例级公共 IP(经典版)概述

实例级公共 IP(ILPIP)是一个公共 IP 地址,可以直接分配给 VM 或云服务角色实例,而不是分配给 VM 或角色实例所在的云服务。 ILPIP 不会取代分配给云服务的虚拟 IP(VIP)。 相反,它是一个额外的 IP 地址,可用于直接连接到 VM 或角色实例。

重要

Azure 具有用于创建和处理资源的两个不同的部署模型:资源管理器部署模型和经典部署模型。 本文介绍使用经典部署模型的情况。 Microsoft建议通过资源管理器创建 VM。 请确保了解 Azure 中 IP 地址 的工作原理。

ILPIP 和 VIP差异

如图 1 所示,云服务是使用 VIP 访问的,而单个 VM 通常使用 VIP 访问:<端口号>。 通过将 ILPIP 分配给特定 VM,可以使用该 IP 地址直接访问该 VM。

在 Azure 中创建云服务时,会自动创建相应的 DNS A 记录,以允许通过完全限定的域名(FQDN)访问服务,而不是使用实际的 VIP。 相同的过程也适用于 ILPIP,使得可以通过 FQDN 而非 ILPIP 来访问 VM 或角色实例。 例如,如果创建名为 contosoadservice的云服务,并使用两个实例配置名为 contosoweb 的 Web 角色,并且 .cscfg domainNameLabel 设置为 WebPublicIP,Azure 会注册实例的以下 A 记录:

  • WebPublicIP.0.contosoadservice.cloudapp.net
  • WebPublicIP.1.contosoadservice.cloudapp.net
  • ...

注释

只能为每个 VM 或角色实例分配一个 ILPIP。 每个订阅最多可以使用 5 个 ILPIP。 不支持多NIC虚拟机的ILPIP。

为什么我请求 ILPIP?

如果希望能够通过直接分配给 VM 的 IP 地址连接到 VM 或角色实例,而不是使用云服务 VIP:<端口号>,请为 VM 或角色实例请求 ILPIP。

  • 活动 FTP - 通过将 ILPIP 分配到 VM,它可以接收任何端口上的流量。 VM 不需要终结点来接收流量。 有关 FTP 协议的详细信息,请参阅 FTP 协议概述
  • 出站 IP - 源自 VM 的出站流量将映射到 ILPIP 作为源,ILPIP 唯一标识 VM 到外部实体。

注释

过去,ILPIP 地址称为公共 IP(PIP)地址。

管理 VM 的 ILPIP

通过以下任务,可以创建、分配和删除 VM 中的 ILPIP:

如何使用 PowerShell 在创建 VM 期间请求 ILPIP

以下 PowerShell 脚本创建一个名为 FTPService的云服务,从 Azure 检索映像,使用检索的映像创建名为 FTPInstance 的 VM,将 VM 设置为使用 ILPIP,并将 VM 添加到新服务:

New-AzureService -ServiceName FTPService -Location "Central US"

$image = Get-AzureVMImage|?{$_.ImageName -like "*RightImage-Windows-2012R2-x64*"}

#Set "current" storage account for the subscription. It will be used as the location of new VM disk

Set-AzureSubscription -SubscriptionName <SubName> -CurrentStorageAccountName <StorageAccountName>

#Create a new VM configuration object

New-AzureVMConfig -Name FTPInstance -InstanceSize Small -ImageName $image.ImageName `
| Add-AzureProvisioningConfig -Windows -AdminUsername adminuser -Password MyP@ssw0rd!! `
| Set-AzurePublicIP -PublicIPName ftpip | New-AzureVM -ServiceName FTPService -Location "Central US"

如果要将另一个存储帐户指定为新 VM 磁盘的位置,可以使用 MediaLocation 参数:

	New-AzureVMConfig -Name FTPInstance -InstanceSize Small -ImageName $image.ImageName `
	 -MediaLocation https://management.core.windows.net/<SubscriptionID>/services/storageservices/<StorageAccountName> `
	| Add-AzureProvisioningConfig -Windows -AdminUsername adminuser -Password MyP@ssw0rd!! `
	| Set-AzurePublicIP -PublicIPName ftpip | New-AzureVM -ServiceName FTPService -Location "Central US"

如何检索 VM 的 ILPIP 信息

若要查看使用上一脚本创建的 VM 的 ILPIP 信息,请运行以下 PowerShell 命令并观察 PublicIPAddress 的值,并 PublicIPName

Get-AzureVM -Name FTPInstance -ServiceName FTPService

预期输出:

DeploymentName              : FTPService
Name                        : FTPInstance
Label                       : 
VM                          : Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVM
InstanceStatus              : ReadyRole
IpAddress                   : 100.74.118.91
InstanceStateDetails        : 
PowerState                  : Started
InstanceErrorCode           : 
InstanceFaultDomain         : 0
InstanceName                : FTPInstance
InstanceUpgradeDomain       : 0
InstanceSize                : Small
HostName                    : FTPInstance
AvailabilitySetName         : 
DNSName                     : http://ftpservice888.cloudapp.net/
Status                      : ReadyRole
GuestAgentStatus            : 	Microsoft.WindowsAzure.Commands.ServiceManagement.Model.GuestAgentStatus
ResourceExtensionStatusList : {Microsoft.Compute.BGInfo}
PublicIPAddress             : 104.43.142.188
PublicIPName                : ftpip
NetworkInterfaces           : {}
ServiceName                 : FTPService
OperationDescription        : Get-AzureVM
OperationId                 : 568d88d2be7c98f4bbb875e4d823718e
OperationStatus             : OK

如何从 VM 中删除 ILPIP

若要删除上一脚本中添加到 VM 的 ILPIP,请运行以下 PowerShell 命令:

Get-AzureVM -ServiceName FTPService -Name FTPInstance | Remove-AzurePublicIP | Update-AzureVM

如何将 ILPIP 添加到现有 VM

若要将 ILPIP 添加到使用上一脚本创建的 VM,请运行以下命令:

Get-AzureVM -ServiceName FTPService -Name FTPInstance | Set-AzurePublicIP -PublicIPName ftpip2 | Update-AzureVM

管理云服务角色实例的 ILPIP

若要将 ILPIP 添加到云服务角色实例,请完成以下步骤:

  1. 通过完成 如何配置云服务 一文中的步骤下载云服务的 .cscfg 文件。

  2. 通过添加 InstanceAddress 元素更新 .cscfg 文件。 以下示例将名为 MyPublicIP 的 ILPIP 添加到名为 WebRole1的角色实例中:

     <?xml version="1.0" encoding="utf-8"?>
     <ServiceConfiguration serviceName="ILPIPSample" xmlns="https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2014-01.2.3">
       <Role name="WebRole1">
         <Instances count="1" />
           <ConfigurationSettings>
     	<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
           </ConfigurationSettings>
       </Role>
       <NetworkConfiguration>
         <AddressAssignments>
           <InstanceAddress roleName="WebRole1">
     	<PublicIPs>
     	  <PublicIP name="MyPublicIP" domainNameLabel="WebPublicIP" />
             </PublicIPs>
           </InstanceAddress>
         </AddressAssignments>
       </NetworkConfiguration>
     </ServiceConfiguration>
    
  3. 通过完成 如何配置云服务 一文中的步骤上传云服务的 .cscfg 文件。

如何检索云服务的 ILPIP 信息

若要查看每个角色实例的 ILPIP 信息,请运行以下 PowerShell 命令并观察 PublicIPAddressPublicIPNamePublicIPDomainNameLabelPublicIPFqdns的值:

Add-AzureAccount

$roles = Get-AzureRole -ServiceName <Cloud Service Name> -Slot Production -RoleName WebRole1 -InstanceDetails

$roles[0].PublicIPAddress
$roles[1].PublicIPAddress

还可以使用 nslookup 查询子域的 A 记录:

nslookup WebPublicIP.0.<Cloud Service Name>.cloudapp.net

后续步骤