HAProxy - 动态更新 SSL 证书而无需重新加载

Eye*_*ulp 2 ssl haproxy

目前,我们使用 HAProxy 来管理数千个域的 TLS 终止,所有这些域都有定期轮换的 Let's Encrypt 证书。

相关配置如下所示:

frontend https-in

    bind *:443 ssl strict-sni no-sslv3 crt /usr/src/data/certs/
Run Code Online (Sandbox Code Playgroud)

并且/usr/src/data/certs/充满了一堆 .pem 文件。

SSL 证书一直在变化,因为它们单独需要续订,或者新域从我们的系统中添加/删除。现在,我们通过将所有证书批量写入/usr/src/data/certs/并执行 haproxy 的零停机重新加载来解决这个问题。这很麻烦,因为我们在重新加载期间会出现非常大的内存峰值,因为新实例会读取完整的证书负载,而旧实例会继续运行。

我们目前正在研究 HAProxy Unix Socket 命令的一些功能,并了解我们可以动态化的许多功能(ACL、映射等)。我想知道我们是否可以采取类似的方法来同步证书并避免不断的重新加载行为。

使用 HAProxy 1.9 进行实验,但我们并未为此选择任何特定版本。感谢您的任何帮助或建议!

更新我看到了bind 有关通过数据平面 API 进行操作的文档,但它没有明确指示如何或何时获取这些更改。由于它包含用于强制重新加载的布尔值(或默认为reload-delay设置的值),我猜测有一个假设需要重新加载。

如果有人有引用来证实这一假设,我将不胜感激。

小智 7

在 HAProxy 2.1(2019 年 11 月)中,一项新功能允许您更改 TLS 证书而无需重新加载:https ://www.haproxy.com/blog/dynamic-ssl-certificate-storage-in-haproxy/