我正在 Azure 上构建测试 Lync 部署;是的,我知道这不受支持,因此是“测试”。
Lync 前端服务器公开两组 Web 服务,一组用于内部用户,一组用于外部用户;它们在同一台服务器上侦听不同的端口(443 和 4443);当发布外部服务时,您需要反向代理或端口转发,以便将公共 IP 地址的端口 443 映射到前端服务器的端口 4443。当池中有多个前端服务器时,您还需要对它们进行负载平衡。
因此,典型的 Lync 部署如下所示:
Internal users
|
443
|
Internal LB
192.168.0.20
/ \
/ \
443 443
| |
Lync FE 1 Lync FE 2
192.168.0.21 192.168.0.22
| |
4443 4443
\ /
\ /
External LB
Public IP Address
|
443
|
External Users
这应该可以轻松在 Azure 中复制,因为它同时支持外部负载平衡(配置指南) 和内部负载平衡(配置指南)。它们甚至在同一个云服务中同时受支持,因此这种配置应该很容易。然而,看起来“应该”是这里的关键词。
创建外部负载平衡端点(侦听外部端口 443 并转发到服务器上的端口 4443)后,我尝试创建一个内部负载平衡器并向其添加内部端点;但是,虽然可以成功创建 ILB,但添加侦听端口 443 的内部端点并转发到服务器上的端口 443 却失败了,并出现错误,指出端口 443 已被另一个端点使用:
Update-AzureVM : BadRequest : Port 443 is already in use by one of the endpoints
in this deployment. Ensure that the port numbers are unique across endpoints
within a deployment.
作为参考,我的命令是:
Add-AzureInternalLoadBalancer -InternalLoadBalancerName "LyncILB" -ServiceName "LyncFrontEnd" -SubnetName "LabSubnet" -StaticVNetIPAddress 192.168.0.20
(此操作成功完成)
Get-AzureVM LYNCFE1 | Add-AzureEndpoint -Name "Https-Int" -Protocol "tcp" -LocalPort 443 -PublicPort 443 -LBSetName "HttpsIntLB" -DefaultProbe -InternalLoadBalancerName "LyncILB"
(失败)
现有的外部端点配置如下:
Get-AzureVM LYNCFE1 | get-azureendpoint
LBSetName : HttpsExtLB
LocalPort : 4443
Name : HTTPS-Ext
Port : 443
Protocol : tcp
Vip :
ProbePath :
ProbePort : 4443
ProbeProtocol : tcp
ProbeIntervalInSeconds : 15
ProbeTimeoutInSeconds : 31
EnableDirectServerReturn : False
Acl : {}
InternalLoadBalancerName :
IdleTimeoutInMinutes :
LoadBalancerDistribution :
这个错误甚至没有多大意义;外部负载均衡器监听公共 IP 地址,而内部负载均衡器监听内部网络中的私有 IP 地址;不应该这里有任何冲突……然而看起来却有一个。
为什么这不起作用?是我做错了什么,还是 Azure 网络又像往常一样愚蠢?
答案1
这个问题现在已没有意义了,因为 Azure 现在允许(并且已经允许了一段时间)使用内部和公共负载均衡器从相同的虚拟机公开相同的服务。
为什么需要使用两个完全不同的对象来完成完全相同的工作,只是前端 IP 地址不同,这仍然是个谜。但至少,现在你可以了。
答案2
刚刚在不同的部署中遇到了同样的问题。问题是您不能使用相同的后端 IP 池在同一个端口和协议上配置多个 LB 规则。
为了实现您的目标,您需要向机器添加额外的 NIC,并使用不同的 IP 来实现内部和外部平衡规则。或者,您可以为机器提供公共 IP,并在外部对其进行负载平衡(但是,您将机器暴露在互联网上,这通常是不可取的)。
希望有帮助!