terraform GCP https) 负载均衡器

Posted

技术标签:

【中文标题】terraform GCP https) 负载均衡器【英文标题】:terraform GCP http(s) Loadbalancer 【发布时间】:2020-05-08 22:41:58 【问题描述】:

我正在尝试在 GCP 上使用 terraform 创建 HTTP(S) 负载均衡器。我希望它同时为 HTTP 和 HTTPS 客户端提供服务。我正在使用以下方法来创建 LB 的前端部分(google_compute_global_forwarding_rule)。

// SSL
resource "google_compute_global_forwarding_rule" "default-ssl" 
  name       = "frontend-https"
  target     = google_compute_target_https_proxy.default-ssl.self_link
  port_range = "443"



resource "google_compute_target_https_proxy" "default-ssl" 
  provider         = google-beta
  name             = "target-proxy-ssl"
  description      = "a description"
  ssl_certificates = ["mysslcert"]
  url_map          = google_compute_url_map.default.self_link


// non SSL
resource "google_compute_global_forwarding_rule" "default" 
  name       = "frontend-http"
  target     = google_compute_target_http_proxy.default.self_link
  port_range = "80"


resource "google_compute_target_http_proxy" "default" 
  project     = var.project_id
  provider    = google-beta
  name        = "target-proxy"
  description = "a description"
  url_map     = google_compute_url_map.default.self_link

问题在于,它分配了两个 IP 地址;一种用于 HTTP,一种用于 HTTPS。 但是当我在 GCP 上手动创建负载均衡器时(没有 terraform),我可以创建一个 IP 地址并选择协议。通过这样做,我可以在创建下一个前端规则时使用相同的 IP 地址。

已创建地形;

手动创建;

感谢您对创建只有一个 IP 地址的负载平衡器的帮助。

【问题讨论】:

您需要先分配IP地址,然后在创建负载均衡前端时选择地址。 所以我按照@john Hanley 的建议创建了一个 IP 并将其传递给模块,如下所示; resource "google_compute_global_forwarding_rule" "default-ssl" name = "前端-https" ip_address = var.ext_static_ip target = google_compute_target_https_proxy.default-ssl.self_link port_range = "443" 【参考方案1】:

您还可以通过以下方式即时分配外部 IP:

resource "google_compute_global_address" "L7LB_IP_ADDRESS" 
  name                  = "l7lb-external-ip-address"

然后在转发规则(前端)中,设置ip地址:

resource "google_compute_global_forwarding_rule" "EXTERNAL_FWD_RULE_HTTP" 
  name                  = "frontend-80"
  ip_address            = google_compute_global_address.L7LB_IP_ADDRESS.address
  port_range            = "80"

resource "google_compute_global_forwarding_rule" "EXTERNAL_FWD_RULE_HTTPS" 
  name                  = "frontend-443"
  ip_address            = google_compute_global_address.L7LB_IP_ADDRESS.address
  port_range            = "443"

【讨论】:

【参考方案2】:

提供的 IP 地址资源需要在 Terraform 中具有 SHARED_LOADBALANCER_VIP 用途

SHARED_LOADBALANCER_VIP 用于多个内部负载平衡器可以使用的地址。 https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_address

【讨论】:

以上是关于terraform GCP https) 负载均衡器的主要内容,如果未能解决你的问题,请参考以下文章

Terraform 和 GCP:Google kubernetes 集群问题:看不到工作负载(部署、状态集)内部的监控部分(内存和 cpu)

Terraform 资源弹性负载均衡器 - 减少 ConnectionDrainingPolicy 超时

同一区域中的 GCP 虚拟机无法 Ping 使用 GKE 内部 LB 入口创建的内部 HTTPS 负载均衡器 IP

使用 Terraform 关闭/打开 Elastic Beanstalk 负载均衡器?

如何在 GCP 上的 TCP 负载均衡器上获取当前连接数

将 kubernetes(GKE) 服务层指标发送到 GCP 负载均衡器