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

实例层级公共 IP (ILPIP) 是可直接分配至 VM 或云服务角色实例(而非 VM 或角色实例所在的云服务)的公共 IP 地址。 ILPIP 不会取代分配给云服务的虚拟 IP (VIP)。 而是可以用来直接连接到 VM 或角色实例的其他 IP 地址。

重要

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

Difference between ILPIP and 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 VM 不支持 LIPID。

为什么要请求 ILPIP?

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

  • 主动 FTP - 通过向 VM 分配 ILPIP,可在任何端口上接收流量。 VM 不需要终结点来接收流量。 请参阅 FTP 协议概述了解有关 FTP 协议的详细信息。
  • 出站 IP - 源自 VM 的出站流量会映射到充当源的 ILPIP,而 ILPIP 唯一标识针对外部实体的 VM。

注意

ILPIP 地址以前被称为公共 IP (PIP) 地址。

管理 VM 的 ILPIP

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

在 VM 创建期间如何使用 PowerShell 请求 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 命令,并观察 PublicIPAddressPublicIPName 的值:

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

如何向现有 VM 添加 ILPIP

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

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

后续步骤