GCP Terraform: настройка порта для серверной службы

#terraform #terraform-provider-gcp

#terraform #terraform-provider-gcp

Вопрос:

Чтение документации здесь:

https://www.terraform.io/docs/providers/google/r/compute_backend_service.html

Мы можем определить серверную службу:

 resource "google_compute_backend_service" "kubernetes-nginx-prod" {
  name                            = "kubernetes-nginx-prod"
  health_checks                   = [google_compute_health_check.kubernetes-nginx-prod-healthcheck.self_link]

  backend {
    group = replace(google_container_node_pool.pool-1.instance_group_urls[0], "instanceGroupManagers", "instanceGroups")
    # TODO missing port 31443
  }
}
  

Кажется, мы не можем установить порт серверной службы через настройки Terraform:

введите описание изображения здесь

Воссоздание серверной службы без этих настроек фактически приводит к простою для нас, и порт должен быть написан вручную.

Ответ №1:

Нам нужно сослаться на имя порта, которое мы указали в группе экземпляров, например

 resource "google_compute_backend_service" "test" {
  name          = "test-service"
  port_name     = "test-port"
  protocol      = "HTTP"
  timeout_sec   = 5
  health_checks = []

  backend {
    group = "${google_compute_instance_group.test-ig.self_link}"
  }
}

resource "google_compute_instance_group" "test-ig" {
  name        = "test-ig"
  instances = []

  named_port {
    name = "test-port"
    port = "${var.app_port}"
  }

  zone = "${var.zone}"
}
  

Комментарии:

1. Спасибо! однако — группы экземпляров создаются автоматически с помощью Kubernetes ( google_container_cluster ) — хочу ли я сохранить их вручную в состоянии terraform?

Ответ №2:

Я решил эту проблему, используя источник данных terraform для извлечения данных группы экземпляров из my google_container_node_pool , а затем добавив google_compute_instance_group_named_port к нему ресурс.

Обратите внимание, что мой google_container_node_pool охватывает 3 зоны (a, b, c), а приведенный ниже код выделяет решение только для зоны c

 # extract google_compute_instance_group from google_container_node_pool
data "google_compute_instance_group" "instance_group_zone_c" {
  # .2 refers to the last of the 3 instance groups in my node pool (zone c)
  name    = regex("([^/] )/?$", "${google_container_node_pool.k8s_node_pool.instance_group_urls.2}").0
  zone    = regex("${var.region}-?[abc]", "${google_container_node_pool.k8s_node_pool.instance_group_urls.2}")
  project = var.project_id
}

# define a named port to attach to the google_compute_instance group in my node  pool
resource "google_compute_instance_group_named_port" "named_port_zone_c" {
  group = data.google_compute_instance_group.instance_group_zone_c.id
  zone = data.google_compute_instance_group.instance_group_zone_c.zone
  name = "port31090"
  port = 31090
}