如何使用 gcloud 命令为 GCP 负载均衡器设置免费 SSL 证书

大家好,
我是开发团队野生队的成员 Mandai。
正如标题所示,今天我想试用一下最近新增的完全托管且免费的SSL证书,这些证书现在可以应用于负载均衡器。
如今SSL已成为必需品,SSL证书的成本也不容忽视,所以我认为有些人会对此感到非常高兴。
GCP何时开始为负载均衡器提供免费SSL证书?
您知道可以给 GCP ELB 应用免费的 SSL 证书吗?
这项功能于 2018 年 10 月推出,惭愧的是,我之前对此一无所知。
AWS Certificate Manager 功能于 2016 年 1 月添加到 AWS 中,至今已有相当长一段时间,因此时间上存在很大的差异,但我个人很喜欢它,因为它功能简单,符合全球标准。
GCP的免费SSL证书包含哪些内容?
您可以通过查看 GCP 控制台轻松看到 GCP 的 SSL 证书是通过 Let's Encrypt 颁发的。
对于 Let's Encrypt 来说,证书续期周期很短,只有三个月,所以理论上只需在服务器上安装一个更新脚本并定期运行即可。
就是这样。但如果是公有云负载均衡器,情况就变得复杂了。
GCP 在负载均衡器端提供了与此更新过程相关的所有功能,从而提供了一个可以轻松舒适地使用 SSL 的环境。
此外,要颁发证书,您计划应用 SSL 证书的域名的 DNS 必须指向负载均衡器中设置的 IP 地址,SSL 证书将部署在该负载均衡器上。
由于此限制,即使网站可以公开访问,SSL 在应用证书后的一小段时间内也不会启用。
使用 gcloud 命令进行设置
可以使用 gcloud 命令在负载均衡器上放置 SSL 证书。
首先,我们来更新一下gcloud命令本身。
经过一些研究,似乎220.0.0或更高版本都没有问题,但为了安全起见,我们还是确保它是最新版本。
gcloud 组件更新
gcloud 命令经常更新,所以我认为应该会有一些更新。
更新完成后,我们使用该命令创建 SSL 证书。
这次,我们创建一个名为 test-example-ssl 的 SSL 证书,并将要为其创建 SSL 证书的域名设置为 test.example.com。
gcloud beta compute ssl-certificates create test-example-ssl \ --domains test.example.com 已创建 [https://www.googleapis.com/compute/beta/projects/hogehoge-xxxxxx/global/sslCertificates/test-example-ssl]。 NAME TYPE CREATION_TIMESTAMP EXPIRE_TIME MANAGED_STATUS test-example-ssl MANAGED 2019-04-01T03:12:53.962-07:00 PROVISIONING test.example.com: PROVISIONING
要查看当前情况,请使用“gcloud beta compute ssl-certificates list”命令。
gcloud beta compute ssl-certificates list NAME TYPE CREATION_TIMESTAMP EXPIRE_TIME MANAGED_STATUS www-example-ssl MANAGED 2019-03-01T23:33:53.360-08:00 2019-05-30T23:41:52.000-07:00 ACTIVE www.example.com: ACTIVE test-example-ssl MANAGED 2019-04-01T03:12:53.962-07:00 PROVISIONING test.example.com: PROVISIONING
www-example-ssl 已创建一段时间并已启用。test
-example-ssl 显示正在配置中,但如果您保持这种状态,最终会收到错误。
这是因为 test.example.com 的 A 记录中写入的 IP 地址不指向您即将创建的负载均衡器。
配置完成后,MANAGED_STATUS 将变为 ACTIVE。
将 SSL 证书应用于负载均衡器
现在,我们将把已配置的 SSL 证书应用到负载均衡器上,但由于我们还没有负载均衡器,所以我们首先要创建一个新的。
这需要几个步骤,但不要放弃!
创建实例组
创建一个实例组
,它是存放您的实例的容器。
gcloud compute instance-groups unmanaged create example-instance-group \ --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
有两种类型托管实例组,可让您轻松使用自动伸缩和实例模板等功能非托管实例组,不具备这些功能
这次我们不需要这样的功能,所以我们会把它创建为一个非托管实例组。
查看所有已创建实例组的命令如下:
gcloud compute instance-groups list NAME LOCATION SCOPE NETWORK MAGENED INSTANCES default-group asia-northeast1-b zone default No 1 example-instance-group us-east1-b zone default No 1
将实例添加到实例组
将实例添加到已创建的实例组中。
在本例中,将其创建在 us-east1 区域的 B 区,即 example-web01 实例所在的区域。
gcloud compute instance-groups unmanaged add-instances 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]。.
要查看哪些实例已添加到实例组,请使用以下命令:
gcloud compute instance-groups describe example-instance-group --zone [region-zone] creationTimestamp: '2019-04-05T00:13:10.372-07:00' description: '' fingerprint: hogehoge id: 'xxxxxxxxxxxxxxxx' kind: compute#instanceGroup name: example-instance-group namedPorts: - name: http port: 80 network: 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 size: 1 subnetwork: https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/regions/us-east1/subnetworks/default zone: https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/zones/us-east1-b
为实例组配置端口映射
设置实例组的监听端口。
这里,我们将打开 HTTP (80) 端口。
gcloud compute instance-groups unmanaged set-named-ports example-instance-group \ --named-ports http:80 \ --zone us-east1-b 已更新 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/zones/us-east1-b/instanceGroups/example-instance-group]。.
你可以设置多个 --named-ports 选项,用逗号分隔即可。
创建健康检查
健康检查是一种监控功能,它会访问指定的 URL 来检查服务是否正常运行。
此功能将链接到稍后配置的后端服务,如果返回 200 状态码,则表示服务运行正常。
在这里,我们将为端口 80 创建健康检查。
gcloud compute health-checks create http example-check \ --port 80 已创建 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/healthChecks/http-basic-check]。 名称 协议 example-check HTTP
关于健康检查,即使负载均衡器像本例中一样具有 SSL 证书,健康检查通信也是从负载均衡器到实例,因此 HTTP 健康检查应该足够了。
创建后端服务
后端服务聚合多个实例组。
同样,实例组也聚合实例。后端服务是用于更改 URL 映射中每个 URL 模式的转发目标的单元,稍后将对此进行解释。
健康检查指定后端服务中的实例组监听的端口的健康检查。
gcloud compute backend-services create example-backend \ --protocol HTTP \ --health-checks example-check \ --global 已创建 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/backendServices/example-backend]。名称:后端;协议:example-backend;HTTPS
将实例组与后端服务关联
为刚刚创建的后端服务添加一个实例组。
后端服务可以注册为实例组,实例组是其最小单元。
gcloud compute backend-services add-backend example-backend \ --balancing-mode UTILIZATION \ --max-utilization 0.8 \ --capacity-scaler 1 \ --instance-group example-instance-group \ --instance-group-zone us-east1-b \ --global Updated [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/backendServices/example-backend].
为了在后端服务内的实例组之间实现负载均衡,GCP 提供了两种负载均衡模式:
利用
根据 CPU 利用率分配负载。如果您希望高效利用机器资源,建议使用此模式。
此外,如果超过 `--max-utilization` 值,则会执行自动扩缩容;例如,如果该值为 0.8,则当 CPU 利用率超过 80% 时将执行自动扩缩容。
速度
此模式基于每秒请求数 (RPS) 来平衡负载。如果您希望稳定服务的响应速度,建议使用此模式。
如果接收到的请求数超过 `--target-load-balancing-utilization` 指定的百分比,则会执行自动扩缩容。
在这两种模式下,您都可以使用 --max-num-replicas 选项指定自动扩展将启动的最大实例数。
创建 URL 映射
GCP 有两种负载均衡机制:基于 TCP 的负载均衡和基于内容的负载均衡。
GCP 文档还提到了跨区域负载均衡的,但该配置被描述为基于内容的负载均衡的高级版本(我们在这里就不详细介绍了)。
在基于内容的情况下,此 URL 映射将显示为 GCP 控制台负载均衡页面上的负载均衡器。
顾名思义,URL映射可以将URL模式路由到多个后端服务。
利用此功能,您可以降低整个Web服务功能的粒度,从而创建微服务。
gcloud compute url-maps create example-url-map \ --default-service example-backend 已创建 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/urlMaps/example-url-map]. NAME DEFAULT_SERVICE example-url-map backendServices/example-backend
这次没有路由代码,因为 URL 映射只有一个后端服务。
要使用 URL 映射进行路由,需要创建一个名为路径匹配器的基于路径的路由,创建一个对象,并将其添加到 URL 映射中。
由于路径匹配器超出了本文的讨论范围,因此我们在此不做详细介绍。
如果您感兴趣,请参阅官方文档
创建目标代理
目标代理负责将 URL 映射与 SSL 证书关联起来。
gcloud compute target-https-proxies create example-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]。名称 SSL 证书 URL 映射 example-https-proxy test-example-ssl example-url-map
创建IP地址
接下来,创建一个用于负载均衡器的 IP 地址。
gcloud compute addresses create example-ip --ip-version=IPV4 --global 创建了 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/addresses/example-ip]。.
要查找您当前使用的 IP 地址,请使用以下命令:
gcloud 计算地址列表 名称 地址/范围 类型 用途 网络 区域 子网 状态 default-web01 xxx.xxx.xxx.xxx asia-northeast1 使用中 example-ip xxx.xxx.xxx.xxx 保留
添加前端服务
最后,创建一个前端服务,将外部世界与 URL 映射连接起来。
gcloud compute forwarding-rules create example-frontend \ --address xxx.xxx.xxx.xxx \ --global \ --target-https-proxy example-https-proxy \ --ports 443 Created [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global/forwardingRules/example-frontend].
前端服务关联全局 IP、端口和目标代理。
您已成功将免费 SSL 证书应用到负载均衡器。
概括
我原本想写一篇关于如何给负载均衡器应用 SSL 证书的文章,但遗憾的是,最后文章主要讲的是如何创建负载均衡器。换句话说,我认为给一个已经创建的负载均衡器应用 SSL 证书非常容易。
设置负载均衡器的步骤出乎意料地多,一开始可能很难知道创建它们的顺序,所以让我们再次整理一下顺序。
- 创建实例组
- 向实例组添加端口
- 创建健康检查
- 创建后端服务
- 将实例组添加到后端服务
- 创建 URL 映射
- 创建目标代理
- 创建 IP 地址
- 创建前端服务
此外,我们将增加一个创建 SSL 证书的步骤,但似乎在创建目标代理之前完成此操作也不会有问题。
另外,由于 SSL 证书创建后不会立即生效,需要一些时间进行配置,因此最好预留充足的时间来完成这项工作。
就这样。
1