内部负载平衡
我们非常高兴地宣布Azure对“内部负载平衡”(ILB) 的支持。利用内部负载平衡 (ILB),可以通过私有 IP 地址运行高可用服务,而私有 IP 地址只能在云服务或虚拟网络 (VNet) 内访问,因此为该终端提供了额外的安全性。ILB 终端在虚拟网络内使用时,也可从允许一些强大混合场景的内部部署和其他互相连接的 VNet 进行访问。
可通过两种方式使用 ILB
- 在云服务内,从 Azure 私有 IP 地址空间获取负载平衡的 IP
- 在虚拟网络内,从客户指定的虚拟子网或静态 VNet IP 地址中获取负载平衡的 IP。
关键场景
ILB和当前 Azure 的公共负载平衡相比, 增强了安全性。它限制了可访问性,并创建了指向云服务或虚拟网络的负载平衡虚拟 IP 地址之间的信任边界,不需要公用 Internet。这样,内部的业务线应用程序便能够在 Azure 内运行,并可从云或内部部署访问。以下部分列出了一些常见用例:
- 应用程序层和后端数据库可通过 ILB 运行,所以不会暴露给公用 Internet,但通过负载平衡仍可获得高可用性。这在安全增强方面是一次巨大的飞跃。
- ILB VIP 通过安全的 IP 安全隧道,可以在整个虚拟网络、内部部署以及互相连接的 VNet 访问。这样,将前端 VIP 放在 ILB,就可以运行面向 Intranet(仅适用于公司网络)的 SharePoint 服务器场,如下图中所示:
使用说明
当前,内部负载平衡仍在预览阶段,并将在不久的将来正式发布 (GA)。您可在此处找到有关 ILB 的详细说明文档
目前无法通过门户配置内部负载平衡,未来将支持此操作。但可以使用 Powershell cmdlet 配置。在区域虚拟网络内进行部署时或在虚拟网络外进行新部署时可以使用 ILB。以下部分将概述这两种类型的用法。
区域虚拟网络内的 ILB
- 区域虚拟网络云服务中创建的 ILB 终端,可在整个虚拟网络、互相连接的 VNet 以及内部部署站点访问。
- 以下代码段示例说明了在区域虚拟网络“VNetUSWest”内部署的云服务中如何配置内部负载平衡器。在此处可了解关于区域虚拟网络的更多信息
- 在 VNet 内使用 ILB 时,从 VNet 地址空间还可以指定内部负载平衡器的子网,甚至更精确,可以指定 IP 地址。
# VM Configuration
$web1 =New-AzureVMConfig-Name"web1"-InstanceSizeSmall-ImageName<imagename>|Add-AzureProvisioningConfig-Windows-AdminUsername<username>-Password<password>|Set-AzureSubnetFrontEndSubnet
$web2 =New-AzureVMConfig-Name"web2"-InstanceSizeSmall-ImageName<imagename>|Add-AzureProvisioningConfig-Windows-AdminUsername<username>-Password<password>|Set-AzureSubnetFrontEndSubnet
# Create the Deployments
New-AzureVM-ServiceName"MyWebsite1"-VMs $web1 -Location"West US"-VNetNameVNetUSWest
New-AzureVM-ServiceName"MyWebsite1"-VMs $web2 -Location"West US"
# Add Internal Load Balancer to the service
Add-AzureInternalLoadBalancer-InternalLoadBalancerNameMyILB-SubnetNameFrontEndSubnet-ServiceNameMyWebsite1
# Add load balanced endpoints to ILB
Get-AzureVM-ServiceNameMyWebsite1-Name web1 |Add-AzureEndpoint-Name"intwebep"-LBSetName"intwebeplb"-Protocol tcp -LocalPort100-PublicPort100-ProbePort100-ProbeProtocol tcp -ProbeIntervalInSeconds10-InternalLoadBalancerNameMyILB|Update-AzureVM
Get-AzureVM-ServiceNameMyWebsite1-Name web2 |Add-AzureEndpoint-Name"intwebep"-LBSetName"intwebeplb"-Protocol tcp -LocalPort100-PublicPort100-ProbePort100-ProbeProtocol tcp -ProbeIntervalInSeconds10-InternalLoadBalancerNameMyILB|Update-AzureVM
- 在本示例中,ILB 将从子网“FrontEndSubnet”中获取 IP。
- 可使用 cmdlet 获取 ILB 相关信息,如下所示:
# Get Internal Load balancer information
Get-AzureService-ServiceNameMyWebsite1|Get-AzureInternalLoadBalancer
# Get the ILB information on an endpoint
Get-AzureVM-ServiceNameMyWebsite1-Name web1 |Get-AzureEndpoint
- 在本示例中,ILB 将从子网“FrontEndSubnet”中获取 IP。
- 可使用 cmdlet 获取 ILB 相关信息,如下所示:
# 获取内部负载平衡器信息
Get-AzureService -ServiceName MyWebsite1 | Get-AzureInternalLoadBalancer
# 获取终端的 ILB 信息
Get-AzureVM -ServiceName MyWebsite1 -Name web1 | Get-AzureEndpoint
云服务内的 ILB
- 在区域虚拟网络外部的云服务中创建的 ILB 终端只能在此云服务内访问。
- 必须在云服务创建第一个部署时设置 ILB 配置,如下面的 cmdlet 示例所示。
# 创建本地 ILB 对象
$myilbconfig = New-AzureInternalLoadBalancerConfig -InternalLoadBalancerName "MyILB"
# 为新服务添加内部负载平衡器
New-AzureVMConfig -Name "Instance1" -InstanceSize Small -ImageName <imagename> | Add-AzureProvisioningConfig -Windows -AdminUsername <username> -Password <password> | New-AzureVM -ServiceName "Website2" -InternalLoadBalancerConfig $myilbconfig -Location "West US"
常见问题
1. 我能否将 ILB 添加到我在虚拟网络中的现有部署?
只有在虚拟网络是区域虚拟网络时才能执行此操作。但在不久的将来,所有虚拟网络都将转换成一个区域虚拟网络,届时将可能实现此操作。
2. 在 “SQL 始终打开 ” 的情况下我能否使用 ILB ?
现在还不能。很快即将发布此支持。
3. 我已经有一个负载平衡终端在区域虚拟网络部署中,我能否将此终端连接到 ILB ?
不能。应在创建终端时引用 ILB。常规终端不可能转换成 ILB 终端,反之亦然。很快即将支持此功能。
4. ILB 能否用于终端 ACL ?
可以,ILB 可以用于终端 ACL。ACL 用于区域虚拟网络时,通过限制甚至在虚拟网络内部的访问,可在客户 IP 地址空间中使用 ACL。
5. 如果在我的虚拟机上设置了 ILB ,从相同虚拟机上进行的 “ 回路 ”(loopback) 能否在负载平衡的 VIP 上运行?
不会。您无法从正在进行负载平衡的相同虚拟机访问 ILB VIP。
6. 我能否在 PaaS 服务 (Web role/Worker role) 上使用 ILB ?
ILB 还设计为可用于 Web role/Worker role,但目前尚未在服务模型 (cscfg/csdef) 中公开。很快即将支持此功能。
本文翻译自:https://azure.microsoft.com/blog/2014/05/20/internal-load-balancing/