介绍
使用 TLS/SSL保护 Web 应用程序通常只被认为是处理敏感信息的应用程序所必需的,因为获得官方证书需要额外的设置,因此我们可以自动创建官方证书,无需任何费用,这意味着我们可以将此级别的安全性添加到任何网站中。
Rancher通过易于使用的仪表板以直观的方式管理Docker容器。Rancher有一个(http://docs.rancher.com/rancher/v1.4/en/catalog/)我们可以即时部署的应用程序目录,包括可以生成证书的Let’s Encrypt服务,并在需要时也会进行更新。
设置Let’s Encrypt in Rancher的过程包括三个主要步骤:我们部署了Let’s Encrypt服务,我们将其生成的证书应用于负载平衡器,我们设置了HTTP到HTTPS重定向。
<$>[注] 注: 截至 2022 年 12 月 15 日,DigitalOcean 将不再支持通过控制面板或 API 创建新的 RancherOS 滴滴,但是,在 2022 年 12 月 15 日之前创建的任何现有的 RancherOS 滴滴将仍然可用,尽管产品出现了变化。
前提条件
要完成本教程,您将需要:
- 1GB Ubuntu 16.04 服务器安装了Rancher。 要配置此选项, 请遵循教程 [如何在 Ubuntu 16. 04 (https://andsky.com/tech/tutorials/how-to-manage-multi-node-deployments-with-rancher-and-docker-machine-on-ubuntu-16-04) 上管理 Rancher 和 Docker Machine 的多节点部署 。 您将在该教程中创建额外的服务器, 它将作为您的 Docker 容器的主机 。
- 使用 Rancher 配置的应用程序使用 Rancher 的内置负载平衡器服务 。 尽管您可以通过任何应用程序, 包括 Rancher 目录中的应用程序来跟踪此教程, 您也可以查看我们的指南 , [如何在 Ubuntu 16. 04 (https://andsky.com/tech/tutorials/how-to-deploy-a-node-js-and-mongodb-application-with-rancher-on-ubuntu-16-04) 上部署 Rancher 的 Node.js 和 MongoDB 应用程序以启动 。 无论选择哪条路由,确保您的配置使用Rancher的内置负载平衡器服务,将请求转发到应用程序容器.
- 一个完全合格的域名(FQDN),其中有A的‘你的域'记录,它指向运行Rancher Load Balancer 服务的主机的公开IP地址. 这是需要的,因为让我们加密如何验证您拥有它所颁发的证书的域 。 您可以跟随教程 [如何用 DigitalOcean (https://andsky.com/tech/tutorials/how-to-set-up-a-host-name-with-digitalocean) 来配置此记录 。 在开始此教程前, 请确保您可以在 http://your_ domain 上查看您的应用程序 。 (英语)
步骤 1 – 部署 Let’s Encrypt 服务
我们将部署 Let’s Encrypt 服务作为 Docker 容器,该服务将托管在我们的 Rancher 主机中之一。 该过程包括从 Rancher 目录中选择 Let’s Encrypt 服务并填写所需信息。 完成此步骤后,您将在 Rancher 中获得证书。 最重要的是,当证书即将到期时,该服务将自动更新证书,而无需您进一步采取任何行动。
首先,点击 Rancher 用户界面顶部的 **Catalog ** 菜单,前往 **Rancher Catalog **,然后搜索 Let’s Encrypt 服务。一旦您找到它,请点击 View Details 按钮,然后按照以下步骤配置该服务:
- 联合国 选择最新的模板版本 。 此教程使用版本 **0. 4. 0 ** 。
- 给新应用程序堆栈一个显著的名称. 我们在此教程中称其为"证书",但任何名字都会奏效.
- 在读取信息后, 如果您同意这些条件, 请选择** 是** 选项 。
- 选择
让我们加密API
的生产版本。 - 在 你的电子邮件地址 字段中输入您的有效电子邮件地址。
- 对于证书名称,输入证书名称,以便您可以在Rancher的用户界面中轻松识别. 您可以为此使用您的域名.
- 对于域名,输入要保护的域名. 如果您想要保护多个域,请输入每个域,用逗号分隔.
- 对于公钥算法,选择默认的RSA-2048,这是网络应用中最常用的算法,或者选择一个适合您需要的算法.
- 对于 ** 续约时间** 选择当天的时间,在协调世界时,您要在其中续签证书. 默认值为12,除非有某些具体限制,否则将有效。
- 对于域验证方法,请为此教程选择HTTP. 还有其他方法,您可以选择用于您域的 DNS 提供者的工作 。 DigitalOcean与Cloudflare, DNSUPLE, Dyn, Gandi, Ovh, Route53和Vultr一同被列在列表中. ** HTTP ** 选项不管提供者如何都有效,是我们将用于此教程的方法。
- 其余领域与特定的DNS供应商有关. 既然你选择了HTTP方法,你可以把它们留作空白.
- 下一个,在创建** 复选框后取消检查**Start服务. 在进行一些额外的配置修改后,我们开始服务.
- 最后,点击页面下方的Launch按钮启动服务并等待部署. (英语)
接下来,我们需要告诉Racher的负载平衡服务将/.已知/acme-challenge
的请求转发到我们的新的 Certificate服务。
- 在Rancher 中查找你的负载平衡器服务,然后点击其 Upgrade/Edit按钮。
- 添加新的 Service Rule.
- 对于新的规则:
- 确保 Access设置为 Public.
- 确保 Protocol设置为 HTTP.
- 确保 Port设置为
80
. - 将 Path设置为
/.已知/acme-challenge
. - 将 Target设置为 Certificate服务。
- 按下这个新服务的 Up箭头以确保它是列表中的
有了新的规则,开始使用 Let’s Encrypt 服务:
- 在接口的顶部选择 **Stacks ** 菜单来查找您的 Certificate 堆栈。 2 选择 Certificates 堆栈来显示 letsencrypt 服务。 3 按一下 Start 按钮来启动服务。
在此时, Let’s Encrypt 服务应该运行,并创建证书。该过程可能需要 5 到 15 分钟。选择 Infrastructure 菜单,然后选择 Certificates 以查看证书。
步骤 2 – 将证书与应用程序链接
一旦Let’s Encrypt证书在Rancher中可用,您可以选择它用于Rancher Load Balancer服务。 要做到这一点,您将更改您的Load Balancer中的规则以使用HTTPS并应用该证书。
- 在Rancher中找到你的负载平衡器服务,并按其 Upgrade/Edit按钮访问其设置。
- 在 Port Rules 部分中,寻找向你的应用程序提交请求的条目,并将 Protocol 更改为 HTTPS,并将 Request Host Port 更改为 443,这是 HTTPS 的默认端口。 3 进入页面底部的 SSL 终止 卡,并在 Certificate 字段中选择您想要使用的证书。 如果您想添加多个证书,您可以在 Alternate Certs 字段中选择它们。当您选择证书时,它会自动链接到相应的域。
如果您使用 HTTPS 协议访问网站(‘https://your_domain’),您可以看到该连接现在是安全的,但由于您将端口 80’ 用端口
443’ 更换,任何通过 HTTP 进行的请求将不再起作用。 为了解决这个问题,我们可以简单地重新添加我们以前的 HTTP 和端口 `80 规则,但相反,我们将调整我们的负载平衡器以将流量从 HTTP 重定向到 HTTPS。
步骤 3 – 重定向 HTTP 到 HTTPS
Rancher Load Balancer 服务支持自定义 HAProxy 配置设置. 我们将使用该功能,包括一些配置,将所有从 HTTP 到 HTTPS 的流量重定向。
要设置重定向,请在Rancher中找到您的负载平衡服务,并按下 Upgrade/Edit按钮以访问设置,就像您在上一步中所做的一样。
添加以下代码来创建重定向:
1[label Custom haproxy.cfg]
2frontend 80
3acl lepath path_beg -i /.well-known/acme-challenge
4redirect scheme https code 301 if !lepath !{ ssl_fc }
这为负载平衡器创建了一个规则,该规则将所有流量重定向到 HTTPS,但忽略了我们为 Let's Encrypt 域验证配置的 /.已知/acme-challenge
路径的请求。
点击页面底部的编辑
按钮来应用这些更改。
在此时,每当您的访问者通过HTTP访问网站时,他们将被重定向到HTTPS,使网站对所有人来说都是安全的。
步骤 4 – 测试设置
要测试您的网站,请在 Web 浏览器中打开地址,使用 HTTP 协议 (http://your_domain
),然后在地址栏中搜索安全指标。
1curl -I -L http://your_domain
你应该看到一个结果如下:
1[secondary_label Output]
2HTTP/1.1 301 Found
3Cache-Control: no-cache
4Content-length: 0
5Location: https://your_domain/
6Connection: close
7
8HTTP/1.1 200 OK
9Cache-Control: public, max-age=0
10Content-Type: text/html; charset=utf-8
11Vary: Accept-Encoding
12Date: Sun, 19 Feb 2017 03:42:47 GMT
第一块输出显示了第一次通过HTTP请求网站时的响应,说它被找到,但位置现在在另一个地址上。 请注意301找到
部分,这告诉你我们添加的HAProxy规则已经起作用。 位置
部分显示了所请求的资源的新位置。
结论
在本教程中,您使用 Rancher 和 Let’s Encrypt 服务在网站上设置 HTTPS. 获得安全的网站现在比以往任何时候都更容易,您不必担心不断更新证书或为任务设置其他工具。