A criação de um gateway NAT com o Terraform falha com um erro

1

Estou executando um cluster GKE privado e quero adicionar um NAT Gateway para que eu possa criar regras de firewall a partir de solicitações vindas do cluster (por padrão, os IPs públicos de todos os nós são efêmeros, portanto difíceis de controlar) .

Estou tentando seguir as instruções descritas aqui , e aqui (para criar um produto altamente disponível NAT, uma variação do primeiro link).

Eu posso instalar terraform , criar terraform.tfvars no meu diretório de trabalho e executar terraform init . Quando eu executo terraform plan , recebo muitos erros como:

Error: Unsupported attribute

  on ../../main.tf line 51, in module "nat-gateway":
  51:   module_enabled        = "${var.module_enabled}"

An attribute named "module_enabled" is not expected here.


Error: Unsupported attribute

  on ../../main.tf line 52, in module "nat-gateway":
  52:   project               = "${var.project}"

An attribute named "project" is not expected here.


Error: Unsupported attribute

  on ../../main.tf line 53, in module "nat-gateway":
  53:   region                = "${var.region}"

An attribute named "region" is not expected here.


Error: Unsupported attribute

  on ../../main.tf line 54, in module "nat-gateway":
  54:   zone                  = "${local.zone}"

An attribute named "zone" is not expected here.
...

Recebo um erro para quase todas as entradas em este módulo (é para isso que ../../main.tf aponta).

module "nat-gateway" {
  source                = "GoogleCloudPlatform/managed-instance-group/google"
  version               = "1.1.14"
  module_enabled        = "${var.module_enabled}"
  project               = "${var.project}"
  region                = "${var.region}"
  zone                  = "${local.zone}"
  network               = "${var.network}"
  subnetwork            = "${var.subnetwork}"
  target_tags           = ["${local.instance_tags}"]
  instance_labels       = "${var.instance_labels}"
  service_account_email = "${var.service_account_email}"
  machine_type          = "${var.machine_type}"
  name                  = "${local.name}"
  compute_image         = "${var.compute_image}"
  size                  = 1
  network_ip            = "${var.ip}"
  can_ip_forward        = "true"
  service_port          = "80"
  service_port_name     = "http"
  startup_script        = "${data.template_file.nat-startup-script.rendered}"
  wait_for_instances    = true
  metadata              = "${var.metadata}"
  ssh_fw_rule           = "${var.ssh_fw_rule}"
  ssh_source_ranges     = "${var.ssh_source_ranges}"
  http_health_check     = "${var.autohealing_enabled}"

  update_strategy = "ROLLING_UPDATE"

  rolling_update_policy = [
    {
      type                  = "PROACTIVE"
      minimal_action        = "REPLACE"
      max_surge_fixed       = 0
      max_unavailable_fixed = 1
      min_ready_sec         = 30
    },
  ]

  access_config = [
    {
      nat_ip = "${element(concat(google_compute_address.default.*.address, data.google_compute_address.default.*.address, list("")), 0)}"
    },
  ]
}

Também percebi que os erros que recebo são os campos declarados aqui mas não aqui , por isso parece algum tipo de falta de correspondência na versão.

Tentei alterar esta linha como segue, para obter o mais recente do github em vez do registro terraform, mas isso não resolveu o problema.

// before:
module "nat-gateway" {
  source                = "GoogleCloudPlatform/managed-instance-group/google"
  version               = "1.1.14"

// after:
module "nat-gateway" {
  source                = "github.com/GoogleCloudPlatform/terraform-google-managed-instance-group" 

Meu diretório de trabalho é examples/gke-ha-nat-gateway/ , caso isso seja importante. Todo o ambiente é o mesmo que o recém clonado do github, com exceção de terraform.tfvars .

Infelizmente, não tenho nenhuma experiência com o Terraform, então não sei como depurar esses erros.

Obrigado pela sua ajuda!

    
por Xocoatzin 12.11.2018 / 18:16

1 resposta

1

Como você está usando o GCP, considere a configuração Cloud NAT em vez de criar seu próprio gateway NAT.

Parece que os endereços "fda3: e722: ac3 :: / 48" são usados quando as VMs estão acessando serviços hospedados no Google. Se você acessar qualquer serviço fora do Google, ele verá seus endereços IP NAT. Quanto ao problema do IP de origem ser um IPv6 aleatório (quando os nós se conectam a um site) em vez do IPv4 estático criado, você pode adicionar 'fda3: e722: ac3: 10: 30: dXXX: aXX: 0/96' ao regras de firewall.

    
por 24.11.2018 / 22:47