应用程序网关后端地址池配置不适用于虚拟机规模集



我有一个使用 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中应用后端地址池配置。

"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附加到不同的虚拟机规模集。

这就是我通过遵循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>"
}

重写发布管道变量中的模板变量: 覆盖模板变量

在管道变量中定义 管道变量

您似乎缺少变量中的连接。看看我这边的原始 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')]"
}
]
}
}
]

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

可以查看 AKS 和应用程序网关文档。我通过在不同的参数.json文件中设置应用程序网关部分中的backendAddressPools来实现相同的目标。

最新更新