【问题标题】:applicationGatewayBackendAddressPools configurations does not apply in virtual machine scale setapplicationGatewayBackendAddressPools 配置不适用于虚拟机规模集
【发布时间】:2021-06-01 17:00:21
【问题描述】:

我有一个使用 ARM 模板部署的 VMSS。这是 VMSS 资源部分下的 networkProfile 块。

             "networkProfile": {
                 "networkInterfaceConfigurations": [
                     {
                         "name": "[variables('nicName')]",
                         "properties": {
                             "primary": true,
                             "ipConfigurations": [
                                 {
                                     "name": "[concat(variables('VMSSName'), '-ipconfig')]",
                                     "properties": {
                                         "subnet": {
                                             "id": "[variables('subnetRef')]"
                                          },
                                         "applicationGatewayBackendAddressPools": "[variables('AppGatewayBackendAddressPool')]"
                                         }
                                     }
                                 ]
                             }
                         }
                     ]
                 },

在变量部分,如果我使用resourceId() 函数并提供参数值,则它不会应用 VMSS 中的配置。例如:

"AppGatewayBackendAddressPool": "[resourceId(parameters('VirtualNetworkResourceGroup'),'Microsoft.Network/applicationGateways/backendAddressPools', parameters('ApplicationGatewayName'), parameters('BackendAddressPool'))]",

我也试过添加parameters('SubscriptionName'),但结果是一样的。

"AppGatewayBackendAddressPool": "[resourceId(parameters('SubscriptionName') ,parameters('VirtualNetworkResourceGroup'),'Microsoft.Network/applicationGateways/backendAddressPools', parameters('ApplicationGatewayName'), parameters('BackendAddressPool'))]",

当我像下面这样声明变量时,它会在 Networking -> Load Balancing 中应用 backendAddressPool 配置。

"AppGatewayBackendAddressPool": [
        { "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/applicationGateways/<applicationGatewayName>/backendAddressPools/<backendAddressPool>" }
 ],

我正在与subnetRef 类似,如下所示,效果很好。

"subnetRef": "[resourceId(parameters('VirtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks/subnets', parameters('VirtualNetworkName'),  parameters('SubnetName'))]",

我想通过定义单独的 parameters.json 文件来参数化部署,以便我可以将 applicationGatewayBackendAddressPools 附加到不同的虚拟机规模集。

【问题讨论】:

  • 你不是缺少变量的连接吗?
  • 是的@KedMardemootoo 这是我在资源部分缺少的 concat 函数。我已经发布了完整的解决方法作为答案。

标签: azure azure-application-gateway azure-vm-scale-set


【解决方案1】:

这就是我通过关注Ked Mardemootoo 的答案实现的。

VMSS资源networkProfile下的IP配置部分。

"ipConfigurations": [
  {
      "name": "[concat(variables('VMSSName'), '-ipconfig')]",
      "properties": {
          "subnet": {
              "id": "[variables('subnetRef')]"
          },
          "applicationGatewayBackendAddressPools": [
              { "id": "[concat(parameters('AapplicationGatewayExternalid'), '/backendAddressPools/', parameters('BackendAddressPool'))]" }
          ]
      }
  }
]

模板文件参数:

        "BackendAddressPool": {
            "type": "string",
            "metadata": {
                "description": "Backend pool to host blue/green vmss."
            }
        },
        "AapplicationGatewayExternalid": {
            "type": "string",
            "metadata": {
                "description": "Application Gateway Id."
            }
        }

现在,ARM 模板正在 VMSS 的资源部分下动态调用和引用 applicationGatewayBackendAddressPools 属性。

我在parameters.json 文件中有这两个参数,我可以根据环境定义值。

        "BackendAddressPool": {
            "value": "<backendPoolName>"
        },
        "AapplicationGatewayExternalid": {
            "value": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/applicationGateways/<ApplicationGatewayName>"
        }

在发布管道变量中覆盖模板变量: overriding template vars

在管道变量中定义 pipeline var

【讨论】:

    【解决方案2】:

    您似乎缺少变量中的 concat。查看我端的原始 json,这就是它的配置方式。看看能不能做类似的事情,把子网名和后端地址池转换成变量。

    "ipConfigurations": [
        {
            "name": "ip-vmss-name",
            "properties": {
                "primary": true,
                "subnet": {
                    "id": "[concat(parameters('virtualNetworks_vnet_externalid'), '/subnets/snet-vm')]"
                },
                "privateIPAddressVersion": "IPv4",
                "applicationGatewayBackendAddressPools": [
                    {
                        "id": "[concat(parameters('applicationGateways_agw_1_externalid'), '/backendAddressPools/be-addr-pool-vmss-1')]"
                    }
                ]
            }
        }
    ]
    

    【讨论】:

      【解决方案3】:

      您的变量/参数调用似乎没有任何问题,但 applicationGatewayBackendAddressPools 不是 VMSS 和应用程序网关的有效属性。

      您可以查看AKSApplication Gateway 文档。我通过在不同的 parameters.json 文件中设置 backendAddressPools(位于 Application Gateway 部分)来实现相同的目标。

      【讨论】:

      • 当我将变量声明为:"AppGatewayBackendAddressPool": [ { "id": "/subscriptions/&lt;subscriptionId&gt;/resourceGroups/&lt;resourceGroupName&gt;/providers/Microsoft.Network/applicationGateways/&lt;applicationGatewayName&gt;/backendAddressPools/&lt;backendAddressPool&gt;" } ],
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多