Open xizhibei opened 4 years ago
哈喽想咨询下,负载均衡器的选择可以有哪些呢,具有Api能力的,我知道的有apisix但是他可能不支持海量的ssl证书
哈喽想咨询下,负载均衡器的选择可以有哪些呢,具有Api能力的,我知道的有apisix但是他可能不支持海量的ssl证书
海量?可能市面上的都支持不了, 有 API 能力的还有 Traefik
因为我在寻找一个适合的负载均衡器,可扩展好一些的,比如一个负载均衡器最大5k证书之后快速扩展新的,让用户CNAME到新的域名
这篇文章是接着上篇 SSL 界中 Linux:Let's Encrypt 写的。(是的,这周灵感不够 🙈 )
功能
上次说到,如果我们实现的 SaaS/SaaS 服务中的客户需要自定义域名,我们需要给客户提供相应的功能。这个功能大致如何运作?
因此,我们需要的功能,最关键的地方在于证书的获取以及部署,部署不用多说,我们一般部署在负载均衡器中,性能会比部署在 Web 服务中要好很多,而如果是云服务的负载均衡器的话,也可以通过相应的 API 去部署。
获取实现
接下来以 Golang 的 Web 服务来说明,我们用 lego 来实现。
首先让我们把 lego 文档上的代码抄过来,限于篇幅,删掉一些注释,以及修改一些代码:
这个例子足够我们进行下一步工作了。
如何与 SaaS/PaaS 服务结合
我们看到这个例子中:
HTTP-01
以及TLSALPN-01
来实现的,考虑到 SaaS/PaaS 服务中,我们无法控制客户的 DNS,因此只能用这两者来实现;TLSALPN-01
在云服务中,需要跟负载均衡器打交道,会比较麻烦,为了方便有效地实现,我们选用HTTP-01
;那么,我们的问题就简化为:如何在我们的 Web 服务中,实现
HTTP-01
。我在前面说过,Let's Encrypt 在
HTTP-01
中会返回token
与KeyAuth
给你,然后通过 HTTP 请求来验证你是否在控制这个域名,那么,在我们房子负载均衡后面的 Web 服务中,我们如何去响应 LE 的请求?很简单,放在数据库中,更具体点,那就是放在缓存(比如 Redis、Memcache)中,因为可以不用管过期删除的问题。
相对应的,我们可以通过 lego 的 Challenge Solver interface 来实现我们的 Solver:
我们用缓存实现 Preset,比如就把
keyAuth
存入'lego' + domain + token
对应的 key 中,然后等待 LE 访问/.well-known/acme-challenge/:token
这个接口,返回 keyAuth 即可。获取证书后,记得先把存入数据库,再部署至负载均衡器,并且还要周期性地更新证书。
最后,如果你的客户量比较多,记得要向 LE 申请配额,不然会超过频率限制,这点很容易忘,而且你需要考虑申请通过的时间,不会太快。
P.S.
其实 Lego 内置了 Memcache 的 Solver。