首页 文章

Terraform - 在Azure上提供静态IP地址

提问于
浏览
0

我已经使用Terraform一段时间了,并且对使用它和VMware和Azure提供商很满意 .

目前,我需要在Azure中使用静态IP地址配置VM . 试图用静电来谈论它们,但是我使用了安全锤,我无法转向 .

虽然我可以在子网中分配一些并将它们提供给Terraform(我使用ansible来驱动Terraform),但我想知道是否有其他人在Azure中解决了这个问题并且可能有很好的想法 .

我认为,主要问题是并发性 . 我需要一种在子网中自动“分配”IP的方法,并确保即使需要一段时间来构建VM并开始使用该地址,也不会同时运行其他配置请求 .

在私有数据中心,我会使用IPAM解决方案 . 在Azure中我没有可用的 . 寻找严格执行Azure Terraform Ansible的想法

3 回答

  • 0

    我觉得没问题 . 我有一些sample code用于切片我在实际工作中使用的子网 .

    我使用cidrsubnet从虚拟LAN地址空间计算子网,使用cidrhost将私有IP分配给主机 . 有一个非常好的教程here .

    显然,分配静态IP在自动缩放等方案中不起作用 .

  • 0

    实现此目的的一种方法是在Terraform中使用cidrhost插值 .

    您可以使用它每次创建相同的私有IP地址 . 其中一个例子如下:

    resource "azurerm_network_interface" "network_interface" {
    name                = "dev-network-interface"
    location            = "WestEurope"
    resource_group_name = "dev-rg"
    
    ip_configuration {
    name                          = "dev-nic-ipconfig"
    subnet_id                     = "${subnet_id}"
    private_ip_address_allocation = "static"
    private_ip_address            = "${cidrhost(10.100.0.56/27, 4)}"
    public_ip_address_id          = "${publicip_id}"
    }
    

    上面的示例应该为您提供10.100.0.60的私有IP

  • 0

    我也使用terraform内置函数来刻录ip地址,但我也理解你的问题,我不明白答案,这并不保证不会使用ip . 您似乎还需要一个变量作为ip地址从部署系统推送到迭代而不是重叠ip地址 .

    我很想知道上面答案的完整解决方案 .

    无论如何,我有一个创建环境的模块,我使用下面的例子来获取静态IP地址,如果你重新运行模块,但它会将静态IP地址反转为动态,然后回到静态:)

    然而,我自己的答案是首先创建一个设置为静态的nic,然后再使用动态IP地址创建相同的nic,如下所示:

    resource "azurerm_network_interface" "vm_nic" {
      name                = "nic"
      location            = "${var.location}"
      resource_group_name = "${azurerm_resource_group.rg.name}"
    
      ip_configuration {
        name                          = "privatenic"
        subnet_id                     = "${data.azurerm_subnet.subnet.id}"
        private_ip_address_allocation = "dynamic"
      }
    }
    
    resource "azurerm_network_interface" "vm_staticnic" {
      name                = "testnic"
      location            = "${var.location}"
      resource_group_name = "${azurerm_resource_group.rg.name}"
    
      ip_configuration {
        name                          = "privatenic"
        subnet_id                     = "${data.azurerm_subnet.subnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address            = "${azurerm_network_interface.vm_nic.private_ip_address}"
      }
    }
    

相关问题