Terraform - предоставление статических IP-адресов в Azure - PullRequest
0 голосов
/ 11 мая 2018

Я уже давно пользуюсь Terraform, и я доволен его использованием с поставщиками VMware и Azure.

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

Хотя я могу выделить некоторые данные в подсети и передать их Terraform (я использую ansible для управления Terraform), я подумал, не решал ли кто-нибудь еще эту проблему в Azure и может иметь хорошие идеи.

На мой взгляд, главная проблема - это параллелизм. Мне нужен способ атомарного «выделения» IP-адреса в подсети и уверенность в том, что даже если для создания виртуальной машины и начала использования этого адреса требуется некоторое время, ни один другой запрос на предоставление, выполняющийся одновременно, не получит такой же.

В частном центре обработки данных я бы использовал решение IPAM. В Azure у меня нет ни одного доступного. Ищете идеи для реализации строго с Azure + Terraform + Ansible

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Одним из способов достижения этого является использование интерполяции cidrhost в Terraform.

Вы можете использовать его для создания одного и того же частного 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}"
}

Приведенный выше пример должен дать вам частный IP-адрес 10.100.0.60

0 голосов
/ 01 ноября 2018

Я также использую встроенные функции terraform для вырезания IP-адресов, но я также понимаю ваш вопрос и не понимаю ответов, это не гарантирует, что IP-адрес не будет использоваться.Также кажется, что вам понадобится переменная в качестве IP-адреса для передачи из системы развертывания, чтобы выполнять итерацию, а не перекрывать IP-адреса.

Я хотел бы знать полное решение для ответа выше.

Во всяком случае, у меня есть модуль, который создает среду, и я использую приведенный ниже пример, чтобы перейти к статическим IP-адресам, если вы снова запустите модуль, однако он обратит статические IP-адреса к динамическим, а затем обратно к статическим:)

Мой собственный ответ, однако, должен был бы сначала создать ник, который установлен на статический, а затем снова создать тот же ник, с динамическим IP-адресом, пример ниже:

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}"
  }
}
0 голосов
/ 12 мая 2018

Не вижу проблем. У меня есть пример кода для нарезки подсетей, который я использую в реальной работе.

Я использую cidrsubnet для вычисления подсетей из виртуального локального адресного пространства и cidrhost для назначения частного IP-адреса хостам. Здесь есть очень хороший учебник .

Очевидно, что назначение статических IP-адресов не работает в сценариях, таких как автоматическое масштабирование.

...