Разверните Azure VPN-шлюз в существующей виртуальной сети, не затрагивая существующие подсети. - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь развернуть новый шлюз виртуальной сети Azure в существующей VNET, которая включает несколько подсетей.Сначала я настраиваю это в тестовой среде с фиктивной подсетью.Я использую ARM для создания файла шаблона и параметров .json, который я развертываю через Jenkins.В настоящее время шаблон пытается повторно развернуть весь VNET при развертывании шлюза виртуальной сети.Я не хочу этого делать.Я хочу развернуть шлюз виртуальной сети в существующей сети VNET.Ниже описано, как я кодирую VNET в шаблоне.

{
    "apiVersion": "2019-04-01",
    "type": "Microsoft.Network/virtualNetworks",
    "name": "[parameters('virtualNetworkName')]",
    "location": "[resourceGroup().location]",
    "properties": {
      "addressSpace": {
        "addressPrefixes": [
          "[parameters('azureVNetAddressPrefix')]"
        ]
      },
      "subnets": [
        {
          "name": "GatewaySubnet",
          "properties": {
            "addressPrefix": "[parameters('gatewaySubnetPrefix')]"
          }
        }
      ]
    }
  }

При развертывании этого шаблона в Jenkins возникает следующая ошибка:

"code": "InUseSubnetCannotBeDeleted",

"message": "Subnet testing-subnet is in use by /subscriptions/****/resourceGroups/networks-dev-rg/providers/Microsoft.Network/networkInterfaces/dev-jmp-d31653/ipConfigurations/ipconfig1 and cannot be deleted. In order to delete the subnet, delete all the resources within the subnet. See aka.ms/deletesubnet."

Я смотрел набаза знаний Microsoft, но я изо всех сил пытался найти объяснение того, как я могу это сделать, или вообще возможно ли это.В идеале я хотел бы избегать перечисления всех подсетей в виртуальной сети, поскольку этот шаблон я хочу применить к различным виртуальным сетям с различными подсетями.

Кто-нибудь может дать ответы или совет?Спасибо.

Ответы [ 3 ]

1 голос
/ 18 июня 2019

Извините, не хватает представителя для комментариев.

Я боролся с той же проблемой несколько недель назад. К сожалению, инкрементное развертывание не работает так, как вы ожидаете с подсетями. Если вы предоставите пустой массив, он увидит, что он «отличается от предыдущего», и попытается удалить все подсети.

Таким образом, чтобы добавить новую подсеть, вам необходимо указать все предыдущие подсети, а также новую.

См. Этот выпуск, который имеет несколько полезных комментариев: https://github.com/Azure/azure-quickstart-templates/issues/2786

0 голосов
/ 18 июня 2019

К сожалению, это не очень хорошо поддерживается в ARM. Это связано с тем, что VNET является ресурсом, а подсеть является свойством этого ресурса. При развертывании шаблона ARM все не упомянутые ресурсы игнорируются (по крайней мере, в итеративном режиме).

Однако свойства существующих ресурсов, которые упоминаются, ДОЛЖНЫ БЫТЬ УКАЗАНЫ. Это связано с тем, что Azure пытается реализовать ресурс, указанный в шаблоне. Если свойство отличается, оно изменит его. Если свойство отсутствует, оно удалит его.

Потенциальные решения:

  1. Есть несколько шаблонов для каждого из ваших vnets. Когда вы вносите изменения, вы обновляете весь vnet. Это требует от вас отслеживания нескольких шаблонов и не является идеальным для инфраструктуры как кода, но является простым решением.

  2. Вместо этого используйте решение powershell:

https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-tutorial-create-gateway-powershell. Я сам не пробовал этого, так как мои начальники сказали мне использовать ARM, но на нескольких форумах это предлагалось в качестве альтернативы.

  1. Вы также можете попытаться использовать copyloop согласно этому руководству, но это имеет ограниченную полезность, и я еще не проверял, можете ли вы использовать массив имен вместо массива чисел:

https://pkm -technology.com / лазурь-VNET-JSON /

  1. Обновите свои подсети как часть отдельного шаблона. Это также требует от вас обновления вашего основного шаблона vnet, в противном случае ваши новые подсети будут удалены, если вы когда-либо повторно развернете основной шаблон vnet. Кроме того, вы можете добавлять подсети только таким способом. Это не поможет, если вы хотите заняться чем-то другим, например, развернуть шлюз VPN.
0 голосов
/ 18 июня 2019

Следующий шаблон ARM добавит подсеть в виртуальную сеть с существующими подсетями и не будет мешать существующим подсетям.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "virtualNetworkName": {
      "type": "string",
      "defaultValue": "VNet1"
    },
    "gatewaySubnetPrefix": {
      "type": "string",
      "defaultValue": "10.0.2.0/24"
    }
  },
  "variables": {},
  "resources": [
    {
      "apiVersion": "2019-04-01",
      "type": "Microsoft.Network/virtualNetworks/subnets",
      "name": "[concat(parameters('virtualNetworkName'), '/GatewaySubnet')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "addressPrefix": "[parameters('gatewaySubnetPrefix')]"
      }
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...