#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
}