HAProxy数据平面API 2.0

2020-05-16 07:54:40

HAProxy数据平面API的2.0版带来了一些令人兴奋的增强功能,这些增强释放了HAProxy灵活配置及其运行时功能的强大功能。

HAProxy数据平面API允许您使用HTTP RESTful命令动态管理您的HAProxy配置,2.0版的发布标志着一个重要的里程碑。此版本强调了HAProxy的运行时方面,使您能够管理映射文件、粘贴表、对等点、DNS解析器等。它还介绍了全局、默认、前端和后端部分中缺失的字段,但这些字段对于调优HAProxy的性能和安全性很重要。

HAProxy数据平面API是在去年6月与HAProxy 2.0一起引入的,响应了社区的号召,为HAProxy提供了一个现代API,允许用户以编程方式管理他们的负载均衡器。从那以后,它发展很快,随着这个版本的发布,它带来了一些与1.x版本截然不同的变化。API路径的前缀已经从/v1递增到/v2,您可以在/v2/docs找到嵌入在API中的文档。

在这篇文章中,您将看到新功能,并通过示例展示其实际功能。我们将介绍:

HAProxy数据平面API2.0给API规范带来了几个重大更改,这些更改被认为是突破性的更改,与版本1.0完全不同。您会发现/services/haproxy/configuration/default和/services/haproxy/configuration/backends端点中的cookie和Balance参数已经从字符串修改为对象,从而允许它们支持所有可用选项。出现在某些端点的请求正文中的id字段被重命名为index,因为我们认为这是一个更合适的术语。索引字段允许您指定希望规则在相同类型的其他规则中的显示顺序。您可以使用“0”将其指定为第一个规则。要将规则设置为最后一个规则,您需要获取当前规则的列表,并将最后一个索引递增1。

映射文件存储键-值对,HAProxy可以在运行时引用它们。通常,它用于根据请求的Host Header或URL路径做出第7层路由决策,例如查找要将客户端路由到哪个后端。与HAProxy配置本身相反,将此数据存储在文件中的最大优势是能够动态更改映射值。阅读我们的博客文章HAProxy Maps简介,了解地图文件的基础知识。

使用此版本的数据平面API,您可以将地图文件上传到HAProxy服务器并对其进行修改,而无需重新加载。具体方法如下:首先,如果希望在将映射文件上传到HAProxy服务器之后持久保存将来对其所做的更改,例如调用添加新条目,则在启动数据平面API时将名为--update-map-files的新标志设置为true。这允许它将数据写入磁盘,否则将上载初始文件,但将来的更改将仅保存在内存中。这将告诉它定期检查内存中的更改并将其写入磁盘。您还可以设置--map-dir来更改写入映射文件的目录,覆盖默认的/etc/haproxy/aps。必须事先创建目录。您还可以使用--update-map-files-Period定义将更改保存到磁盘的频率(以秒为单位)。默认为10秒。

四个新的API端点允许您上传、删除和管理其键-值对。

假设您在本地有一个名为urls.map的文件,其内容如下所示:

在本例中,URL路径被映射到您的HAProxy配置中定义的后端的名称。因此,对/api/的请求将被发送到BE_API后端。使用/services/haproxy/time/aps端点将此文件上载到HAProxy服务器:

接下来,使用/services/haproxy/configuration/backend_switching_rules端点创建一个后端交换规则,该规则根据URL路由客户端请求:

这将向HAProxy添加一个USE_BACKEND规则,该规则使用请求的URL路径作为输入,从映射文件中选择一个后端;如果请求的URL没有映射到任何值,则默认为BE_MAIN后端。下面的示例显示了它的实际操作:

添加后端切换规则后,您可以查询/services/haproxy/time/aps端点以查看您定义的所有映射文件:

您还可以通过调用/services/haproxy/time/aps_entry端点向映射文件添加新行。

或者,您可以通过将该行的键传递给同一端点来删除该行。如果路径包含斜杠或其他保留字符,请确保对路径进行URL编码,例如/api/:

条形表是嵌入在HAProxy中的快速内存存储,您可以使用它们来跟踪客户端行为,例如统计客户端在一段时间内发出的请求数量。这对于检测恶意行为、设置速率限制以及对API实施使用上限非常有用。在我们的博客文章“HAProxy棒桌简介”中了解更多关于棒桌的信息。

使用此版本的数据平面API,您可以实时获取有关条形表的信息,以查看它们的配置或获取它们捕获的数据。有三个新端点可用:

与在API的早期版本中一样,在使用/services/haproxy/configuration/backends端点创建后端时,可以通过附加ST棒_TABLE块来创建新的条形表。在这里,我们创建了一个名为login_request的新后端,并在其中添加了一个条形表:

或者,您可以通过在URL中包含其名称来查看特定的条形表定义。在此示例中,您将获得有关名为LOGIN_REQUESTS的条形表的信息:

当您在集群中运行两个HAProxy负载均衡器时,您希望在它们之间同步条形表数据,以便在故障转移时可用。例如,您希望共享会话持久化数据,以便将客户端发送到同一服务器,而不管它们通过哪个负载均衡器路由。或者,如果您在跟踪计数器,则希望该数据在辅助服务器上可用。这就是对等点配置的用武之地,因为它允许您定义辅助负载平衡器的位置,以便可以在后台传输数据。首先,让我们看看这在HAProxy配置中是什么样子,然后我们将看看如何使用数据平面API设置它。

对等配置节如下所示,您可以将其添加到每个负载均衡器:

你知道吗?您应该列出对等点列表中的所有节点,包括本地服务器。这样,您可以在所有节点上使用相同的列表,并且在重新加载后,它还有一个额外的好处,即在本地保留条形表数据,因为旧进程将使用自己的地址连接到新进程,并将其所有条目推送到新进程。

HAProxy数据平面API的2.0版允许您添加对等部分并使用节点填充它。添加了四个新端点:

添加新的对等点条目或返回指定对等点的已配置对等点条目列表部分

要添加新的对等节,请使用/services/haproxy/configuration/Peer_Section端点。在这里,我们添加一个名为lb_cluster的新对等体部分:

通过附加Peers参数在每个条形表上启用同步。在这里,我更新了您在Stick Tables部分中看到的login_Requests Stick表,并为其提供了一个Peers参数:

使用对等点是在负载均衡器之间共享条形表数据的一种便捷方式。但是,从一个节点传输的数据将覆盖另一个节点上的数据。例如,一个上的HTTP请求速率计数器将覆盖另一个上的计数器,这对于主动-被动方案很好。

你知道吗?HAProxy Enterprise支持在主动-主动集群中的节点之间聚合条形表数据。了解有关Stick Table聚合器功能的信息。

使用HAProxy,您可以使用IP地址或DNS名称将目标定位为后端服务器以实现负载均衡。解析器部分列出了要用于DNS的名称服务器;它允许您以多种方式自定义DNS解析,例如是否读取服务器的解析器.conf文件、HAProxy尝试解析主机名的频率以及HAProxy缓存查找的频率。

添加新的名称服务器或返回单个解析程序部分的所有已配置名称服务器。

使用/services/haproxy/configuration/解析器端点添加新的解析器部分。在此示例中,我们添加名为INTERNAL_DNS的部分并自定义其设置:

通过将解析器参数添加到后端的服务器行来配置要使用的解析器部分。下面是如何使用数据平面API,使用/services/haproxy/configuration/servers/{name}端点来实现这一点:

数据平面API还添加了其他功能,以释放负载均衡器的更多功能。以下是一个快速总结:

services/haproxy/time/info端点返回HAProxy的进程信息,与HAProxy运行时API中的show info命令相同。

现在,您可以使用/services/haproxy/configuration/全局端点在全局部分中设置以下指令:

您可以使用/services/haproxy/configuration/servers/{name}端点在后端服务器上设置以下字段:

现在可以使用/services/haproxy/configuration/http_request_rules端点创建使用Capture、Replace-Path和Track-sc操作的Http-Request指令。

/services/haproxy/configuration/tcp_request_rules端点现在支持所有tcp请求操作。您可以在HAProxy文档中看到完整的列表。

数据平面API的2.0版使其更上一层楼,使您可以动态访问HAProxy中的更多特性。现在,您可以使用HTTP RESTful命令管理映射文件、粘贴表、对等点和解析器。此外,还公开了许多其他较小但非常重要的设置,这意味着几乎没有什么是API不能完成的!

了解HAProxy Enterprise如何通过联系我们或注册免费试用来添加企业级功能、专业服务和高级支持!HAProxy Enterprise是业界领先的软件负载平衡器,可在任何规模、任何环境中支持现代应用程序交付。

想知道我们什么时候发布新闻吗?订阅我们的博客吧!您也可以在Twitter上关注我们,并加入Slake上的对话。