如何解决applicationGatewayBackendAddressPools 配置不适用于虚拟机规模集
我有一个使用 ARM 模板部署的 VMSS。这是 VMSS 资源部分下的 collections.abc
块。
networkProfile
在变量部分,如果我使用 "networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "[variables('nicName')]","properties": {
"primary": true,"ipConfigurations": [
{
"name": "[concat(variables('VMSSName'),'-ipconfig')]","properties": {
"subnet": {
"id": "[variables('subnetRef')]"
},"applicationGatewayBackendAddressPools": "[variables('AppGatewayBackendAddressPool')]"
}
}
]
}
}
]
},
函数并提供来自参数的值,那么它不会应用 VMSS 中的配置。例如:
resourceId()
我也试过添加 "AppGatewayBackendAddressPool": "[resourceId(parameters('VirtualNetworkResourceGroup'),'Microsoft.Network/applicationGateways/backendAddressPools',parameters('ApplicationGatewayName'),parameters('BackendAddressPool'))]",
但结果是一样的。
parameters('SubscriptionName')
当我像下面这样声明变量时,它会在 "AppGatewayBackendAddressPool": "[resourceId(parameters('SubscriptionName'),parameters('VirtualNetworkResourceGroup'),
-> Networking
中应用 backendAddressPool 配置。
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
附加到不同的虚拟机规模集。
解决方法
这就是我通过遵循 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
,您的变量/参数调用似乎没有问题,但 applicationGatewayBackendAddressPools
不是 VMSS 和应用程序网关的有效属性。
您可以检查 AKS 和 Application Gateway 文档。我通过在不同的 parameters.json 文件中设置应用程序网关部分中的 backendAddressPools
来实现相同的目标。
您似乎缺少变量中的 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')]"
}
]
}
}
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。