Как создать экземпляр GCP с общедоступным IP с помощью terraform

#google-cloud-platform #terraform

#google-cloud-platform #terraform

Вопрос:

Мне нужно создать экземпляр виртуальной машины в gcp с общедоступным IP (экземпляр может случайным образом выбрать один для себя) без явного определения одного.

Итак, как я могу это сделать?

Это gcloud команда, которую я могу использовать для достижения этой цели (создать экземпляр виртуальной машины с автоматически назначенным общедоступным ip)

 gcloud compute instances create controller-1 
    --async 
    --boot-disk-size 200GB 
    --can-ip-forward 
    --image-family ubuntu-2004-lts 
    --image-project ubuntu-os-cloud 
    --machine-type e2-standard-2 
    --private-network-ip 10.240.0.10 
    --scopes compute-rw,storage-ro,service-management,service-control,logging-write,monitoring 
    --subnet kubernetes 
    --tags kubernetes-the-hard-way,controller
  

Приведенная выше команда создаст виртуальную машину как с внутренним IP 10.240.0.10 , так и с общедоступным ip с некоторым случайно выбранным IP-адресом.

Итак, я хочу достичь той же цели с terraform

Это мой terraform код. но как я могу это сделать?

 resource "google_compute_instance" "controllers" {
  name         = "controller-0"
  machine_type = "e2-standard-2"
  zone         = var.zone

  can_ip_forward = true



  tags = ["kubernetes-the-hard-way", "controller"]
  

  boot_disk {
    initialize_params {
      image = "ubuntu-2004-focal-v20200720"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.kubernetes.name
    network_ip = "10.240.0.10"  // private ip but how to assign a public ip (randomly)  
  }

  service_account {
    scopes = ["compute-rw", "storage-ro", "service-management", "service-control", "logging-write", "monitoring"]
  }
}
  

Ответ №1:

Пустой блок access_config присвоит вашему экземпляру внешний эфемерный IP.

 network_interface {
    network = "default"
    access_config {}
}
  

Ответ №2:

Похоже, вам нужно указать «access_config» в разделе «network_interface», чтобы назначить внешний (общедоступный) IP экземпляру GCE в соответствии с этим примером из terraform.

 resource "google_compute_address" "static" {
  name = "ipv4-address"
}

data "google_compute_image" "debian_image" {
  family  = "debian-9"
  project = "debian-cloud"
}

resource "google_compute_instance" "instance_with_ip" {
  name         = "vm-instance"
  machine_type = "f1-micro"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = data.google_compute_image.debian_image.self_link
    }
  }

  network_interface {
    network = "default"
    access_config {
      nat_ip = google_compute_address.static.address
    }
  }
}
  

Вычислительный движок облачной платформы Google поддерживает два типа внешних IP-адресов:

Статические внешние IP-адреса

Эфемерные внешние IP-адреса

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

1. … скриншот?

2. Стоит отметить, что вы платите за статический IP-адрес, около 7,20 долларов в месяц, когда я проверял последний раз. Эфемерный вариант бесплатный.

3. Как назначить nat_ip уже зарезервированный IP по имени этого адресного ресурса в GCP?