在Rancher中使用letsencrypt (ACME v2)
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
其中
- 80是http代理监听的端口号.
- METH_GET 表示只有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