美文网首页
在Rancher中使用letsencrypt (ACME v2)

在Rancher中使用letsencrypt (ACME v2)

作者: bysir | 来源:发表于2019-02-19 10:56 被阅读0次

    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
    image.png

    相关文章

      网友评论

          本文标题:在Rancher中使用letsencrypt (ACME v2)

          本文链接:https://www.haomeiwen.com/subject/fqrxyqtx.html