【问题标题】:Can Terraform create a Compute Engine on a defined IP Range?Terraform 可以在定义的 IP 范围上创建计算引擎吗?
【发布时间】:2021-12-03 01:20:09
【问题描述】:

我能够使用以下任一方式创建 Compute Engine:

  • 预定义的 IP 地址
  • 动态 IP 地址

但我无法创建具有 半动态 地址的 Compute Engine,即前 3 个数字是静态的,但不是最后一个,例如255.255.255.*

正在一个 VPC 上创建计算引擎,该 VPC 的 IP 地址范围对于我的要求来说太宽了。我正在尝试在近距离的 IP 地址上创建我的所有服务器,但我也不想让每一个服务器都是静态的,并且必须在 Terraform 代码中维护它。

有人知道以这种受限方式保留和分配 IP 的方法吗?

【问题讨论】:

  • 您的问题是关于公共(外部)还是私有 (VPC) 寻址?对于公共 IP 地址,无法指定范围。对于私有,创建一个满足您的寻址要求的 VPC 子网。
  • 它是 VPC 上的内部地址。但我们不拥有/控制 VPC,因此我们无法调整范围。

标签: networking google-cloud-platform terraform google-compute-engine google-vpc


【解决方案1】:

我认为最适合您的需求是使用“Google 地址 Terraform 模块”,您可以在其中定义与实例名称列表匹配的 IP 地址列表并分配相应的值。在这里,您可以找到描述该模块以及如何使用它的文档 [1]。

下面有3个ip地址分配给不同实例的例子作为参考:

module "address-fe" {
  source  = "terraform-google-modules/address/google"
  version = "0.1.0"

  subnetwork = "projects/gcp-network/regions/us-west1/subnetworks/dev-us-west1-dynamic"

  names = [
    "gusw1-dev-fooapp-fe-0001-a-001-ip",
    "gusw1-dev-fooapp-fe-0001-a-002-ip",
    "gusw1-dev-fooapp-fe-0001-a-003-ip"
  ]

  addresses = [
    "10.11.0.10",
    "10.11.0.11",
    "10.11.0.12"
  ]
}

[1]https://registry.terraform.io/modules/terraform-google-modules/address/google/latest

【讨论】:

  • 谢谢,但我有预定义 IP 地址的解决方案。我希望 Terraform 有一个半动态的替代方案。
  • 您可以使用循环遍历您可以定义的计数,前 3 个八位字节可以硬编码,只需使用循环更改最后一个,并对实例。在这里,您可以找到一个示例:module "address-fe" { source = "terraform-google-modules/address/google" version = "0.1.0" subnetwork = "projects/gcp-network/regions/us-west1/subnetworks/dev-us-west1-dynamic" count = 3 name = "server-${count.index}" address = "10.10.10.${count.index}" }
  • 这段代码的一个小问题是迭代会从0开始,所以第一个输出名是server-0,第一个地址是10.10.10.0
  • 我不确定虚拟机在创建时如何使用此保留 IP 地址列表。 IE。该列表是如何从“google_compute_instance”资源中引用的,它如何知道哪个保留的 IP 地址可供自己使用?据我了解,VM 实例名称不是“名称”数组中定义的值,但如果是这种情况,解决方案将不符合要求,因为需要在另一个位置/文件中指定实例名称。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2019-05-16
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多