如何通过Terraform lb-http模块部署仅存储桶后端的GCP HTTPS负载均衡
结论
纯存储桶作为后端部署GCP HTTPS负载均衡在平台层面完全可行,你遇到的配置障碍来自所用Terraform模块的设计限制,不是GCP本身不支持该架构。
问题根源
你使用的lb-http模块4.x版本中,backends输入变量被设计为仅接收实例组、网络端点组这类计算类后端的配置参数,没有预留后端存储桶的传入入口:
- 直接传入存储桶引用不符合变量的结构校验,会直接报错
- 完全省略
backends属性会触发变量必填校验,无法通过Terraform plan阶段
你当前采用的空实例组后端+自定义url_map路由到存储桶的方案虽然能正常运行,但会额外创建一个完全不承载流量的空后端服务和关联资源,属于冗余配置。
最优实现方案
可根据自身需求二选一,两种方案都能实现无冗余的纯存储桶后端部署:
方案1:弃用模块封装,手动编排负载均衡资源
这是最灵活、无多余资源的实现方式,按顺序创建以下资源即可完成部署:
- 全局静态公网IP
- 后端存储桶资源(绑定托管静态内容的GCS存储桶,可按需开启CDN、配置安全策略)
- SSL证书(托管证书或自定义上传证书均可)
- URL映射(所有域名、所有路径的默认服务都指向上一步创建的后端存储桶,不需要额外创建计算类后端服务)
- 目标HTTPS代理(绑定SSL证书和URL映射)
- 443端口全局转发规则(绑定静态IP和目标HTTPS代理)
- 可选:添加80端口转发规则和对应的URL重定向配置,实现HTTP自动跳转HTTPS
该方案下所有创建的资源都是实际承载流量的有效资源,不会生成空的冗余后端。
方案2:保留lb-http模块,精简冗余配置
如果你希望复用模块自带的SSL证书管理、权限配置等封装能力,不需要完全弃用模块,只需要精简现有backends配置,把冗余资源的创建关掉即可。
由于你已经关闭了模块的URL映射自动创建、自定义了指向存储桶的URL映射,模块创建的default后端服务实际上不会收到任何流量,你可以直接关闭该后端关联的健康检查、日志配置,把冗余开销降到最低,调整后的backends配置参考如下:
backends = { default = { protocol = "HTTP" port = 80 port_name = "http" timeout_sec = 10 enable_cdn = false groups = [] health_check = null log_config = null iap_config = { enable = false oauth2_client_id = "" oauth2_client_secret = "" } } }
注意:不要给这个空后端配置健康检查规则,无实例组的空后端永远无法通过健康检查,虽然不会影响转发到存储桶的正常流量,但会在GCP控制台产生无意义的异常告警。
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

