terraform google cloud nat используя зарезервированный статический ip - PullRequest
0 голосов
/ 26 июня 2019

Мы зарезервировали статические (в белом списке) IP-адреса, которые должны быть назначены CloudNAT в GCP с помощью terraform. IP-адреса зарезервированы и зарегистрированы у поставщика услуг, а для их утверждения и добавления в брандмауэры требуются недели, поэтому динамическое распределение не вариант.

Основная проблема для нас состоит в том, что раздел google_compute_router_nat требует nat_ip_allocate_option, но в этом случае IP-адрес уже был выделен, поэтому он завершается ошибкой с указанием именно этого. Единственными вариантами выделения являются AUTO_ONLY и MANUAL_ONLY, но, возможно, может потребоваться EXISTING или RESERVED, если я не пропущу что-то очевидное.

Вот ошибочная конфигурация:

resource "google_compute_address" "static_ip" {
  name    = "whitelisted-static-ip"
  region  = "${var.project_region}"
}

resource "google_compute_router_nat" "cluster-nat" {
  name                               = "cluster-stg-nat"
  router                             = "${google_compute_router.router.name}"
  region                             = "${google_compute_router.router.region}"
  nat_ip_allocate_option             = "MANUAL_ONLY"
  nat_ips                            = ["${google_compute_address.static_ip.self_link}"]
  source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
  subnetwork {
    name                    = "${google_compute_subnetwork.service.self_link}"
    source_ip_ranges_to_nat = ["ALL_IP_RANGES"]
  }
}

Приводит к следующей ошибке:

Error: Error creating Address: googleapi: Error 409: The resource 'projects/staging-cluster/regions/us-central1/addresses/whitelisted-static-ip' already exists, alreadyExists

, поскольку статический IP-ресурс уже зарезервирован во внешних IP-адресах GCP и зарегистрирован у поставщика услуг.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Изменение ресурса google_compute_address на объект данных было волшебством.Я изменил его так:

data "google_compute_address" "static_ip" {
  name    = "whitelisted-static-ip"
  region  = "${var.project_region}"
}

Где имя «whitelisted-static-ip» - это то, что мы присвоили зарезервированному внешнему IP-адресу, когда мы его создали.Обновленный ресурс маршрутизатора NAT стал:

resource "google_compute_router_nat" "cluster-nat" {
  name                               = "${var.cluster_name}-nat"
  router                             = "${google_compute_router.router.name}"
  region                             = "${google_compute_router.router.region}"
  nat_ip_allocate_option             = "MANUAL_ONLY"
  nat_ips                            = ["${data.google_compute_address.static_ip.self_link}"]
  source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
  subnetwork {
    name                    = "${google_compute_subnetwork.service.self_link}"
    source_ip_ranges_to_nat = ["PRIMARY_IP_RANGE"]
  }
}

, который является только модом для поля nat_ips, указывающего на объект данных.Простое изменение двух слов, и мы готовы к работе. Отлично!

1 голос
/ 01 июля 2019

Похоже, проблема в google_compute_address resource, а не в NAT. Вы пытаетесь создать ресурс, который уже существует. Вместо этого вам следует выполнить одно из следующих действий:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...