簡體   English   中英

在不影響現有子網的情況下將 Azure VPN 網關部署到現有 vnet

[英]Deploy Azure VPN gateway to existing vnet without affecting existing subnets

我正在嘗試將新的 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 知識庫,但我一直在努力尋找如何做到這一點的解釋,或者它是否可能。 理想情況下,我希望避免列出 vnet 中的所有子網,因為這是我想應用於具有不同子網的不同 vnet 的模板。

任何人都可以提供答案或建議嗎? 謝謝。

不幸的是,這在 ARM 中似乎沒有得到很好的支持。 這是因為 VNET 是一種資源,而子網是該資源的屬性。 部署 ARM 模板時,任何未提及的資源都將被忽略(至少在迭代模式下)。

但是,必須指定提及的現有資源的屬性。 這是因為 Azure 嘗試實現模板中指定的資源。 如果一個屬性不同,它會改變它。 如果屬性不存在,它將刪除它。

可能的解決方案:

  1. 每個 vnet 都有多個模板。 進行更改時,會更新整個 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/azure-vnet-json/

  1. 作為單獨模板的一部分更新您的子網。 這還要求您還更新您的主 vnet 模板,否則如果您重新部署主 vnet 模板,您的新子網將被刪除。 此外,您只能以這種方式添加子網。 如果您想做其他事情,例如部署 VPN 網關,這無濟於事。

以下 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')]"
      }
    }
  ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM