第一部分 介绍性第二部分 配置防火墙和NAT规则第三部分。 DHCP设置第四部分 路由设置上次我们从静态和动态路由的角度讨论了NSX Edge的功能,今天我们将讨论平衡器。
在进行设置之前,我想简要回顾一下平衡的主要类型。
理论
当今,所有有效负载平衡解决方案通常都分为两类:
OSI模型的第四(传输)和第七(应用)级别的平衡。 描述平衡方法时,OSI模型不是最佳参考点。 例如,如果L4平衡器还支持TLS终止,那么它是否会成为L7平衡器? 但这就是。
- L4平衡器通常是站在客户端和一组可用的中间代理后端之间的平衡器 ,它终止TCP连接(即独立响应SYN),选择一个后端并向其方向发起新的TCP会话,从而发送SYN本身。 此类型是基本类型之一,其他选项也是可能的。
- L7平衡器比L4平衡器“更复杂”地将流量分配到可用后端。 他可以根据例如HTTP消息(URL,Cookie等)的内容来确定后端。
无论哪种类型,平衡器都可以支持以下功能:
- 服务发现是确定一组可用后端(静态,DNS,领事,Etcd等)的过程。
- 检查检测到的后端的运行状况(使用HTTP请求对后端进行主动“ ping”,对TCP连接中的问题进行被动检测,在连续的答案中是否存在多个503 HTTP代码等)。
- 平衡自身(轮询,随机选择,源IP哈希,URI)。
- TLS终止和证书验证。
- 与安全性相关的选项(身份验证,DoS攻击预防,速度限制)等等。
NSX Edge支持两种平衡器部署模式:
代理模式或单臂模式 。 在这种模式下,当向后端之一发送请求时,NSX Edge会将其IP地址用作源地址。 因此,平衡器同时执行源和目标NAT功能。 后端看到从平衡器发送的所有流量,并直接对其进行响应。 在此方案中,平衡器必须与内部服务器位于同一网段中。
这是怎么回事:
- 用户向Edge上配置的VIP地址(平衡器地址)发送请求。
- Edge选择一个后端并执行目标NAT,将VIP地址替换为所选后端的地址。
- Edge运行源NAT,用自己的地址替换发送请求的用户的地址。
- 数据包发送到选定的后端。
- 后端不会直接响应用户,而是直接响应Edge,因为用户的原始地址已更改为平衡器的地址。
- Edge将服务器响应发送给用户。
方案如下。
透明或内联模式。 在这种情况下,平衡器在内部和外部网络中都有接口。 但是,不能从外部直接访问内部网络。 内置的负载平衡器充当内部网络上虚拟机的NAT网关。
机制如下:
- 用户向Edge上配置的VIP地址(平衡器地址)发送请求。
- Edge选择一个后端并执行目标NAT,将VIP地址替换为所选后端的地址。
- 数据包发送到选定的后端。
- 后端接收到具有用户原始地址的请求(未执行源NAT),并直接对其进行响应。
- 流量平衡器再次接受流量,因为在串联方案中,流量通常充当服务器场的默认网关。
- Edge运行源NAT,以其VIP作为源IP地址将流量发送给用户。
方案如下。

练习
在我的测试平台上,配置了3台使用Apache的服务器,这些服务器配置为可在HTTPS上运行。 Edge将使用循环方法平衡HTTPS请求,将每个新请求代理到新服务器。
让我们开始吧。
生成将使用NSX Edge的SSL证书
您可以导入有效的CA证书或使用自签名证书。 在此测试中,我将使用自签名。
- 在vCloud Director界面中,转到Edge服务设置。

- 转到“证书”选项卡。 从操作列表中,选择添加新的CSR。

- 填写必填字段,然后单击“保留”。

- 选择新创建的CSR,然后选择“自签名CSR”选项。

- 选择证书有效期,然后单击“保留”

- 自签名证书出现在可用列表中。

配置应用程序配置文件
应用程序配置文件使您可以更好地控制网络流量,并使管理变得简单而高效。 在他们的帮助下,您可以确定特定流量类型的行为。
- 转到“负载平衡器”选项卡,然后打开平衡器。 这里的“启用加速”选项允许平衡器使用更快的L4平衡而不是L7。

- 转到“应用程序配置文件”选项卡以设置应用程序配置文件。 单击+。

- 设置配置文件名称,然后选择要应用配置文件的流量类型。 我将解释一些参数。
持久性 -保存和跟踪会话数据,例如:池中的哪个特定服务器正在处理用户请求。 这样可以确保在会话或后续会话的整个生命周期内将用户请求发送到同一池成员。
启用SSL直通 -选择此选项时,NSX Edge停止终止SSL。 而是直接在执行平衡的服务器上终止。
插入X-Forwarded-For HTTP标头 -允许您确定通过平衡器连接到Web服务器的客户端的源IP地址。
启用池侧SSL-允许您指定所选池由HTTPS服务器组成。

- 由于我将平衡HTTPS流量,因此需要启用“池侧SSL”并在“虚拟服务器证书”->“服务证书”选项卡中选择先前生成的证书。

- 对于池证书->服务证书也是如此。

我们创建服务器池,池将平衡到的流量
- 转到“池”选项卡。 单击+。

- 设置池名称,选择算法(我将使用轮询)和监视类型以进行后端的运行状况检查。“透明”选项指示内部服务器是否可见初始源IP客户端。
- 如果禁用此选项,则内部服务器的流量来自平衡器的源IP。
- 如果启用此选项,内部服务器将看到源IP客户端。 在此配置中,NSX Edge必须充当默认网关,以确保返回的数据包通过NSX Edge。
NSX支持以下平衡算法:
- IP_HASH-基于每个数据包的源IP和目标IP的哈希函数结果的服务器选择。
- LEASTCONN-平衡传入连接,具体取决于特定服务器上已经可用的数量。 新连接将以最少的连接数定向到服务器。
- ROUND_ROBIN-根据指定的权重将新的连接依次发送到每个服务器。
- URI - URI的左侧部分(问号之前)经过哈希处理并除以池中服务器的总权重。 结果表明哪台服务器接收到该请求,并确保只要所有服务器都保持可用,该请求就始终路由到同一台服务器。
- HTTPHEADER-基于特定的HTTP标头进行平衡,可以将其指定为参数。 如果标题丢失或没有任何意义,则使用ROUND_ROBIN算法。
- URL-每个HTTP GET请求都搜索指定为参数的URL参数。 如果参数后跟等号和值,则该值将被散列并除以正在运行的服务器的总权重。 结果表明哪个服务器接收到该请求。 此过程用于跟踪请求中的用户ID,并确保只要所有服务器都保持可用状态,便始终将同一用户ID发送到同一服务器。

- 在“成员”块中,单击+将服务器添加到池中。

在这里您需要指定:
- 服务器名称
- 服务器IP地址;
- 服务器将接收流量的端口;
- 健康检查端口(监视器健康检查);
- 权重-使用此参数,您可以调整池中特定成员的接收流量的比例;
- 最大连接数-与服务器的最大连接数;
- 最小连接数-在将流量重定向到下一个池成员之前,服务器必须处理的最小连接数。

这就是三个服务器的最终池的外观。

添加虚拟服务器
- 转到“虚拟服务器”选项卡。 单击+。

- 我们使用“启用虚拟服务器”激活虚拟服务器。
我们给它起一个名字,选择先前创建的“应用程序配置文件”,“池”,并指定虚拟服务器将接受外部请求的IP地址。 指定HTTPS协议和端口443。
此处的可选参数:
连接限制 -虚拟服务器可以处理的最大同时连接数;
连接速率限制(CPS) -每秒新传入请求的最大数量。

这样就完成了平衡器的配置,您可以检查其性能。 服务器具有最简单的配置,它使您能够了解池中哪个服务器处理了请求。 在设置过程中,我们选择了Round Robin平衡算法,每个服务器的权重参数等于1,因此每个下一个请求将由池中的下一个服务器处理。
在浏览器中输入平衡器的外部地址,然后查看:

刷新页面后,以下服务器将处理请求:

再次-从池中检查第三个服务器:

检查时,您可以看到Edge发送给我们的证书与我们一开始就生成的证书相同。
从Edge网关控制台检查平衡器的状态。 为此,输入
show service loadbalancer pool 。

配置服务监视器以检查池中服务器的状态
使用服务监视器,我们可以监视后端池中服务器的状态。 如果对请求的响应与预期的不匹配,则可以将服务器从池中撤出,以使其不接收任何新请求。
默认情况下,配置了三种验证方法:
创建一个新的。
- 进入“服务监控”页签,单击“ +”。

- 选择:
- 新方法的名称;
- 发送请求的间隔,
- 响应超时
- 监视类型为使用GET方法的HTTPS请求,预期状态代码为200(确定),并且请求URL。
- 这样就完成了新服务监视器的配置,现在我们可以在创建池时使用它。

配置申请规则
应用程序规则是一种基于特定触发器操纵流量的方法。 使用此工具,我们可以创建高级负载平衡规则,这些规则可能无法通过应用程序配置文件或使用Edge Gateway上的其他服务进行配置。
- 要创建规则,请转到平衡器的“应用程序规则”选项卡。

- 选择一个名称,一个将使用该规则的脚本,然后单击“保留”。

- 创建规则后,我们需要编辑已经配置的虚拟服务器。

- 在“高级”选项卡中,添加我们创建的规则。

在上面的示例中,我们包括了tlsv1支持。
还有更多示例:
将流量重定向到另一个池。
使用此脚本,如果主池不起作用,我们可以将流量重定向到另一个平衡池。 为了使规则生效,必须在平衡器上配置几个池,并且主池的所有成员必须处于关闭状态。 指定池的名称,而不是其ID。
acl pool_down nbsrv(PRIMARY_POOL_NAME) eq 0 use_backend SECONDARY_POOL_NAME if PRIMARY_POOL_NAME
将流量重定向到外部资源。
如果主池中的所有成员都处于关闭状态,则在这里我们会将流量重定向到外部网站。
acl pool_down nbsrv(NAME_OF_POOL) eq 0 redirect location http://www.example.com if pool_down
这里有更多示例。
这就是平衡器。 如果您有任何疑问,请提问,我准备回答。