Tengo una Azure Function en plan Flexible Consumption integrada a una VNET privada con la intención de conectarse por IP privada a un SQL Server instalado en una máquina virtual (Windows Server + SQL Server) localizada en otra VNET, conectadas mediante VNet Peering bidireccional.
Toda la configuración parece correcta, pero la Function no logra conectarse al SQL Server. Además, en el portal aparece el mensaje:
VNet integration is not healthy
🟦 Arquitectura de red
VNET 1 – VNET-AZFUNCTIONFLEX
- Subnet: AzFuncFlexSubnet (172.17.0.0/16)
Contiene Azure Function (Flex Consumption)
- Subnet con delegación Microsoft.App/enviroments
Sin NSG
Sin Route Table
Sin NAT Gateway
VNet peering hacia la VNET del SQL Server
VNET 2 – VNET-MSSQL
- Subnet: 172.16.0.0/24
- Contiene la VM con SQL Server (IP privada 172.16.0.4)
- Firewall de Windows habilitado para 51433
- SQL Server configurado con:
- TCP habilitado
- Puerto fijo 51433
- SQL + Windows Authentication
- Conexión externa funciona desde otras máquinas
VNet Peering (en ambos sentidos)
Allow VNet Access: Enabled
Allow Forwarded Traffic: Enabled
No Gateway Transit habilitado
Pruebas realizadas
- SQL Server responde en el puerto 51433 desde máquinas externas por VPN.
- El firewall de Windows y el NSG permiten tráfico desde 172.17.0.0/16.
SQL escucha correctamente en 51433 (verificado con netstat).
- La VM SQL muestra Effective Routes correctas hacia 172.17.0.0/16 vía VNet Peering.
- La Function usa cadena de conexión con IP privada.
- La delegación de la subnet es correcta: Microsoft.App/enviroment.
No se usa Private Endpoint (no aplica porque el SQL Server está en una VM IaaS).
Problema principal
La Function no consigue establecer conexión con el SQL Server, y la interfaz muestra:
VNet integration is not healthy
La integración a la VNet parece fallar internamente: ➡ aunque el portal dice que está “Connected”, realmente no está adquiriendo rutas de la VNet remota.
No existe manera visible de revisar los Effective Routes del runtime de la Function Flex (porque no expone NIC), por lo que sospecho:
La Function no está adquiriendo IP dentro de la subnet
O no está recibiendo las rutas del peering
O la integración está en estado parcial / inconsistente
- ¿Qué pasos recomiendan para depurar un VNet Integration is not healthy en Azure Functions Flex?
- ¿Existe forma oficial de ver los Effective Routes que usa el worker de Function Flex?
- ¿Puede una subnet /16 causar problemas de asignación de IP para Function Flex?
- ¿Es posible que el estado “Unhealthy” sea la razón por la cual la Function no recibe rutas del peering?
- ¿Qué otras causas están documentadas para VNet Integration “Unhealthy”?
- ¿Es necesario recrear la integración o la subnet para corregir este estado interno?
- ¿Alguien ha tenido este mismo problema al intentar conectar Function Flex → SQL Server en VM privada?
Cualquier guía adicional será bien recibida.
Estoy intentando determinar si se trata de un bug de VNet Integration en Flex Consumption, un problema de asignación de IP en /16, o una inconsistencia interna en el runtime de Azure Functions Flex que requiere recrearse.
Gracias por cualquier ayuda o experiencia.