是否可以在同一个 Azure 云服务中同时使用 ILB 和 ELB(监听同一个端口)?

是否可以在同一个 Azure 云服务中同时使用 ILB 和 ELB(监听同一个端口)?

我正在 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,并在外部对其进行负载平衡(但是,您将机器暴露在互联网上,这通常是不可取的)。

希望有帮助!

相关内容