部署在VNET中的Function App无法从Azure Service Bus获取消息如何排查
问题排查方向
1. Service Bus侧网络访问配置排查
- 确认Service Bus命名空间的网络访问策略:如果配置了公共网络访问限制,需要将Function App的所有出站公网IP、或VNET对应子网加入Service Bus的IP白名单
- 如果Service Bus配置了专用终结点,确认专用终结点与Function App属于同一VNET或对等VNET,且专用终结点所属子网的NSG没有拦截来自Function App子网的访问流量
- 检查Function App所在子网是否开启了
Microsoft.ServiceBus服务端点(如果采用服务端点模式接入Service Bus而非专用终结点)
2. VNET及出站流量规则排查
- 确认Function App VNET集成的配置:如果开启了全部路由(WEBSITE_VNET_ROUTE_ALL=1),所有出站流量都会经过VNET,需要检查:
- 子网NSG的出站规则是否放通了Service Bus的对应端口:AMQP协议需放通5671/5672端口,AMQP Websocket/HTTPS需放通443端口,SBMP协议需放通9354端口
- 子网关联的用户定义路由(UDR)是否将Service Bus的流量路由到了防火墙、NVA等中间设备,需确认中间设备的规则放通了到Service Bus的访问
- 如果未开启全部路由,确认Service Bus的公网IP段没有被VNET的默认路由拦截
3. Function App运行时配置排查
- 尝试修改Service Bus连接字符串,指定传输模式为Websocket,避免AMQP默认端口被拦截:在连接字符串末尾添加
TransportType=AmqpWebSockets,强制流量走443端口 - 检查Function App是否配置了HTTP/HTTPS代理,确认代理规则允许访问Service Bus域名
- 确认Function App运行时的Service Bus SDK版本无已知兼容性问题,可尝试升级到最新稳定版
4. DNS解析排查
- 进入Function App的Kudu高级工具,使用
nslookup {your-servicebus-namespace}.servicebus.windows.net命令验证域名解析结果:- 如果使用专用终结点接入,解析结果应为Service Bus专用终结点的内网IP
- 如果解析结果异常,需检查VNET的DNS服务器配置,确认能正确解析Azure服务域名
5. 权限配置补充排查
- 如果采用托管身份访问Service Bus,确认Function App的系统分配/用户分配托管身份已被分配Azure Service Bus 数据接收方 对应角色,且角色分配范围覆盖目标主题和订阅
内容的提问来源于stack exchange,提问作者venkatesh k
相关产品推荐
相关产品推荐

