使用Bicep配置Azure Load Balancer后端池失败求助
问题描述
我们希望导出所有Azure资源模板(Export template),以便在需要时重新创建环境(最终目标是通过模板创建新环境)。我创建了一个临时Azure负载均衡器并导出模板,尝试重新部署,但每次解决一个错误后又出现新的错误。目前负载均衡器已创建成功,但后端池(Backend Pool)未能生成。有人告诉我需要引用服务器所在的虚拟网络(资源或模块),但我不清楚具体操作方法。
后端服务器信息
- 服务器名称:dev-web01
- 网络接口(Network Interface)名称:dev-web01-Nic
- IP配置(IP configurations)名称:ipconfig1,IPv4,主配置(Primary),静态IP:10.0.0.101
- 子网(Subnet)名称:dev-web-Net
- 服务器名称:dev-web02
- 网络接口(Network Interface)名称:dev-web02-Nic
- IP配置(IP configurations)名称:ipconfig1,IPv4,主配置(Primary),静态IP:10.0.0.102
- 子网(Subnet)名称:dev-web-Net
我的Bicep代码
param location string = 'westus2' var loadBalancerName = 'dev-web01-LB' var virtualNetworkName = 'dev-dev-VNET' var subnetName = 'dev-web-Net' var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName) resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-07-01' existing = { name: virtualNetworkName } resource loadBalancers_name 'Microsoft.Network/loadBalancers@2022-07-01' = { name: loadBalancerName location: location sku: { name: 'Standard' tier: 'Regional' } properties: { frontendIPConfigurations: [ { name: 'FrontendIP' id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP') properties: { privateIPAddress: '10.0.0.196' privateIPAllocationMethod: 'Static' subnet: { id: subnetRef } privateIPAddressVersion: 'IPv4' } } ] backendAddressPools: [ { name: 'BackendPool' properties: { loadBalancerBackendAddresses: [ { // 我被告知需要在这里指向服务器?(资源或模块) name: 'dev-web01-Nicipconfig1' properties: { } } { name: 'dev-web01-Nicipconfig1' properties: { } } ] } } ] loadBalancingRules: [ { name: 'webport-701' id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'webport-701') properties: { frontendIPConfiguration: { id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP') } frontendPort: 701 backendPort: 701 enableFloatingIP: false idleTimeoutInMinutes: 4 protocol: 'Tcp' enableTcpReset: false loadDistribution: 'Default' disableOutboundSnat: false backendAddressPool: { id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool') } backendAddressPools: [ { id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool') } ] probe: { id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe') } } } ] probes: [ { name: 'HealthProbe' id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe') properties: { protocol: 'Tcp' port: 8080 intervalInSeconds: 5 numberOfProbes: 1 probeThreshold: 1 } } ] inboundNatRules: [] outboundRules: [] inboundNatPools: [] } dependsOn: [ virtualNetwork ] }
请问有人知道如何通过Bicep为Azure负载均衡器添加后端池吗?
解决方案
你的问题核心在于后端池的地址配置未正确引用现有网络接口的IP配置,同时代码中存在几处错误需要修正:
1. 修正后端池的地址引用
要将后端服务器加入负载均衡器的后端池,需要直接引用服务器的网络接口IP配置资源。首先声明现有网络接口资源,然后在loadBalancerBackendAddresses中指定networkInterfaceIpConfiguration的ID。
2. 修正代码中的其他错误
- 负载均衡规则的
id字段错误:当前指向了frontendIpConfigurations,应改为指向loadBalancingRules资源 - 后端池地址的名称重复:两个地址都用了
dev-web01-Nicipconfig1,需分别改为dev-web01-Nicipconfig1和dev-web02-Nicipconfig1 - 移除前端IP配置中不必要的
id字段:Bicep会自动生成资源ID,手动指定易出错
修正后的完整Bicep代码
param location string = 'westus2' var loadBalancerName = 'dev-web01-LB' var virtualNetworkName = 'dev-dev-VNET' var subnetName = 'dev-web-Net' var subnetRef = resourceId('Microsoft.Network/virtualNetworks/subnets', virtualNetworkName, subnetName) // 声明现有虚拟网络 resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-07-01' existing = { name: virtualNetworkName } // 声明现有网络接口(dev-web01) resource nicWeb01 'Microsoft.Network/networkInterfaces@2022-07-01' existing = { name: 'dev-web01-Nic' } // 声明现有网络接口(dev-web02) resource nicWeb02 'Microsoft.Network/networkInterfaces@2022-07-01' existing = { name: 'dev-web02-Nic' } resource loadBalancer 'Microsoft.Network/loadBalancers@2022-07-01' = { name: loadBalancerName location: location sku: { name: 'Standard' tier: 'Regional' } properties: { frontendIPConfigurations: [ { name: 'FrontendIP' properties: { privateIPAddress: '10.0.0.196' privateIPAllocationMethod: 'Static' subnet: { id: subnetRef } privateIPAddressVersion: 'IPv4' } } ] backendAddressPools: [ { name: 'BackendPool' properties: { loadBalancerBackendAddresses: [ { name: 'dev-web01-Nicipconfig1' properties: { // 引用dev-web01网卡的ipconfig1配置 networkInterfaceIpConfiguration: { id: nicWeb01.properties.ipConfigurations[0].id } } } { name: 'dev-web02-Nicipconfig1' properties: { // 引用dev-web02网卡的ipconfig1配置 networkInterfaceIpConfiguration: { id: nicWeb02.properties.ipConfigurations[0].id } } } ] } } ] loadBalancingRules: [ { name: 'webport-701' properties: { frontendIPConfiguration: { id: resourceId('Microsoft.Network/loadBalancers/frontendIpConfigurations', loadBalancerName, 'FrontendIP') } frontendPort: 701 backendPort: 701 enableFloatingIP: false idleTimeoutInMinutes: 4 protocol: 'Tcp' enableTcpReset: false loadDistribution: 'Default' disableOutboundSnat: false backendAddressPool: { id: resourceId('Microsoft.Network/loadBalancers/backendAddressPools', loadBalancerName, 'BackendPool') } probe: { id: resourceId('Microsoft.Network/loadBalancers/probes', loadBalancerName, 'HealthProbe') } } } ] probes: [ { name: 'HealthProbe' properties: { protocol: 'Tcp' port: 8080 intervalInSeconds: 5 numberOfProbes: 1 probeThreshold: 1 } } ] inboundNatRules: [] outboundRules: [] inboundNatPools: [] } dependsOn: [ virtualNetwork nicWeb01 nicWeb02 ] }
关键说明
- 通过
existing关键字引用已存在的网络接口资源,无需重新创建 - 在
loadBalancerBackendAddresses中,使用networkInterfaceIpConfiguration.id直接关联网卡的IP配置,这是将服务器加入后端池的正确方式 - 添加网络接口的
dependsOn依赖,确保负载均衡器部署时能正确引用这些资源
内容的提问来源于stack exchange,提问作者Mike Kennedy
相关产品推荐
相关产品推荐

