Azure Function(VNet部署)无法连接已加白名单的Azure Redis缓存
部署在VNet单子网中的Azure Function,原本与公网可访问的Azure Redis Cache通信正常,将Function的出站IP添加至Redis缓存白名单后,出现连接超时问题。
环境信息
- Azure Function出站IP查看路径:
Function App -> 属性
- 子网信息:无安全组或自定义路由表

报错信息
Method: PutKeysAsync error while inserting key: key and value: akhil, Error: The message timed out in the backlog attempting to send because no connection became available (5000ms) - Last Connection Exception: It was not possible to connect to the redis server(s). ConnectTimeout, command=SET, timeout: 5000, inst: 0, qu: 0, qs: 0, aw: False, bw: CheckingForTimeout, rs: NotStarted, ws: Initializing, in: 0, last-in: 0, cur-in: 0, sync-ops: 0, async-ops: 4, serverEndpoint: test-pr-analyzer-redis-cache.redis.cache.windows.net:6380, conn-sec: n/a, aoc: 0, mc: 1/1/0, mgr: 10 of 10 available, clientName: pd1sdwk001NH9(SE.Redis-v2.8.0.27420), IOCP: (Busy=0,Free=1000,Min=1,Max=1000), WORKER: (Busy=2,Free=32765,Min=1,Max=32767), POOL: (Threads=5,QueuedItems=0,CompletedItems=4712,Timers=12), v:2.8.0.27420
1. 验证白名单IP完整性
- 确认Redis白名单已添加Azure Function的全部出站IP,包括属性页中列出的所有主出站IP和额外出站IP,不能仅添加部分IP。
- 检查是否遗漏IPv6地址(若Function启用了IPv6出站)。
2. 检查VNet子网出站规则
- 核实VNet是否关联了网络安全组(NSG),出站规则需允许访问Redis的SSL端口6380(或非SSL端口6379,若已启用)。
- 确认Azure Function的VNet集成配置正确,确保流量确实从指定子网出站。
3. 校验Redis连接配置
- 确认Function使用的Redis连接字符串指向SSL端口6380,Azure Redis默认强制禁用非SSL连接。
- 检查连接字符串中的主机名、访问密钥是否无拼写错误。
4. 修复StackExchange.Redis客户端问题
- 升级客户端至最新稳定版,旧版本2.8.0.27420存在连接池、超时处理的已知bug。
- 调整客户端超时参数:将
ConnectTimeout和SyncTimeout值提升至10000ms,适配网络延迟。 - 优化连接池配置:确保
maxconnects参数设置合理,避免连接耗尽。
5. 测试网络连通性
- 在Function中添加测试代码,验证到Redis服务器端口的连通性(如使用PowerShell的
Test-Connection或TCP端口检测)。 - 通过Azure Monitor查看Redis的连接日志,确认Function的出站IP是否有连接被拒绝的记录。
内容的提问来源于stack exchange,提问作者akhil

