实例级公共 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 添加到云服务角色实例,请完成以下步骤:
通过完成 如何配置云服务 一文中的步骤下载云服务的 .cscfg 文件。
通过添加
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>
通过完成 如何配置云服务 一文中的步骤上传云服务的 .cscfg 文件。
如何检索云服务的 ILPIP 信息
若要查看每个角色实例的 ILPIP 信息,请运行以下 PowerShell 命令并观察 PublicIPAddress、PublicIPName、PublicIPDomainNameLabel 和 PublicIPFqdns的值:
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