自上次发布一系列 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
配置详情及流量路径如下图所示:
以 Blast 协议为例,详细的网络访问关系如下:
1. 前提配置-1
与 CS 的配置类似,Horizon 环境中配置 UAG 后,需要将所有 UAG 域名添加为信任。
在 Connection Server 的宿主机找到此目录“VMware\VMware View\Server\sslgateway\conf”,创建或编辑名为 locked.properties 的文件:
修改后内容如下,保存并重启 Connection Server 生效。
2. 前提配置-2
在之前的版本中,所有 UAG 相关的域名解析均是一一对应,即 uag1.halfcoffee.com A 记录会指向 UAG1 这个节点的真实 IP,uag.halfcoffee.com A 记录会指向 UAG 的 VIP。
但是在 307 L4+L7 的配置下这块稍有变化,具体配置如下表:
3. 将 UAG 添加到 IP 组
创建 IP 组,将两台 UAG 的真实地址加入其中,未来会被 UAG L7 的 Pool 调用:
4. 为 UAG 创建 SSL 配置文件
此处可以复用中 Connection Server 的 SSL 配置文件。
5. 创建自定义健康检查策略
此处可以复用第三篇中 Connection Server 的健康检查策略。
6. 创建 UAG L7 池
在“应用程序>池”中,创建新的池,名称为 Horizon-UAG-L7-307-Pool, 默认服务器端口填写 443,负载均衡算法使用默认的最小连接数,复用 CS 的主动健康检查配置:
复用 CS 的 SSL 配置文件:
服务器成员使用之前创建的 IP 组:
7. 创建 UAG L4 池
在“应用程序>池”中,创建新的池,创建新的池,名称为 Horizon-UAG-L4-307-Pool ,默认服务器端口填写 443,负载均衡算法使用默认的最小连接数,复用 CS 的主动健康检查配置:
此池不需要通过 SSL 和后端服务器通信:
服务器成员需要添加四个,分别为 UAG IP+ Blast 的 8443 和 PCoIP 4172:
其他配置保持默认不变。
8. 为 UAG 创建服务器证书
此处使用的是 *.halfcoffee.com 证书,可以和 Connection server 复用,因此不再重复创建证书(详见第三篇文章)。
9. 为 UAG 创建 L7 虚拟服务
在“应用程序>虚拟服务”中使用高级设置创建新的服务:
指定 VIP(此处 Avi 早期版本可以直接输入 IP,21.1.3 之后需要创建 VIP 对象,再在此处调用),使用系统默认的 System-Secure-HTTP-VDI 应用程序配置文件:
服务端口配置 80 和 443(SSL),池选择之前创建的 UAG-L7-307-Pool,复用 Connection server 的 SSL 配置文件和证书:
点击上方策略配置,添加下列 HTTP 请求策略:
- 主机标头(Host Header)为 uag1.halfcoffee.com 时转发给 10.10.50.18;
- 主机标头(Host Header)为 uag2.halfcoffee.com 时转发给 10.10.50.19;
HTTP 请求策略配置完成后截图:
其他配置保持不变,点击保存。
10. 为 UAG 创建 L4 虚拟服务
在“应用程序>虚拟服务”中使用高级设置创建新的服务:
在 VIP 地址菜单中选择之前 L7 使用的 vsvip-Horizon-UAG-ROS-Cloud,应用程序配置文件选择“System-L4-Application”:
在服务端口菜单中点击“切换到高级”:分别添加下列端口:
UDP 443,TCP/UDP 4001~4002, TCP/UDP 5001~5002。(其中 4001 和 4002 会被分别转换到两台 UAG 的 8443 端口,5001 和 5002 会被分别转换到两台 UAG 的 4172 端口)
池选择之前创建的 UAG-L4-Pool:
点击下一步,进入策略配置,添加 Datascript:
新建一个 Datascript:
填写名称,选择之前创建的 L4 Pool:
输入下列 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
配置完 Datascript 后点击保存:
其他配置保持不变,点击保存。
11. 修改 UAG 的配置
在本文 307 配置下,每台 UAG 中的 PCoIP 外部 URL 需要填写成 UAG VIP。Blast 外部 URL 需要配置为相应 UAG 节点的 FQDN(注意:此 FQDN 会被解析到 UAG VIP,而非 UAG 的真实 IP):
接着点开更多配置,在主机重定向映射中添加 307 重定向规则,规则定义当用户通过 uag.halfcoffee.com 访问时,自动重定向到相应 UAG 的 FQDN uag1.halfcoffee.com:
对第二台 UAG 节点进行类似的配置:
(可选)为 UAG 配置 WAF
详见第五篇文章。
访问测试
通过网页访问 UAG 负载均衡后的域名 uag.halfcoffee.com,会注意到系统自动重定向为 UAG2 的域名,用户可以正常登陆并访问桌面:
在 Avi 侧可以看到详细的访问日志:
通过 Horizon Client 进行测试,桌面访问正常:
同样在 Avi 侧可以看到详细的访问日志:
Blast 协议:
PCoIP 协议:
本文完
参考文档: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