在Rancher中使用letsencrypt (ACME v2)

2019-02-19  本文已影响0人  bysir

rancher中letsencrypt应用用于自动续签证书并且配置到SLB上.

在应用商店启动letsencrypt

image.png

有很多选项需要填写, 但只需要注意这个选项, 除此之外的全部默认即可.

挑战方式

在这里使用letsencrypt的http挑战方式最为方便和通用, 不知道什么是letsencrypt挑战的同学可以去找找资料.

添加/.well-known/acme-challenge路由到letsencrypt

启动应用后, 去看容器的日志, 发现

2019/2/19 上午10:30:33time="2019-02-19T02:30:33Z" level=info msg="Starting Let's Encrypt Certificate Manager v0.5.0 0913231"
2019/2/19 上午10:30:33time="2019-02-19T02:30:33Z" level=info msg="Generating private key (2048) for 1019654929@qq.com."
2019/2/19 上午10:30:34time="2019-02-19T02:30:34Z" level=info msg="Creating Let's Encrypt account for 1019654929@qq.com"
2019/2/19 上午10:30:36time="2019-02-19T02:30:36Z" level=info msg="Using Let's Encrypt Production API"
2019/2/19 上午10:30:36time="2019-02-19T02:30:36Z" level=info msg="Using HTTP challenge: Sleeping for 120 seconds before requesting certificate"
2019/2/19 上午10:30:36time="2019-02-19T02:30:36Z" level=info msg="Make sure that HTTP requests for '/.well-known/acme-challenge' for all certificate domains are forwarded to port 80 of the container running this application"

了解过letsencrypt的"挑战"机制的同学就应该明白最后一句话的意思.

现在需要我们将域名的/.well-known/acme-challenge路由转发(也就是代理)到这个应用以实现挑战. 如我要申请的域名是: bysir.top 那么需要将bysir.top/.well-known/acme-challenge 代理到letsencrypt应用.

具体如何转发, 如果网络服务器使用的不是rancher, 比如nginx, 就有点麻烦了, 不过也是能实现的, 这里不多说了.

如果你的网络服务器使用的是rancher的slb(负载均衡), 那么你只需要在slb添加一条代理规则:


打开letencrypt应用的日志, 稍等一会, 就能看到成功的提示. 如果不成功, 多多检查代理是否正确.

在letsencrypt应用签发证书期间(挑战期间), 可以通过访问bysir.top/.well-known/acme-challenge/xx 检查代理是否正确.
如果正确, 网址会返回404.

添加证书到SLB

letencrypt应用获取到证书之后, 会在Rancher->基础架构->证书中添加一个证书.

重新打开域名的SLB, 添加上https协议的代理, 并在底部选择刚才的证书即可.


证书

至此letencrypt应用就会自动续签证书并且更新到SLB上.

自定义haproxy.cfg

rancher支持自定义haproxy的配置, 这里只列举一个配置项: http跳转https. 其他配置请参考此

frontend 80
    redirect scheme https if !{ ssl_fc }

或者如果你想再判断一下域名跳转, 可以这样

frontend 80
    acl is_uc hdr_beg(host) -i bysit.top
    acl http ssl_fc,not
    redirect scheme https if is_uc http METH_GET

其中

升级到ACME v2

今天(2019/11/12)发现letsencrypt容器启动不了, 查看报错发现是因为ACME v1不再维护了: End of Life Plan for ACMEv1.

怎么办呢, 查看rancher的应用商店没发现有更新, 这个时候就需要去伟大的Github看看了.

幸运的事在rancher-letsencrypt找到了一个相关issue, Wildcard/ACME v2 support, 更幸运的是有一个位好心人评论到一个支持ACME v2的项目:

节约了大把生命

感谢, 现在仅仅需要点击升级将image替换为vxcontrol/rancher-letsencrypt:v1.0.0就好了

image.png
image.png
上一篇下一篇

猜你喜欢

热点阅读