做到这一点的关键是https://cloud.google.com/compute/docs/load-balancing/http/backend-service#restrictions_and_guidance 的一个容易错过的sn-p。
如果您不将同一个实例组添加到两个不同的后端,您的配置会更简单。如果您确实将相同的实例组添加到两个后端:
...
如果您的实例组分别为多个后端提供两个或多个端口,您必须在实例组中指定不同的端口名称。
初始设置并不简单,因此以下是参考。
基于我的配置中的示例:
- 托管实例组
- 在端口 80 上运行的主 webapp
- 在 8081 端口上运行的 HTTP 重定向服务
防火墙
确保您的防火墙规则允许 Google 对您的服务进行健康检查:
gcloud compute firewall-rules create allow-http-from-lb \
--description "Incoming http allowed from cloud loadbalancer." \
--allow tcp:80
--source-ranges "130.211.0.0/22"
gcloud compute firewall-rules create allow-http-redirect-from-lb \
--description "Incoming http redirect service allowed from cloud loadbalancer." \
--allow tcp:8081
--source-ranges "130.211.0.0/22"
健康检查
确保您为检查正确内部端口的两个服务设置了健康检查。
gcloud compute http-health-checks create webapp-healthcheck \
--description "Main webapp healthcheck" \
--port 80 \
--request-path "/healthcheck"
gcloud compute http-health-checks create httpsredirect-service-healthcheck \
--description "HTTP redirect service healthcheck" \
--port 8081 \
--request-path "/healthcheck"
配置命名端口
如果您的实例组有多个运行在不同端口上的微服务,您希望在一个公共负载均衡器下公开这些微服务,那么外观就是关键。
将INSTANCE_GROUP_NAME、REGION 和named-ports 替换为您的服务的正确值。
gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME \
--region=REGION \
--named-ports "webapp:80,httpsredirectservice:8081"
创建负载均衡器后端
确保--port-name 与上一步中的正确命名端口匹配。
gcloud compute backend-services create webapp-lb-backend \
--http-health-check webapp-healthcheck \
--protocol http \
--description "Webapp load balancer backend" \
--port-name webapp
gcloud compute backend-services create httpsredirect-lb-backend \
--http-health-check webapp-healthcheck \
--protocol http \
--description "HTTP -> HTTPS redirect service load balancer backend" \
--port-name httpsredirectservice
为这两个服务创建 URL 映射
确保--default-service 使用上一步中配置的值。
gcloud compute url-maps create webapp-urlmap \
--default-service webapp-lb-backend
gcloud compute url-maps create httpsredirect-urlmap \
--default-service httpsredirect-lb-backend
创建目标代理
目标代理被一个或多个全局转发规则引用,并将传入的 HTTP 或 HTTPS 请求路由到 URL 映射。
我们为 webapp 创建一个 https 目标代理,以终止负载均衡器上的 SSL。
gcloud compute target-https-proxies create webapp-target-proxy \
--url-map webapp-urlmap \
--ssl-certificate [SSL_CERTIFICATES]
重定向服务:
gcloud compute target-http-proxies create httpsredirect-target-proxy \
--url-map httpsredirect-urlmap
全球转发规则
最后一步是创建全局转发规则
gcloud compute forwarding-rules create webapp-forwarding-rule
--global \
--address LB_STATIC_IP \
--port-range 443 \
--target-https-proxy webapp-target-proxy
gcloud compute forwarding-rules create httpsredirect-forwarding-rule
--global \
--address LB_STATIC_IP \
--port-range 80 \
--target-http-proxy httpsredirect-target-proxy
我遇到的问题
- 确保正确配置防火墙以允许运行状况检查并设置运行状况检查。
- 如果出现间歇性
502 错误,请检查云控制台中的负载平衡器报告运行状况良好的实例
其他说明
-
因为需要两个 url 映射,所以您需要为两个查看我的帐单信息的负载平衡器付费。端口 80 和端口 443 都使用自己的负载均衡器
- 看起来不可能像
AWS 那样使用网络负载平衡器来终止 SSL 并提供 HTTP 服务