自上次发布一系列 Horizon 相关文章后,随着产品变化,部分产品的配置方式也有变化。接下来两篇文章将讲述两种新的 UAG 负载均衡配置方式,作为对原来文章的补充。


UAG 负载均衡配置概述


之前的文章中提到,针对 UAG 的负载均衡,有三种配置方式:

  • 为 UAG 认证流量(及 USB 重定向等流量)配置 L7 负载均衡,为虚拟桌面流量配置 L4 负载均衡。此模式下所有流量均经过 LB,对外只需要一个 VIP 和一个域名;
  • 为 UAG 配置 L4 负载均衡,认证流量以及虚拟桌面流量均通过 LB 进行负载,再转发到后端的 UAG。此模式下所有流量均经过 LB,对外只需要一个 VIP 和一个域名。这种模式下不会做 SSL 卸载,所以开销相比第一种模式小,但可视化功能也相应减少;
  • 为 UAG 配置 N+1 负载均衡,仅为 UAG 认证流量配置 L7 负载均衡,桌面流量不经过 LB,直接发送给相应的 UAG。此模式下每个 UAG 必须有独立的互联网 IP+端口/域名。(注:N 表示 UAG 数量,1 表示一个负载均衡器 VIP)


后来官方的配置手册又新增了下列两种配置方式:


  • 使用 307 重定向为 UAG 配置 L7+L4 的负载均衡:
  • 这种方式和之前第一种 L7+L4 模式原理类似,只是配置方式有所不同。在此模式,Avi 会为 UAG 认证流量(及 USB 重定向等流量)配置 L7 负载均衡,为虚拟桌面流量配置 L4 负载均衡。此模式下所有流量均经过 LB;
  • 相比之前的配置模式,需要一个 VIP,但是会使用多个域名。


  • 使用 307 重定向为 UAG 配置 N+1 负载均衡:
  • 这种方式和之前的 N+1 模式原理类似,只是配置方式有所不同,原来 UAG 所有的 L7 流量均会经过 LB 中转,再转发给相应 UAG。在 307 这种配置模式下,仅有 Client 初始的请求会经过 LB,后续的认证请求会直接发给相应的 UAG 节点,不经过 LB;
  • 所有虚拟桌面流量直接发送给 UAG,不经过 LB。


在官方的配置手册中,建议使用 307 重定向的两种配置方式,原因是这两种配置方式可以很好地应对下列问题:

  • 有越来越多的用户使用 SAML 认证方式,这种方式下 SAML 重定向会影响 Client 的 Cookie ,进而影响负载均衡器的持久性;
  • 当用户的 PublicIP 发生变化时(比如 ISP 的出口地址发生变化,或者用户连接/断开了 VPN),导致负载均衡器的持久性不能按照预期工作;
  • 当多个用户使用同一个 SNAT 地址时(比如多个用户通过专线连接到数据中心,中间经过 NAT),负载均衡器较难均衡地将连接分散给多个 UAG。


为 UAG 配置负载均衡-方式 4

配置详情及流量路径如下图所示:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware以 Blast 协议为例,详细的网络访问关系如下:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_02

1. 前提配置-1

与 CS 的配置类似,Horizon 环境中配置 UAG 后,需要将所有 UAG 域名添加为信任。

在 Connection Server 的宿主机找到此目录“VMware\VMware View\Server\sslgateway\conf”,创建或编辑名为 locked.properties 的文件:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_03

修改后内容如下,保存并重启 Connection Server 生效。

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_04

2. 前提配置-2

在之前的版本中,所有 UAG 相关的域名解析均是一一对应,即 uag1.halfcoffee.com A 记录会指向 UAG1 这个节点的真实 IP,uag.halfcoffee.com A 记录会指向 UAG 的 VIP。

但是在 307 L4+L7 的配置下这块稍有变化,具体配置如下表:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_05

3. 将 UAG 添加到 IP 组

创建 IP 组,将两台 UAG 的真实地址加入其中,未来会被 UAG L7 的 Pool 调用:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_06

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_07

4. 为 UAG 创建 SSL 配置文件

​​此处可以复用中 Connection Server 的 SSL 配置文件。

5. 创建自定义健康检查策略

此处可以复用第三篇中 Connection Server 的健康检查策略。

6. 创建 UAG L7 池

在“应用程序>池”中,创建新的池,名称为 Horizon-UAG-L7-307-Pool, 默认服务器端口填写 443,负载均衡算法使用默认的最小连接数,复用 CS 的主动健康检查配置:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_08

复用 CS 的 SSL 配置文件:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_09

服务器成员使用之前创建的 IP 组:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_10

7. 创建 UAG L4 池

在“应用程序>池”中,创建新的池,创建新的池,名称为 Horizon-UAG-L4-307-Pool ,默认服务器端口填写 443,负载均衡算法使用默认的最小连接数,复用 CS 的主动健康检查配置:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_11

此池不需要通过 SSL 和后端服务器通信:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_12

服务器成员需要添加四个,分别为 UAG IP+ Blast 的 8443 和 PCoIP 4172:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_13

 其他配置保持默认不变。

8. 为 UAG 创建服务器证书

此处使用的是 *.halfcoffee.com 证书,可以和 Connection server 复用,因此不再重复创建证书(详见第三篇文章)。

9. 为 UAG 创建 L7 虚拟服务

在“应用程序>虚拟服务”中使用高级设置创建新的服务:

指定 VIP(此处 Avi 早期版本可以直接输入 IP,21.1.3 之后需要创建 VIP 对象,再在此处调用),使用系统默认的 System-Secure-HTTP-VDI 应用程序配置文件:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_14

服务端口配置 80 和 443(SSL),池选择之前创建的 UAG-L7-307-Pool,复用 Connection server 的 SSL 配置文件和证书:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_15

点击上方策略配置,添加下列 HTTP 请求策略:

  • 主机标头(Host Header)为 uag1.halfcoffee.com 时转发给 10.10.50.18;
  • 主机标头(Host Header)为 uag2.halfcoffee.com 时转发给 10.10.50.19;

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_16

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_17

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_18

HTTP 请求策略配置完成后截图:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_19

其他配置保持不变,点击保存。

10. 为 UAG 创建 L4 虚拟服务

在“应用程序>虚拟服务”中使用高级设置创建新的服务:

在 VIP 地址菜单中选择之前 L7 使用的 vsvip-Horizon-UAG-ROS-Cloud,应用程序配置文件选择“System-L4-Application”:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_20

在服务端口菜单中点击“切换到高级”:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_21分别添加下列端口:

UDP 443,TCP/UDP 4001~4002, TCP/UDP 5001~5002。(其中 4001 和 4002 会被分别转换到两台 UAG 的 8443 端口,5001 和 5002 会被分别转换到两台 UAG 的 4172 端口)

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_22

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_23

池选择之前创建的 UAG-L4-Pool:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_24

点击下一步,进入策略配置,添加 Datascript:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_25

新建一个 Datascript:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_26

填写名称,选择之前创建的 L4 Pool:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_27

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_28

输入下列 Datascript:

avi_port = avi.vs.port()
if avi_port == "4001" then
avi.pool.select("Horizon-UAG-L4-307-pool", "10.10.50.18", 8443)
elseif avi_port == "4002" then
avi.pool.select("Horizon-UAG-L4-307-pool", "10.10.50.19", 8443)
elseif avi_port == "5001" then
avi.pool.select("Horizon-UAG-L4-307-pool", "10.10.50.18", 4172)
elseif avi_port == "5002" then
avi.pool.select("Horizon-UAG-L4-307-pool", "10.10.50.19", 4172)
end


Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_29

配置完 Datascript 后点击保存:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_30

其他配置保持不变,点击保存。

11. 修改 UAG 的配置

在本文 307 配置下,每台 UAG 中的 PCoIP 外部 URL 需要填写成 UAG VIP。Blast 外部 URL 需要配置为相应 UAG 节点的 FQDN(注意:此 FQDN 会被解析到 UAG VIP,而非 UAG 的真实 IP):

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_31

接着点开更多配置,在主机重定向映射中添加 307 重定向规则,规则定义当用户通过 uag.halfcoffee.com 访问时,自动重定向到相应 UAG 的 FQDN uag1.halfcoffee.com:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_32

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_33

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_34

对第二台 UAG 节点进行类似的配置:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_35

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_负载均衡_36

(可选)为 UAG 配置 WAF

详见第五篇文章。

访问测试

通过网页访问 UAG 负载均衡后的域名 uag.halfcoffee.com,会注意到系统自动重定向为 UAG2 的域名,用户可以正常登陆并访问桌面:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VDI_37

在 Avi 侧可以看到详细的访问日志:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_38

通过 Horizon Client 进行测试,桌面访问正常:
Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_39

同样在 Avi 侧可以看到详细的访问日志:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_Horizon_40

Blast 协议:

Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_VMware_41

PCoIP 协议:Horizon 8 测试环境部署(9): UAG 负载均衡配置-3_虚拟桌面_42



本文完

参考文档:Avi for Horizon 架构指南:
https://avinetworks.com/docs/21.1/avi-horizon-reference-architecture-guide/Avi for Horizon 307 Single VIP 配置方式:https://avinetworks.com/docs/21.1/horizon-307-single-vip