尝试使用 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或更高版本似乎没有问题,但为了保险起见,我们还是更新到最新版本吧。
gcloud 组件更新
gcloud 命令更新频繁,所以我确信会有一些更新。
更新完成后,尝试使用该命令创建 SSL 证书。
这次我们来创建一个SSL证书,将SSL证书的名称设置为test-example-ssl,将创建SSL证书的域设置为test.example.com。
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 命令。
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 证书应用于负载均衡器,但由于我们没有必要的负载均衡器,因此我们将首先创建一个新的负载均衡器。
虽然有几个步骤,但不要灰心,继续前进!
创建实例组
创建实例组。
在这里,我们将创建一个容器来保存实例。
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
有两种类型的实例组:托管实例组(允许您轻松使用自动扩展和实例模板等功能)非托管实例组(不具备此类功能)
这次,我们不需要此类功能,因此我们将其创建为非托管实例组。
检查所有创建的实例组的命令如下。
gcloud 计算实例组列表 名称 位置 范围 网络 托管实例 default-group asia-northeast1-b 区域 默认 否 1 example-instance-group us-east1-b 区域 默认 否 1
将实例添加到实例组
让我们将实例添加到我们创建的实例组中。
这次我们将在 example-web01 实例所在的 us-east1 区域的 B 区创建它。
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]。
要检查添加到实例组中的实例,请使用以下命令:
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 号)端口。
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 创建健康检查。
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 模式的转发目的地时的单位。
健康检查指定对后端服务中的实例组监听的端口进行健康检查。
gcloud 计算后端服务创建示例后端 \ --protocol HTTP \ --health-checks 示例检查 \ --global 创建 [https://www.googleapis.com/compute/v1/projects/hogehoge-xxxxxx/global /backendServices/example-backend] 名称后端协议示例后端 HTTPS
将实例组附加到后端服务
让我们向之前创建的后端服务添加一个实例组。
后端服务可以以实例组为最小单位进行注册。
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服务的功能粒度,将其变成微服务。
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 证书。
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 地址。
gcloud 计算地址创建 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 IN_USE example-ip xxx.xxx.xxx.xxx 保留
添加前端服务
最后,创建一个将 URL 映射与外界连接起来的前端服务。
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 证书在创建后不会立即可用,并且可能需要一些时间来配置,因此最好有足够的时间来执行此操作。
就是这样。