尝试使用 gcloud 命令在 GCP 负载均衡器上设置免费 SSL 证书
目录 [非表示]
你好。
我是Mandai,负责Wild 开发团队。
今天,正如标题所示,我想尝试一下最近添加的完全托管的免费 SSL 证书,该证书现在可以应用于负载均衡器。
如今,SSL已经成为必需品,SSL证书的成本也不再能够被忽视,所以有些人可能对此感到非常高兴。
什么时候可以向 GCP 负载均衡器颁发免费 SSL 证书?
您是否知道现在可以向 GCP 的 ELB 申请免费的 SSL 证书?
这个功能于 2018 年 10 月推出,很不好意思地说我不知道。
AWS证书管理器功能很早就在2016年1月就被添加到了AWS中,所以在时间上有相当大的差异,但它功能简单且符合全球标准,因此个人很容易使用它。总的来说,我认为它很讨人喜欢。
GCP 的免费 SSL 证书里面有什么?
GCP 的 SSL 证书是通过 Let's Encrypt 颁发的,您可以通过检查 GCP 控制台轻松查看该证书。
说到 Let's Encrypt,证书更新周期短至 3 个月,因此理论上是在服务器上嵌入更新脚本并定期运行。
仅此而已,但是当这成为公共云负载均衡器时,事情就会变得复杂。
可以说,GCP在负载均衡器端提供了与本次更新工作相关的所有功能,创造了一个可以舒适轻松地使用SSL的环境。
此外,要颁发证书,您计划应用 SSL 证书的域的 DNS 必须指向要放置 SSL 证书的负载均衡器上配置的 IP 地址。
由于此限制,在申请后,即使对外发布,SSL 也可能会在短时间内被禁用。
尝试使用 gcloud 命令进行设置
您可以使用 gcloud 命令在负载均衡器上放置 SSL 证书。
首先,我们来更新 gcloud 命令本身。
根据我的研究,220.0.0或更高版本似乎没有问题,但为了保险起见,我们还是更新到最新版本吧。
1 | gcloud 组件更新 |
gcloud 命令更新频繁,所以我确信会有一些更新。
更新完成后,尝试使用该命令创建 SSL 证书。
这次我们来创建一个SSL证书,将SSL证书的名称设置为test-example-ssl,将创建SSL证书的域设置为test.example.com。
1 | gcloud beta 计算 ssl-certificates 创建 test -example-ssl \ --domains test .example.com 创建 [https: //www .googleapis.com /compute/beta/projects/hogehoge-xxxxxx/global/sslCertificates/test-example -ssl]。名称类型 CREATION_TIMESTAMP EXPIRE_TIME MANAGED_STATUS test -example-ssl 管理 2019-04-01T03:12:53.962-07:00 配置 test .example.com:配置 |
要查看发生了什么,请使用 gcloud betacompute ssl-certificates list 命令。
1 | gcloud beta 计算 ssl 证书列表 名称类型 CREATION_TIMESTAMP EXPIRE_TIME MANAGED_STATUS www-example-ssl 管理 2019-03-01T23:33:53.360-08:00 2019-05-30T23:41:52.000-07:00 活动 www.example.com :活动 test -example-ssl 已管理 2019-04-01T03:12:53.962-07:00 配置 test .example.com:配置 |
www-example-ssl 是不久前创建的并且已经启用。
它表示正在配置 test-example-ssl,但如果保持原样,最终会导致错误。
这是因为 test.example.com 的 A 记录中写入的 IP 地址不适合我们将创建的负载均衡器。
同样,一旦配置完成,MANAGED_STATUS 部分将更改为 ACTIVE。
将 SSL 证书应用到您的负载均衡器
现在,我们将配置的 SSL 证书应用于负载均衡器,但由于我们没有必要的负载均衡器,因此我们将首先创建一个新的负载均衡器。
虽然有几个步骤,但不要灰心,继续前进!
创建实例组
创建实例组。
在这里,我们将创建一个容器来保存实例。
1 | gcloud 计算实例组非托管创建示例实例组 \ --zone=us-east1-b 创建 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/zones/us-east1- b /instanceGroups/example-instance-group ] 名称 位置 网络 托管实例 example-instance-group us-east1-b zone 0 |
有两种类型的实例组:托管实例组(允许您轻松使用自动扩展和实例模板等功能)非托管实例组(不具备此类功能)
这次,我们不需要此类功能,因此我们将其创建为非托管实例组。
检查所有创建的实例组的命令如下。
1 | gcloud 计算实例组列表 名称 位置 范围 网络 托管实例 default-group asia-northeast1-b 区域 默认 否 1 example-instance-group us-east1-b 区域 默认 否 1 |
将实例添加到实例组
让我们将实例添加到我们创建的实例组中。
这次我们将在 example-web01 实例所在的 us-east1 区域的 B 区创建它。
1 | gcloud 计算实例组非托管添加实例 example-instance-group \ --instances example-web01 \ --zone us-east1-b 已更新 [https: //www .googleapis.com /compute/v1/projects/hogehoge- xxxxxx /zones/us-east1-b/instanceGroups/example-instance-group ]。 |
要检查添加到实例组中的实例,请使用以下命令:
1 | gcloud 计算实例组描述示例实例组 --zone [区域-区域] 创建时间戳: '2019-04-05T00:13:10.372-07:00' 描述: '' 指纹:hogehoge id : 'xxxxxxxxxxxxxxxxxx' 种类:计算 #实例组名称:示例实例组 命名端口:- 名称:http 端口:80 网络:https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/networks/default selfLink:https: //www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/zones/us-east1-b/instanceGroups/example-instance-group 大小:1 子网:https://www.googleapis.com/compute/ v1/projects/hogehoge-xxxxxx/regions/us-east1/subnetworks/default 区域:https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/zones/us-east1-b |
配置实例组的端口映射
设置实例组的监听端口。
这里我们将打开 HTTP(80 号)端口。
1 | gcloud 计算实例组非托管集命名端口示例实例组 \ --named-ports http:80 \ --zone us-east1-b 已更新 [https: //www .googleapis.com /compute/v1/ 项目 /hogehoge-xxxxxx/zones/us-east1-b/instanceGroups/example-instance-group ]。 |
可以通过用逗号分隔来设置多个 --named-ports 选项。
创建健康检查
健康检查是通过访问指定的 URL 来执行的生死攸关的监控。
这是一个将链接到稍后设置的后端服务的功能,如果返回数字200,则确定它正在运行。
在这里,我们将为端口 80 创建健康检查。
1 | gcloud 计算运行状况检查创建 http example-check \ --port 80 创建 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global/healthChecks/http-basic-check ]。示例-检查 HTTP |
至于健康检查,即使负载均衡器具有像这样的 SSL 证书,健康检查通信也是在负载均衡器和实例之间进行,因此 HTTP 健康检查似乎就足够了。
创建后端服务
后端服务负责组织多个实例组。
实例组还具有将实例分组在一起的作用,但后端服务是更改稍后出现的 URL 映射中每个 URL 模式的转发目的地时的单位。
健康检查指定对后端服务中的实例组监听的端口进行健康检查。
1 | gcloud 计算后端服务创建示例后端 \ --protocol HTTP \ --health-checks 示例检查 \ --global 创建 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global /backendServices/example-backend ] 名称后端协议示例后端 HTTPS |
将实例组附加到后端服务
让我们向之前创建的后端服务添加一个实例组。
后端服务可以以实例组为最小单位进行注册。
1 | gcloud 计算后端服务添加后端示例后端 \ --balancing-mode UTILIZATION \ --max-utilization 0.8 \ --capacity-scaler 1 \ --instance-group example-instance-group \ --instance-group-区域 us-east1-b \ --global 更新了 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global/backendServices/example-backend ]。 |
为了平衡后端服务中的每个实例组,Google Cloud 提供了两种平衡模式:
利用率
根据 CPU 使用情况分配负载。如果您想有效利用机器资源,建议使用此模式。
另外,当超过 --max-utilization 值时将执行自动缩放,因此如果为 0.8,则当 CPU 使用率超过 80% 时将执行自动缩放。
速度
基于每秒请求数 (RPS) 的负载平衡。如果您想稳定服务的响应,建议使用此模式。
如果请求数量多于 --target-load-balancing-utilization 指定的百分比,则会发生自动缩放。
在这两种模式下,您可以使用 --max-num-replicas 选项指定自动缩放将启动的最大实例数。
创建 URL 映射
GCP 负载均衡机制有两种类型:基于 TCP 的和基于内容的。
GCP文档跨区域负载均衡,不过配置是基于内容的高级版本(我就不赘述了)。
在基于内容的情况下,此 URL 映射是在 GCP 控制台的负载均衡页面上显示为负载均衡器的内容。
顾名思义,URL 将路由 URL 模式映射到多个后端服务。
通过使用这个特性,你可以降低整个Web服务的功能粒度,将其变成微服务。
1 | gcloud 计算 url-maps 创建 example-url-map \ --default-service example-backend 创建 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global/urlMaps/example-url- 名称 DEFAULT_SERVICE 示例-url-映射后端服务/示例-后端 |
由于这是一个只有单个后端服务的 URL 映射,因此没有路由描述。
要使用 URL 映射进行路由,请创建一个称为路径匹配器的基于路径的路由,创建对象并将它们添加到 URL 映射。
路径匹配器有点超出了本文的范围,所以我不会在这里解释它。
如果您有兴趣,请参阅官方文档
创建目标代理
目标代理负责链接 URL 映射和 SSL 证书。
1 | gcloud 计算目标-https-proxies 创建示例-https-proxy \ --url-map example-url-map \ --ssl-certificates test -example-ssl 创建 [https: //www .googleapis.com /compute/v1 /projects/hogehoge-xxxxxx/global/targetHttpsProxies/example-https-proxy ]。 |
创建IP地址
接下来,创建一个用于负载均衡器的 IP 地址。
1 | gcloud 计算地址创建 example-ip --ip-version=IPV4 --global 创建 [https: //www .googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global/addresses/example-ip ]。 |
要检查您当前使用的 IP 地址,请使用以下命令:
1 | gcloud 计算地址列表 名称 地址/范围 类型 用途 网络区域 子网状态 default-web01 xxx.xxx.xxx.xxx asia-northeast1 IN_USE example-ip xxx.xxx.xxx.xxx 保留 |
添加前端服务
最后,创建一个将 URL 映射与外界连接起来的前端服务。
1 | gcloud 计算转发规则创建 example-frontend \ --address xxx.xxx.xxx.xxx \ --global \ --target-https-proxy example-https-proxy \ --ports 443 创建 [https: //www . googleapis.com /compute/v1/projects/hogehoge-xxxxxx/global/forwardingRules/example-frontend ]。 |
将全局IP、端口和目标代理与前端服务链接。
您已成功将免费 SSL 证书应用到负载均衡器。
概括
我本来想写一篇关于将 SSL 证书应用于负载均衡器的文章,但我很遗憾大部分内容最终都是关于创建负载均衡器。相反,我认为将 SSL 证书应用于已完成的负载均衡器非常容易。
启动负载均衡器的步骤多得惊人,您可能一开始不知道按什么顺序执行这些步骤,所以我将尝试重新排列顺序。
- 创建实例组
- 将端口添加到实例组
- 创建健康检查
- 创建后端服务
- 将实例组添加到您的后端服务
- 创建 URL 映射
- 创建目标代理
- 创建IP地址
- 创建前端服务
我们将在此添加创建 SSL 证书的步骤,但如果您在创建目标代理之前在某处执行此操作,似乎不会有问题。
此外,SSL 证书在创建后不会立即可用,并且可能需要一些时间来配置,因此最好有足够的时间来执行此操作。
就是这样。